oracle flashback特性(1.4)--閃回查詢之Transaction query

jackjw發表於2008-08-23

[@more@]

Flashback的事務查詢是透過查詢flashback_transaction_query檢視來實現的。透過查詢該檢視能夠獲得一些事務執行時的資訊,甚至包括UNDO語句。


4、Transaction query事務查詢

Flashback的事務查詢是透過查詢flashback_transaction_query檢視來實現的。透過查詢該檢視能夠獲得一些事務執行時的資訊,甚至包括UNDO語句。

下面做個演示,首先刪除一條資料:

JSSWEB> select *from jss_tb1;

ID VL

---------- --------------------

5 E

6 F

7 G

8 H

9 I

11 K

12 L

13 M

14 N

15 O

116 P

117 Q

118 R

119 S

120 T

10 J

已選擇16行。

JSSWEB> select dbms_flashback.get_system_change_number from dual;

GET_SYSTEM_CHANGE_NUMBER

------------------------

413946

JSSWEB> delete jss_tb1 where id<3;

已刪除0行。

JSSWEB> rollback;

回退已完成。

JSSWEB> delete jss_tb1 where id=5;

已刪除 1 行。

JSSWEB> commit;

提交完成。

JSSWEB> select dbms_flashback.get_system_change_number from dual;

GET_SYSTEM_CHANGE_NUMBER

------------------------

413959

Flashback_transaction_query馬上閃亮登場,大家鼓掌:

JSSWEB> select xid,commit_scn,commit_timestamp,operation,undo_sql

2 from flashback_transaction_query q where q.xid in(

3 select versions_xid from jss_tb1 versions between scn 413946 and 413959);

XID COMMIT_SCN COMMIT_TIMESTAMP OPERATION UNDO_SQL

---------------- ---------- ------------------- ------------ ------------------------------------------------------------

05002F0082000000 413958 2008-06-04 21:32:02 DELETE insert into "JSS"."JSS_TB1"("ID","VL") values ('5','E');

05002F0082000000 413958 2008-06-04 21:32:02 BEGIN

注:由於事務ID是儲存在版本查詢中,因此我們需要透過版本查詢來關聯出flashback的事務資訊,這也是前面操作前要透過dbms_flashback包取scn的原因。

上述的查詢結果已經清晰的向我們展示了我們所做的操作以及操作的時間等(實際執行的語句該檢視並沒有記錄,只能透過undo_sql和operation推測),隨著我們將事務範圍的不斷擴大,我們可以持續向前翻閱曾經做過的操作。當然,實際使用的時候需要注意,由於該檢視儲存記錄量較大(究竟有多大呢,目前尚未找到相關文件有明確說明,初步預計,應該與smon_scn_time的儲存規則有關係),查詢的時候建議透過關鍵列過濾,比如logon_user啦,table_name或table_owner之類的,這麼比起來這項操作倒確實與logminer非常想像,這簡直就是個活的logminer啊,雖然只是一段時間內的。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3907/viewspace-1009370/,如需轉載,請註明出處,否則將追究法律責任。

相關文章