oracle 10g flashback database

上一篇 / 下一篇  2007-09-06 00:00:00 / 个人分类:Oracle技术

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参数决定的。



TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-08-22  
     12
3456789
10111213141516
17181920212223
24252627282930
31      

数据统计

  • 访问量: 9739
  • 日志数: 410
  • 建立时间: 2007-12-30
  • 更新时间: 2008-08-21

RSS订阅

Open Toolbar