数据库闪回初接触(Flashback Database:A Primer)

原文:http://www.orafaq.com/node/1847

Oracle10g为数据库即时恢复提供了一种新选择:Flashback Database 。利用这一新特性,几乎可以完成即时恢复相关的所有工作。最近,在我删除(drop)表的时候,不小心将一个重要的表删除。使用这个特性,我很快就实现了数据库的恢复。

 

数据库闪回基于重做数据(undo data)来重建数据。它可以使用闪回日志访问数据的过去版本,结合归档日志,可以轻易的将数据库恢复到以前的某个时间点。这种方法更便捷且破坏性小。下面是一个简单的例子。

 

一、开启归档模式

依次执行以下命令:

 

$sqlplus / as sysdba

 

SQL>alter system set log_archive_dest_1='location=/home/oracle/,'mandatory';

 

SQL>shutdown immediate

 

SQL>startup mount

 

SQL>alter database archivelog;

 

SQL>alter database open;

 

二、设置FRA(Flash recovery area)

 

需要设置DB_RECOVERY_FILE_DEST_SIZE和DB_RECOVERY_FILE_DEST两个参数。第一个设置FRA的大小,第二个设置FRA的位置。注意:必须在设置完第一个参数后进行第二个参数的设置。当然,你可以试一下先设置第二个参数,看看会发生什么。

SQL>alter system set db_recovery_file_dest_size=4G;

 

SQL>alter system set db_recovery_file_dest='/u01/app/oracle/flash_recovery_area/;

 

注意:如果在创建数据库的过程中已经对FRA进行了设置,这里也可以不再进行设置。当然,也可以根据自己的喜好进行重新配置。闪回区域的大小受很多因素影响,像数据文件、日志文件、控制文件大小,备份保留策略,数据变化频率等。

 

三、开启闪回

SQL>shutdown immediate

 

SQL>startup mount

 

SQL>alter database flashback on;

SQL>alter database open;

 

现在,我们可以查询表v$flashback_database_log看看发生了什么。

SQL>select * from v$flashback_database_log;

 

LDEST_FLASHBACK_SCN OLDEST_FL RETENTION_TARGET FLASHBACK_SIZE ESTIMATED_FLASHBACK_SIZE
-------------------- --------- ---------------- -------------- ------------------------
              539853 09-MAY-07             4320        8192000                        0

 

可以看到,我们可以闪回到的最早SCN为539853。换句话说,这是我们的基线。可以很方便的将SCN转换为TIMESTAMP。

SQL>select scn_to_timestamp(539853) from dual;

 

四、闪回

下面开始闪回操作,我将先创建一张表,然后截断(truncate)它。但是,在截断前,需要找出SCN或timestamp作为闪回的目标点。

SQL>create table s as select * from tab;

 

SQL>select current_scn,scn_to_timestamp(current_scn) from v$database;

 

CURRENT_SCN SCN_TO_TIMESTAMP(CURRENT_SCN)
----------- ---------------------------------------------------------------------------
     591023 10-MAY-07 11.53.52.000000000 AM

 

SQL>truncate tabel s;

 

SQL>shutdown immediate

 

SQL>startup mount

 

SQL>flashback database to scn 591023;

 

SQL>alter database open resetlogs;

 

SQL>select * from s where rownum=1;

 

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
ICOL$                          TABLE            4

如果闪回结果不是你想要的,可以使用命令RECOVER DATABASE将数据库恢复到闪回之前的状态。

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24867611/viewspace-735352/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/24867611/viewspace-735352/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值