当你对数据库的数据进行update后,并commit。 但是你马上又后悔了你所做的更改,或者你在做update的时候忘记了加where条件 致使大量的数据被更改。
如果你的数据库是oracle9i那么就可以利用 9i的新特性闪回查询
首先查看系统参数看是否支持闪回查询
SQL> show parameter undo
NAME TYPE VALUE
------------------------------------ ----------- ---------
undo_management string AUTO
undo_retention integer 10800
undo_suppress_errors boolean FALSE
undo_tablespace string UNDOTBS1
参数 undo_management 为 auto 表示可以
undo_retention 表示可以闪回的时间,默认为3 个小时。
9i支持闪回查询的包:dbms_flashback
需要在非dba用户下,例如:system 进行操作
SQL> execute dbms_flashback.enable_at_time(sysdate-1/24/3);
1/24/3:系统当前时间 的前8个小时的数据。
执行完成之后,在当前的session下进行查询就可以查到历史数据。
如果要回到原来的实时数据
SQL> execute dbms_flashback.disable
局限性
1、闪回查询是基于SCN的,虽然我执行的是:
DBMS_FLASHBACK.ENABLE_AT_TIME(to_date('2003-05-16 15:37:23'));
但Oracle并不会精确的这个时间点,而是ROUND DOWN到最近的一次SCN,然后从这个SCN开始进行恢复。而Oracle 9i是每五分钟记录一次SCN的,并将SCN和对应时间的映射做个纪录。
这正是上面我们进行恢复时少了一条的原因。因此如果使用DBMS_FLASHBACK.ENABLE_AT_TIME来进行恢复,为了避免恢复失败,我可以先等5分钟,然后再进行恢复。
使用DBMS_FLASHBACK.ENABLE_AT_TIME进行恢复还有一个缺点,那就是在Oracle 9i中SCN和对应时间的映射信息只会保留5天,因此我们无法通过DBMS_FLASHBACK.ENABLE_AT_TIME来恢复5天前的数据。如果你想使用闪回查询来恢复5天前的数据,你必须自己来确定需要恢复的SCN,然后使用
DBMS_FLASHBACK.ENABLE_AT_SYSTEM_CHANGE_NUMBER(SCN_NUMBER); 来定位你的恢复时间点,下面是使用方法:
15:58:58 SQL> VARIABLE SCN_SAVE NUMBER;
16:13:43 SQL> EXECUTE :SCN_SAVE := DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER;
PL/SQL procedure successfully completed.
16:13:50 SQL> print SCN_SAVE;
SCN_SAVE
----------
2.1202E+11
16:28:34 SQL> execute DBMS_FLASHBACK.ENABLE_AT_SYSTEM_CHANGE_NUMBER(:SCN_SAVE);
PL/SQL procedure successfully completed.
另外,在使用DBMS_FLASHBACK.ENABLE_AT_TIME前,你必须设定你的NLS_DATE_FORMAT的精确程度,Oracle默认的是精确到天,如果你不设定,像上面的例子你不会得到预期结果。
2、如果你使用sysdate和DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER来获取时间点或者SCN值,你必须注意它们取得都是当前的时间点和SCN值。
3、你只能在事务开始时进入闪回查询模式,如果之前有DML操作,则必须COMMIT。
4、闪回查询无法恢复到表结构改变之前,因为闪回查询使用的当前的数据字典。
分享到:
相关推荐
oracle 闪回oracle 闪回oracle 闪回oracle 闪回oracle 闪回oracle 闪回oracle 闪回oracle 闪回oracle 闪回oracle 闪回oracle 闪回oracle 闪回oracle 闪回oracle 闪回
oracle数据库执行闪回恢复数据 很不错的
内容包含: 1,oracle表锁查看 2,oracle数据解锁 3, 查看用户表空间使用情况 4,数据闪回,误删数据恢复语句
Oracle 9i以上的闪回,用于误操作后的数据恢复。
oracle 闪回技术 数据恢复
利用oracle闪回技术恢复数据,在因误操作导致删除数据时,可以进行数据恢复。
oracle数据闪回案例,贴出来,仅供大家参考
为了使 Oracle 数据库从任何逻辑误操作中迅速地恢复,Oracle 推出了闪回技术。 该技术首 先以闪回查询( Flashback Query)出现在 Oracle 9i 版本中,后来 Oracle 在 10g 中对该技术 进行了全面扩展,提供了闪回...
Oracle闪回技术,解决delete后恢复数据
完整的描述了ORACLE闪回的整个过程,参数和配置开关以及部分注意事项.包含ORACLE中:闪回表、闪回删除、闪回数据库等操作。
很好,实用的闪回技术实践,对深入学习oracle,玩转oracle,有很大帮助作用,《Oracle10G-闪回技术》实验手册,主要讲述10G之后相关主要闪回技术玩法,很经典,主要为实践居多
在数据库10g之前,John可能会做一个"时间点"恢复,来将数据库恢复至所希望的某一时刻的状态。不幸的是,银行的定期日常备份大约就是在那个时间开始,这就意味着他将不得不用接近24小时的有价值的归案日志来恢复...
oracle数据仓库国宝级资料(全套) 1、Oracle+10g数据仓库实践--数据仓库基础.pdf 2、Oracle+10g数据仓库实践--总体方案.pdf 3、Oracle+10g数据仓库实践--方案的总体优势.pdf 4、Oracle+10g据仓库实践--数据仓库工具的...
讲解oracle闪回数据库,采用闪回技术备份还原数据库
oracle 存储过程批量提交
获取某一点的前的ORACLE数据,可以恢复误删数据
ORACLE数据库表的信息不小心误删,可以通过回闪找数据信息!
详细描述Oracle闪回技术原理,并详细列举语法及实际使用方法。
Oracle数据库10g备份和恢复:RMAN和闪回技术
Oracle 数据迁移是比较麻烦的,对菜鸟来说更是如此。最近由于更换服务器,需要将Oracle迁移到另外一台机器,在两个服务器环境相同,以及 Oracle版本相同的前提下,通过直接拷贝数据文件到新服务器,就可以直接迁移...