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;