oracle 10g flashback database

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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值