使用Flashback Version Query 返回在指定时间间隔或SCN间隔内的所有版本,一次commit命令就会创建一个版本。
SQL> create table t (a number,b number);
Table created.
SQL> insert into t values(1,1);
1 row created.
SQL> commit;
Commit complete.
SQL> insert into t values(2,2);
1 row created.
SQL> commit;
Commit complete.
SQL> select versions_starttime,versions_xid, versions_operation, a from t versions between timestamp minvalue and maxvalue ; ---执行t表上执行过的所有版本查询
VERSIONS_STARTTIME VERSIONS_XID VERSIOS-operation A
19-MAR-14 09.22.33 PM 05000500C2000000 I 2
19-MAR-14 09.22.15 PM 03000800C2000000 I 1
Flashback Transaction Query实际上是查询的数据字典flashback_transaction_query。可以根据flashback_transaction_query 的undo_sql列值返回数据以前版本。
SQL> SELECT /*+ rule */ UNDO_SQL FROM FLASHBACK_TRANSACTION_QUERY WHERE XID = '03000800C2000000'; --根据事务ID获取恢复数据的方法
UNDO_SQL
--------------------------------------------------------------------------------
delete from "SYS"."T" where ROWID = 'AAACmiAABAAAHOSAAA';
SQL> delete from "SYS"."T" where ROWID = 'AAACmiAABAAAHOSAAA';
1 row deleted.
SQL> commit;
Commit complete.
SQL> select * from t;--------数据恢复完成
A B
---------- ----------
2 2
小结:
通过version query和transcation query,可以对数据进行有针对行的事务级别的数据恢复。
jiangkch
20140319
--------------------------------------------
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29249734/viewspace-1783143/
,如需转载,请注明出处,否则将追究法律责任。