ORACLE闪回技术

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ORACLE闪回技术相关的知识,希望对你有一定的参考价值。

关于数据提交后的闪回,首先update scott.emp set sal='10000',
提交数据COMMIT,查询VERSIONS_XID:select versions_xid from scott.emp versions between scn minvalue and maxvalue,得出VERSIONS_XID的值,然后以该值为条件查询select * from flashback_transaction_query where xid=hextoraw('VERSIONS_XID的值'),可以得出START_SCN,然后用该值实现闪回。
现在问题是,START_SCN的值是0,不能闪回,请教大虾们,为什么他是0呢,而且经常遇到,问题出现在哪?
权限够的,我可以使用时间来闪回,将DML操作的时间恢复到提交之前,而且我也使用SYSTEM用户来闪回的,现在的问题就是START_SCN为0,不能使用SCN来闪回。

你的权限不够啊,闪回需要授予用户sys.dbms_flashback包的执行权限
例子:
conn system/manager as sysdba;
grant execute on sys.dbms_flashback to mmm;
pdate a record;
execute dbms_flashback.enable_at_time(sysdate-5/1440);
execute dbms_flashback.disable();//结束闪回模式,又回到当前状态
参考技术A 要执行闪回版本的查询,可以使用select 命令的versions between子句。可以指定SCN或timestamp。

select sal, Versions_StartSCN, Versions_Operation from scott.emp versions between scn 1000 and 1001;
Versions_StartSCN 数据第一次使值反射时的SCN。如果为NULL,则行在查询的下限之前创建。

select sal, Versions_StartSCN, Versions_Operation from scott.emp versions between timestamp to_timestamp('12-DEC-09 23.00.00', 'DD-MON-YY HH24.MI.SS') and to_timestamp('12-DEC-09 23.06.00', 'DD-MON-YY HH24.MI.SS');
参考技术B 你的数据库版本是9i么,如果是10g及以上不用这么麻烦,select as 时间戳就可以了 参考技术C 试试是不是可以通过时间点来闪回

以上是关于ORACLE闪回技术的主要内容,如果未能解决你的问题,请参考以下文章

Oracle闪回技术详解

Oracle闪回技术--更新ing

Oracle-闪回技术

Oracle 闪回 找回数据的实现方法

Oracle闪回详解

ORACLE 闪回