巧用flashback database实现灵活的数据回滚

2015-07-16 12:09:13 · 作者: · 浏览: 1

设置了这个restore point之后,我们可以使用下面的脚本来查看设置的这个恢复点。
col NAME for a20
?col TIME for a35
?set lines 200
?col STORAGE_SIZE for a50
?SELECT NAME, SCN, TIME, DATABASE_INCARNATION# DI,GUARANTEE_FLASHBACK_DATABASE, STORAGE_SIZE/1024/1024/1024
?FROM V$RESTORE_POINT
?WHERE GUARANTEE_FLASHBACK_DATABASE='YES';
NAME? ? ? ? ? ? ? ? ? ? ? ? SCN TIME? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? DI GUA STORAGE_SIZE/1024/1024/1024
?-------------------- ---------- ----------------------------------- ---------- --- ---------------------------
?ORIGINAL_STATE_BASE? ? 4465165 17-APR-15 10.48.01.000000000 AM? ? ? ? ? ? ? 1 YES? ? ? ? ? ? ? ? ? ? ? ? ? 0
?ORIGINAL_STATE? ? ? ? ? 4465180 17-APR-15 10.48.10.000000000 AM? ? ? ? ? ? ? 1 YES? ? ? ? ? ? ? ? ? .68359375


?


设置了之后,如果后面需要闪回恢复就很容易了。
?参考脚本如下,可以很快达到预期的目的。
set echo on feed on
?set time on timing on
?-spoo logs/restore_flashback.log
?select name from v$database;
?SELECT current_scn FROM v$database;
?col NAME for a20
?col TIME for a35
?set lines 100


?SELECT NAME, SCN, TIME, DATABASE_INCARNATION# DI,GUARANTEE_FLASHBACK_DATABASE, STORAGE_SIZE
?FROM V$RESTORE_POINT
?WHERE GUARANTEE_FLASHBACK_DATABASE='YES';


?shutdown immediate;
?startup mount;
?flashback database to restore point ORIGINAL_STATE;
?alter database open read only;
?shutdown immediate;
?startup mount;
?alter database open resetlogs;
?spoo off


当然了这个回退的原理就是flashback database,但是在特定的使用场景中就赋予了更多的实际意义。
?在这个基础上如果根据业务需要,每周的某几天需要做这个回退操作,就可以设置为crontab的方式来自动运行,就不用大半夜,大清早再去做这些回退了。