flashback database是10g推出的一个重大改进,它可以让我们不用做不完全恢复的情况下把数据库"回滚"到过去的某一个时间点。
你可以在创建数据库时设定flashback database,如果当时没有设置,可以按下面的步骤进行设置:
1、设置flashback
--首先要把数据库置于归档模式
sys@ORA10G> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
sys@ORA10G> startup mount
ORACLE 例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 1250452 bytes
Variable Size 180357996 bytes
Database Buffers 427819008 bytes
Redo Buffers 2940928 bytes
数据库装载完毕。
sys@ORA10G> alter database archivelog;
数据库已更改。
--设置flashback的几个相关参数
--设置闪回区大小
sys@ORA10G> alter system set db_recovery_file_dest_size=2g;
系统已更改。
--设定闪回区文件放置位置
sys@ORA10G> alter system set db_recovery_file_dest='g:flash';
系统已更改。
--打开数据库的闪回功能
sys@ORA10G> alter database flashback on;
数据库已更改。
sys@ORA10G> alter database open;
数据库已更改。
--最后验证
sys@ORA10G> select FLASHBACK_ON from v$database;
FLASHBACK_ON
------------------
YES
2、测试flashback
--首先做一些破坏性工作
sys@ORA10G> truncate table suk.test;
表被截断。
--通过V$FLASHBACK_DATABASE_LOG得到我们可以闪回的最早时间和最小scn
sys@ORA10G> SELECT OLDEST_FLASHBACK_SCN, OLDEST_FLASHBACK_TIME FROM V$FLASHBACK_DATABASE_LOG;
OLDEST_FLASHBACK_SCN OLDEST_FLASHBACK_TI
-------------------- -------------------
8061491 2007-09-06 22:22:55
--重启数据库到mount
sys@ORA10G> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
sys@ORA10G> startup mount
ORACLE 例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 1250452 bytes
Variable Size 180357996 bytes
Database Buffers 427819008 bytes
Redo Buffers 2940928 bytes
数据库装载完毕。
--根据scn闪回数据库
sys@ORA10G> flashback database to scn 8061491;
闪回完成。
--对数据库执行闪回操作后必须用resetlogs方式打开
sys@ORA10G> alter database open resetlogs;
数据库已更改。
--检验数据
sys@ORA10G> select count(1) from suk.test;
COUNT(1)
----------
3
--从结果可以看到闪回成功
3、再次闪回
--open resetlogs后,还能不能闪回到open resetlogs时间点前的状态呢?
--接着刚才的步骤插入一条数据
sys@ORA10G> insert into suk.test values(4,4);
已创建 1 行。
sys@ORA10G> commit;
提交完成。
sys@ORA10G> select count(1) from suk.test;
COUNT(1)
----------
4
--看看是否可以闪回
sys@ORA10G> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
sys@ORA10G> startup mount
ORACLE 例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 1250452 bytes
Variable Size 180357996 bytes
Database Buffers 427819008 bytes
Redo Buffers 2940928 bytes
数据库装载完毕。
sys@ORA10G> flashback database to scn 8061491;
闪回完成。
sys@ORA10G> alter database open resetlogs;
数据库已更改。
sys@ORA10G> select count(1) from suk.test;
COUNT(1)
----------
3
--从上面的测试结果看,在一次open resetlogs后仍然可以闪回到以前的时间点。
--查一下此时可以闪回的最早时间和scn
sys@ORA10G> SELECT OLDEST_FLASHBACK_SCN, OLDEST_FLASHBACK_TIME FROM V$FLASHBACK_DATABASE_LOG;
OLDEST_FLASHBACK_SCN OLDEST_FLASHBACK_TI
-------------------- -------------------
8061491 2007-09-06 22:22:55
到这里可以得到一个结论:可以闪回到什么时间点与open resetlogs无关,实际上,它是由db_flashback_retention_target参数决定的。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/231499/viewspace-63854/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/231499/viewspace-63854/