Oracle技術嘉年華的一個案例,redo的那些事,連載一

sundog315發表於2011-10-31

電梯

Oracle技術嘉年華的一個案例,redo的那些事,連載二

Oracle技術嘉年華的一個案例,redo的那些事,連載三

在剛剛結束的Oracle技術嘉年華大會上,eygle大師的演講中提到了有關於資料安全的一個案例,大致的意思是資料庫管理員修改了自己賬戶的金額。但是,奇怪的是,透過logminer挖掘日誌時,居然挖掘不到修改記錄,顯示如下狀況:
1.jpg



SQL_REDO的內容是Unsupported,但是,透過logfile dump,可以看到此次修改,如下圖:
2.jpg

將金額從0修改為40000
在大會上,主要討論的是資料安全方面的議題,但是,我確感到很奇怪,為什麼此處的redo記錄Oraclelogminer居然無法解析呢?
於是,管eygle大師要來了這部分的歸檔日誌,決定一探究竟。

拿到日誌以後,首先看了一下日誌頭資訊,在第二個512位元組的塊裡,有一些系統的資訊:
3.jpg

可以看到,這個資料庫的compatible引數設定的是9.2.0,應該是一個9i的庫,這個系統應該是big endian的系統,猜測應是AIX。在AIX上先logminer一下,看看到底是什麼情況:
SQL> begin
dbms_logmnr.add_logfile('/1_12446.dbf');
end;
/

PL/SQL procedure successfully completed.

SQL> begin
dbms_logmnr.start_logmnr();
end;
/

PL/SQL procedure successfully completed.

SQL> select t.RBABLK,t.RBABYTE,t.DATA_OBJ#,t.ROW_ID,t.OPERATION,t.SQL_REDO,t.INFO from v$logmnr_contents t where t.RBABLK=166733;

166733 16 66237 AAAQXKAAAAAAAAAAAA UNSUPPORTED Unsupported Object or Data type Unsupported

依然是UnsupportedINFO中顯示Object or Data type Unsupported,並且,ROWID也很奇怪,這個ROWID根本不是一個有效的ROWID

Oraclelog miner工具是不支援一些情況的,例如:

1) Simple and nested abstract datatypes (ADTs)
2) Collections (nested tables and VARRAYs)
3) Object Refs
4) Index organized tables (IOTs)
5) CREATE TABLE AS SELECT of a table with a clustered key

5條明顯不滿足,所以,首先懷疑這個表是否有特殊欄位。

於是,又騷擾了一下eygle大師,不久,便有了迴音,沒有特殊的欄位,都是標準的型別,看來不是這個原因,metalink了一下,有一個文章符合這種情況:

UNSUPPORTED Value In Sql_redo,Operation Columns Of V$Logmnr_contents [ID 282994.1]


Cause


Logminer cannot always populate all the fields of the v$logmnr_contents this is because the redo may/may not have all the information that we need for every column.

Fix


Enable supplemental logging on the database

Oracle認為這種情況不是個BUG,當開啟附加日誌時,將得到足夠的資訊, logminer也就能夠正確的得到SQL結果。[@more@]

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

相關文章