ORACLE闪回技术

来源:百度知道 编辑:UC知道 时间:2024/05/28 07:50:49
关于数据提交后的闪回,首先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();//结束闪回模式,又回到当前状态

要执行闪回版本的查询,可以使用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');

你的数据库版本是9i么,如果是10g及以上不用这么麻烦,select as 时间戳就可以了

试试是不是可以通过时间点来闪回