oracle檢視flashback_transaction_query中列operation為unknown

賀子_DBA時代發表於2015-02-13
      
        分類:            857人閱讀(0)

很多時候在首次使用 檢視flashback_transaction_query 執行閃回事務查詢是,列operation全是unknown 而且undo_sql 也為空,

SQL> select operation,undo_sql from flashback_transaction_query
  2  where xid=hextoraw('09000E0065060000');

OPERATION            UNDO_SQL
-------------------- ----------------------------------------------------------------------
UNKNOWN
BEGIN

出現這種情況的原因可能有如下兩種

一:因為撤銷表空間有限,因此flashback_transaction_query檢視中只包含一部分事務,對於任何所選事務不再顯示在撤銷表空間的DML,operation列的值是unknown。

二:使用閃回查詢前,必須先啟用重做日誌流的其他日誌記錄。重做日誌流資料時撤銷表空間記錄的資訊的補充,閃回事務查詢時既需要增強的重做資訊,也需要撤銷表空間的撤銷資訊。

首先,使用alter database命令,啟用對DML更改引用的列值和主鍵值的日誌記錄:

SQL> alter database add supplemental log data;

資料庫已更改。

SQL> alter database add supplemental log data (primary key) columns;

資料庫已更改。

注意,只有對alter database命令之後的DML操作在flashback_transaction_query中列operation和undo_sql才會有相應的值

SQL> update student set snum=200605,add_col='boy in ChengDu' where sid=24;

已更新 1 行。

SQL> commit;

提交完成。

SQL> select operation,undo_sql
  2  from flashback_transaction_query
  3  where xid=hextoraw('01001A00CE040000');

OPERATION            UNDO_SQL
-------------------- ----------------------------------------------------------------------
UPDATE               update "SU"."STUDENT" set "SNUM" = '21', "ADD_COL" = 'null' where ROWI
                     D = 'AAASU1AAEAAAAI9AAA';

BEGIN


另外補充一點,使用者在執行閃回事務查詢之前,必須為使用者授予適當的DBMS_FLASHBACK包上的許可權。

grant execute on dbms_flashback to user;

grant select any transaction to user;

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

相關文章