一、應用Flashback Version Query查詢記修改版本sql
SQL> select dbms_flashback.get_system_change_number from dual; --查詢當前SCN值 GET_SYSTEM_CHANGE_NUMBER ------------------------ 1574142 SQL> update flash_tab set id=id+100 where id>15; 已更新5行。 SQL> commit; 提交完成。 SQL> delete flash_tab where id<15; 已刪除14行。 SQL> rollback; 回退已完成。 SQL> select * from flash_tab; ID VL ---------- -- 10 I 11 J 12 K 13 L 14 M 15 N 116 O 117 P 118 Q 119 R 120 S 1 / 2 A 3 B 4 C 5 D 6 E 7 F 8 G 9 H 已選擇20行。 SQL> delete flash_tab where id<5; 已刪除4行。 SQL> commit; 提交完成。 SQL> select * from flash_tab; ID VL ---------- -- 10 I 11 J 12 K 13 L 14 M 15 N 116 O 117 P 118 Q 119 R 120 S 5 D 6 E 7 F 8 G 9 H 已選擇16行。 SQL> insert into flash_tab values(201,'A1'); 已建立 1 行。 SQL> commit; 提交完成。 SQL> insert into flash_tab values(202,'B1'); 已建立 1 行。 SQL> COMMIT; 提交完成。 SQL> SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER FROM DUAL; GET_SYSTEM_CHANGE_NUMBER ------------------------ 1574208
執行Version Query查詢flash_tab表中記錄:數據庫
SQL> select id,vl,versions_startscn,versions_endscn,versions_operation,versions_xid from flash_tab versions between scn 1574142 and 1574208; ID VL VERSIONS_STARTSCN VERSIONS_ENDSCN V VERSIONS_XID ---------- -- ----------------- --------------- - ---------------- 202 B1 1574198 I 0900170004040000 201 A1 1574192 I 0300120034040000 4 C 1574180 D 050015001B040000 3 B 1574180 D 050015001B040000 2 A 1574180 D 050015001B040000 1 / 1574180 D 050015001B040000 120 S 1574157 U 0600180005040000 119 R 1574157 U 0600180005040000 118 Q 1574157 U 0600180005040000 117 P 1574157 U 0600180005040000 116 O 1574157 U 0600180005040000 10 I 11 J 12 K 13 L 14 M 15 N 16 O 1574157 17 P 1574157 18 Q 1574157 19 R 1574157 20 S 1574157 1 / 1574180 2 A 1574180 3 B 1574180 4 C 1574180 5 D 6 E 7 F 8 G 9 H 已選擇31行。
2.使用Flashback Transaction Query查詢事務信息測試
用戶在執行閃回事務查詢以前,必須爲用戶授予適當的DBMS_FLASHBACK包上的權限。 grant execute on dbms_flashback to scott; grant select any transaction to scott; -------- 開啓flashback: SQL> shutdown immediate; SQL> startup mount; SQL> alter database flashback on; SQL> alter database open; SQL> conn / as sysdba; 已鏈接。 SQL> alter database add supplemental log data; 數據庫已更改。 ------------------------------------------------------- 啓用重作日誌流,不然查詢Flashback_transaction_query的undo_sql列爲空,而且OPERATION列爲UNKNOWN, SQL> alter database add supplemental log data; Database altered.
測試案例:spa
SQL> conn scott/tiger; 已鏈接。 ------------------- SQL> select current_scn from v$database; CURRENT_SCN ----------- 1586922 SQL> select * from flash_tab; ID VL ---------- -- 1 a 2 ts SQL> update flash_tab set vl='b' where id=1; 已更新 1 行。 SQL> commit; 提交完成。 SQL> insert into flash_tab values(3,'c'); 已建立 1 行。 SQL> commit; 提交完成。 SQL> select current_scn from v$database; CURRENT_SCN ----------- 1586956 ====================== SQL> select xid,commit_scn,commit_timestamp,operation,undo_sql 2 from flashback_transaction_query q where q.xid in( select versions_xid from scott.flash_tab versions between scn 1586922 and 1586956); XID COMMIT_SCN COMMIT_TIMESTAMP OPERATION UNDO_SQL ---------------- ---------- ---------------- -------------------------------- -------------------------------------------------------------------------------- 02001200FE030000 1586949 2015/1/10 17:03: INSERT delete from "SCOTT"."FLASH_TAB" where ROWID = 'AAASZaAAEAAAAJ2AAB'; 02001200FE030000 1586949 2015/1/10 17:03: BEGIN 06001C000A040000 1586940 2015/1/10 17:03: UPDATE update "SCOTT"."FLASH_TAB" set "VL" = 'a' where ROWID = 'AAASZaAAEAAAAJ0AAC'; 06001C000A040000 1586940 2015/1/10 17:03: BEGIN