Flashback Database闪回数据库 使用闪回数据库可以将数据库快速的闪回到过去某个时间点。在启用闪回数据时,会将修改过的块的前映像作为闪回数据库日志保存在闪回恢复区中,如出现逻辑坏块或用户错误操作需要恢复到过去的时间点,闪回数据库将还原数据库的前映像,然后使用归档日志和redo前滚到期望恢复的时间点,因为无需还原数据库的数据文件,所有此过程速度比较传统的还原恢复通常快很多。 启动闪回数据库时,会将前映像数据保存在“闪回缓冲区”中,然后由恢复写入器(Recovery Writer,RVWR)后台进程,将闪回缓冲区的前映像数据保存在闪回恢复区的闪回数据库日志中。 配置闪回数据库相关参数: db_recovery_file_dest 决定闪回恢复区路径 db_recovery_file_dest_size 决定闪回恢复区大小 db_flashback_retention_target 保留恢复最近多长时间的数据,单位为分钟。 闪回数据库必须在归档模式下 开启归档 1、SQL> alter system set log_archive_dest_1='location=+oradg/b1/recovery/' scope=both; 2、SQL> shutdown immediate 3、SQL> startup mount 4、SQL> alter database archivelog; 5、SQL> alter database open; 6、SQL> archive log list 设置闪回区大小,路径,闪回保留时间SQL> alter system set db_recovery_file_dest_size=5G;System altered.SQL> alter system set db_recovery_file_dest='+ORADG';System altered.SQL> alter system set db_flashback_retention_target=2880;System altered.开启闪回功能SQL> startup mount exclusiveSQL> alter database flashback on;Database altered.SQL> select flashback_on from v$database;
YES 关闭闪回功能SQL> startup mount exclusiveORACLE instance started.Total System Global Area 839282688 bytesFixed Size 2217992 bytesVariable Size 557844472 bytesDatabase Buffers 276824064 bytesRedo Buffers 2396160 bytesDatabase mounted.SQL> ?alter database flashback off;Database altered.SQL> alter database open ;Database altered.SQL> alter system set db_recovery_file_dest='';System altered.
闪回数据库的步骤 1、关闭数据库 2、启动数据库到mount状态[exclusive模式] 3、闪回至某个时间点,SCN或还原点 4、使用resetlogs打开数据库 闪回数据库的方法 1、sqlplus下基于SCN闪回 FLASHBACK DATABASE [] TO SCN 2、sqlplus下基于时间戳闪回 FLASHBACK DATABASE [] TO TIMESTMP 3、sqlplus下基于还原点闪回 FLASHBACK DATABASE [] TO RESTORE POINT 4、RMAN下基于时间戳闪回 RMAN> FLASHBACK DATABASE TO TIME = "TO_DATE('2013-10-10 19:25:21','YYYY-MM-DD HH24:MI:SS')"; 5、RMAN下基于SCN闪回 RMAN> FLASHBACK DATABASE TO SCN=1121679; 6、RMAN下基于:归档序号 RMAN> FLASHBACK DATABASE TO SEQUENCE=56 THREAD=1; 运用闪回功能示例: 示例1:删除表的部分数据后,使用闪回数据库的方法恢复SQL> create table test_flashback as select * from emp; --创建表Table created.SQL> select dbms_flashback.get_system_change_number from dual; --记录删除数据前scn
1069396SQL> delete from test_flashback where deptno=20; --删除数据5 rows deleted.SQL> commit;Commit complete.SQL> startup mount exclusive --启动到mount exclusive状态ORACLE instance started.Total System Global Area 839282688 bytesFixed Size 2217992 bytesVariable Size 557844472 bytesDatabase Buffers 276824064 bytesRedo Buffers 2396160 bytesDatabase mounted.SQL> flashback database to scn 1069396; --闪回到删除数据之前,还可以用时间戳闪回如:Flashback complete. --flashback database to to_timestamp('2013-10-8 18:02:34','YYYY-MM-DD HH24:MI:SS')SQL> alter database open read only; ?--以read only 方式打开检查数据库是否闪回成功,如不成功考虑其他形式的闪回Database altered.SQL> select * from scott.test_flashback where deptno=20;EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO---------- ---------- --------- ---------- --------- ---------- ---------- ----------7369 SMITH CLERK 7902 17-DEC-80 800 207566 JONES MANAGER 7839 02-APR-81 2975 207788 SCOTT ANALYST 7566 19-APR-87 3000 207876 ADAMS CLERK 7788 23-MAY-87 1100 207902 FORD ANALYST 7566 03-DEC-81 3000 20SQL> startupORACLE instance started.Total System Global Area 839282688 bytesFixed Size 2217992 bytesVariable Size 557844472 bytesDatabase Buffers 276824064 bytesRedo Buffers 2396160 bytesDatabase mounted.ORA-01589: must use RESETLOGS or NORESETLOGS option for database openSQL> alter database open resetlogs;Database altered. --闪回数据库之后,最后做一次全备
最新内容请见作者的GitHub页:http://qaseven.github.io/
