ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle 10g flashback database

oracle 10g flashback database

原创 Linux操作系统 作者:space6212 时间:2019-07-08 15:12:07 0 删除 编辑

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/,如需转载,请注明出处,否则将追究法律责任。

上一篇: oracle的只读事务
请登录后发表评论 登录
全部评论

注册时间:2005-01-25

  • 博文量
    244
  • 访问量
    158553