使用Flashback Database进行数据表级别的定点恢复

Oracle已经提供了非常完善的数据备份恢复措施,从9i开始,针对一些常见场景下的小规模数据恢复需求,Oracle推出了一系列的Flashback技术。

Flashback中文称为“闪回”,Oracle的闪回技术并不是一个单独技术,而是根据不同的恢复粒度而推出的一系列数据快速恢复技术。更重要的是,各个Flashback技术虽然名称相同或者相似,但底层依赖的技术还是存在很大的差异。

在笔者之前的系列中,针对flashback query、flashback table和flashback archive等进行过比较详细的介绍。Flashback Database是Flashback家族中恢复粒度最大的项目,本篇介绍如何利用Flashback Database实现数据表级别数据恢复。

1、环境和前提条件介绍

笔者使用Oracle 11gR2进行实验,具体版本为11.2.0.4。

SQL> select * from v$version;

BANNER

--------------------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - Production

PL/SQL Release 11.2.0.4.0 - Production

CORE    11.2.0.4.0      Production

TNS for Linux: Version 11.2.0.4.0 - Production

NLSRTL Version 11.2.0.4.0 – Production

数据库运行在归档模式下,配置Fast Recovery Area实行自动管理。

SQL> show parameter recovery

NAME                                TYPE        VALUE

------------------------------------ ----------- ------------------------------

db_recovery_file_dest                string      /u01/app/fast_recovery_area

db_recovery_file_dest_size          big integer 10000M

recovery_parallelism                integer    0

SQL> archive log list;

Database log mode              Archive Mode

Automatic archival            Enabled

Archive destination            USE_DB_RECOVERY_FILE_DEST

Oldest online log sequence    18

Next log sequence to archive  21

Current log sequence          21

此时,系统保持默认的配置项目,不开启flashback database特性。

SQL> select flashback_on from v$database;

FLASHBACK_ON

------------------

NO

SQL> show parameter flashback

NAME                                TYPE        VALUE

------------------------------------ ----------- ------------------------------

db_flashback_retention_target        integer    1440

注意:参数db_flashback_retention_target是控制flashback database的重要参数项目。该参数在11g中默认为1440,单位是分钟,也就是折合24小时。Flashback Database是基于在recovery area中单独建立的Flashback Database Log。如果对一些业务处理量比较大且频繁,变化比较大的数据库开启较长的Retention Target时间,需要确保Fast Recovery Area的大小足够大。

2、启动Flashback Database

开启Flashback Database,需要正常关闭数据库,之后启动到mount状态。

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup mount

ORACLE instance started.

Total System Global Area  372449280 bytes

Fixed Size                  1364732 bytes

Variable Size            306187524 bytes

Database Buffers          58720256 bytes

Redo Buffers                6176768 bytes

Database mounted.

SQL> alter database flashback on;

Database altered.

启动数据库到open状态。

SQL> alter database open;

Database altered.

Flashback信息和Flashback能恢复到的最早时间,可以通过视图查看到。

SQL> select current_scn, flashback_on from v$database;

CURRENT_SCN FLASHBACK_ON

----------- ------------------

1350667 YES

--最早时间和SCN号

SQL> select * from v$flashback_database_log;

OLDEST_FLASHBACK_SCN OLDEST_FLASHBACK_TIME RETENTION_TARGET FLASHBACK_SIZE ESTIMATED_FLASHBACK_SIZE

-------------------- --------------------- ---------------- -------------- ------------------------

1350306 19-六月-15 13:33:30              1440      131072000                220200960

Recovery Area中的Flashback Database Log,如下:

SQL> select * from v$flashback_database_logfile;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/2a6aef21ed1d78c59d0a254a8547b663.html