Oracle Flashback Database特性允许通过SQL语句Flashback Database语句,让数据库前滚到当前的前一个时间点或者SCN,而不需要做时间点的恢复。闪回数据库可以迅速将数据库回到误操作或人为错误的前一个时间点,如Word中的"撤消"操作,可以不利用备份就快速的实现基于时间点的恢复。Oracle通过创建新的Flashback Logs(闪回日志),记录数据库的闪回操作。如果希望能闪回数据库,需要设置如下参数:DB_RECOVER_FILE_DEST日志的存放位置,DB_RECOVER_FILE_DEST_SIZE恢复区的大小。在创建数据库的时候,Oracle将自动创建恢复区,但默认是关闭的,需要执行alter database flashback on命令。


下面是使用Flashback Database的特性来做一次应用测试。

一、系统要为归档模式

1、查看当前系统是否为归档模式


SQL> archive log list;

Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            /oracle/arch/ora10g

Oldest online log sequence     1525

Next log sequence to archive   1527

Current log sequence           1527





2、开启归档,如果已是归档模式无需操作





关闭数据


SQL> shutdown immediate;


Database closed.

Database dismounted.



mount模式启动


SQL> startup mount;


ORACLE instance started.




Total System Global Area 2.1475E+10 bytes


Fixed Size                  2122432 bytes


Variable Size            7046434112 bytes


Database Buffers         1.4412E+10 bytes


Redo Buffers               14651392 bytes


Database mounted.



在mount状态下直接调整数据库到归档模式


SQL> alter database archivelog;



Database altered.





二、oracle数据库开启闪回功能

1、查看如下两个参数设置

SQL> show parameter db_recover


上述参数是由下面命令生成的:

设置闪回空间大小

SQL> alter system set db_recovery_file_dest_size=20240m;

设置闪回目录

SQL> alter system set db_recovery_file_dest='/vgcrm/flash';


2、开启FLASHBACK  (此操作要在mount状态下进行)

SQL> startup mount

 ORACLE instance started.



Total System Global Area 2.1475E+10 bytes

Fixed Size                  2122432 bytes

Variable Size            7046434112 bytes

Database Buffers         1.4412E+10 bytes

Redo Buffers               14651392 bytes

Database mounted.


SQL> alter database flashback on;

Database altered.

确认闪回功能是否开启


SQL> select flashback_on from v$database;

FLASHBACK_ON

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

YES

开启时,其值为YES


SQL> alter database open;

 Database altered.

3、创建还原点

SQL> create restore point restore_standby guarantee flashback database;

 通过从动态性能视图 V$RESTORE_POINT 中执行 SELECT 来确认该恢复点是否存在: 

SQL> select * from v$restore_point;


       SCN DATABASE_INCARNATION# GUA STORAGE_SIZE TIME

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

NAME

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

1.4890E+13                     7 YES     15941632 14-APR-16 12.10.57.000000000 AM

RESTORE_STANDBY



4、开始进行应用测试。

。。。。。。


5、测试应用之后将数据库闪回到还原点的状态

先关闭数据库

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

将数据库mount

SQL> startup mount

ORACLE instance started.



Total System Global Area 2.1475E+10 bytes

Fixed Size                  2122432 bytes

Variable Size            5016390976 bytes

Database Buffers         1.6442E+10 bytes

Redo Buffers               14651392 bytes

Database mounted.

闪回数据库

SQL> flashback database to restore point restore_standby;


Flashback complete.

将数据库OPEN 需要用resetlogs的方式

SQL> alter database open RESETLOGS;


Database altered.


6、测试之后删除还原点

SQL> drop restore point restore_standby;


Restore point dropped.

三、关闭数据库的闪回功能(重要)

测试结束后,关闭数据库闪回功能,此时数据库恢复原来状态。

SQL> alter database flashback off;



Database altered.