1、必须设定undo保留时间足够大以能够重构需要闪回的数据
ALTER SYSTEM SET UNDO_RETENTION=<SECONDS>;
seconds值是undo数据保持的秒数。
Flashback view是由undo retention interval来限制的。
关于UNDO_RETENTION
资料可以参考:
http://blog.csdn.net/seagal890/archive/2008/10/09/3044226.aspx
2、包DBMS_FLASHBACK提供了需求接口
call
dbms_flashback.enable_at_time(‘2010-10-19:11:00:00’);
call
dbms_flashback.disable();
-------------------------------------
enable_at_time:会话级的enable
flashback,映像时间被设定为最接近指定时间戳的scn
enable_at_system_change_number:将数据库闪回到指定的scn号。
get_system_change_number:返回当前的scn。
disable:这个存储过程允许我们在整个会话内停止flashback并将你带回当前时间的数据状态。
----------
dbms_flashback.enable存储过程不可以在有活动事务的时候执行,并且,这个包不能用sys身份执行。
在使用DBMS_FLASHBACK.ENABLE_AT_TIME前,你必须设定你的NLS_DATE_FORMAT的精确程度,Oracle默认的是精确到天
3、timestamp 与scn(系统改变号)
的对应关系
事实上,Oracle在内部都是使用scn,即使你指定的是as of
timestamp,oracle也会将其转换成scn,系统时间标记与scn之间存在一张表,即SYS下的SMON_SCN_TIME表。
每隔5分钟,系统产生一次系统时间标记与scn的匹配并存入sys.smon_scn_time表,该表中记录了最近1440个系统时间标记与scn的匹配记录,由于该表只维护了最近的1440条记录,因此如果使用as
of
timestamp的方式则只能flashback最近5天内的数据(假设系统是在持续不断运行并无中断或关机重启之类操作的话)。SYS.SMON_SCN_TIME最多拥有1440条记录。这个最大记录数是这样计算出来的,ORACLE平均每5分钟同步一次该表数据,最大保存最近5天的记录,因此就相当于12(每小时更新次数)*24*5=1440。
可以用sql验证一下:
select scn,to_char(time_dp,'yyyy-mm-dd hh24:mi:ss') from sys.smon_scn_time;
10g中提供了两个函数scn_to_timestamp()
和timestamp_to_scn()
用来执行时间戳和SCN的转换。
下面使用闪回进行演示一下:
1、登陆到数据库。
C:\>sqlplus tivan/tivan
SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 10月 19 22:24:03 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
2、查看表的记录。
SQL> select count(*) from t1
2 ;
COUNT(*)
----------
8302
3、删除所有的记录提交。
SQL> delete from t1
2 ;
已删除8302行。
SQL> commit;
提交完成。
4、获得当前SCN
如果能够确切知道删除之前SCN最好,如果不知道,可以进行闪回查询尝试。
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
1482649
SQL> select count(*) from t1 as of scn 1482600;
COUNT(*)
----------
8302
SCN=1482600时,t1表中的所有记录都还在。
5、利用闪回恢复数据。
查看验证一下:
SQL> insert into t1 select * from t1 as of scn 1482600;
已创建8302行。
SQL> commit;
提交完成。
结果OK
或者还可以如下操作
SQL>flashback table t1 to scn 1482600;
SQL> commit;
Commit complete.
--对于drop table t1 的操作flashback
SQL> drop table t1;
SQL>COMMIT;
SQL> flashback table t1to before drop;
SQL>commit;
对于怎么取的SCN可以使用timestamp_to_scn()
函数,如:
select timestamp_to_scn(to_timestamp('2010-10-19 21:00:00','YYYY-MM-DD HH:MI:SS')) from dual;
-EOF-
分享到:
相关推荐
NULL 博文链接:https://bestxiaok.iteye.com/blog/1129883
ORACLE flashback database测试,主要进行ORACLE flashbackup 闪回整个数据库的实现。
必须设定undo保留时间足够大以能够重构需要闪回的数据 ALTER SYSTEM SET UNDO_RETENTION=; seconds值是undo数据保持的秒数。 Flashback view是由undo retention interval来限制的。
Oracle中FlashBack技术的应用 1: 闪回数据库; 2: 闪回drop掉的表; 3: 闪回对表数据的修改; 4: 闪回版本查询
oracle flashback特性(闪回语句,闪回表,闪回数据库).doc
Oracle RAC环境下开启FLASHBACK闪回功能.pdf
oracle 表恢复 闪回 flashback
oracle数据库FLASHBACK系列功能介绍
利用oracle10g的新特性flashback闪回功能快速恢复oracle中被删除的表
Flashback 技术是以Undo segment中的内容为基础的, 因此受限于UNDO_RETENTON参数。要使用flashback 的特性,必须启用自动撤销管理表空间。
主要详细讲解了oracle10g以来对于闪回机制的类型及相关的使用方法和场景的介绍,很有用,尤其对于无意中对表数据删除了的恢复较有价值
先以闪回查询( Flashback Query)出现在 Oracle 9i 版本中,后来 Oracle 在 10g 中对该技术 进行了全面扩展,提供了闪回数据库、闪回删除、闪回表、闪回事物及闪回版本查询等功能,本 文将重点说闪回删除、闪回表的...
FLASHBACK DATABASE flashback data1base闪回到过去的某一时刻 闪回点之后的所有工作都将丢失 必须使用resetlogs创建新的场景并打开数据库(一旦resetlogs之后,将不能再闪回至resetlogs之前的时间点) .......
Oracle闪回(Flashback)技术.pptx
Oracle 的闪回技术(flashback)其数据恢复的一种重要机制。
第16章Oracle闪回(Flashback)技术.pptx