Oracle日志挖掘案例,你學到了什么?
一、最常用的日志挖掘方式
日志挖掘可以在源庫進行,也可以在其他目標庫進行,但需要注意必須是同構(gòu)操作系統(tǒng)、數(shù)據(jù)庫版本要大于等于源庫,字符集也需相同。
最常用的還是在源庫加載歸檔日志進行挖掘。
二.操作案例
2.1 程序異常造成誤刪除記錄
某系統(tǒng)應用程序BUG,造成數(shù)據(jù)庫丟失了幾千條數(shù)據(jù),但程序上沒有找到對應的刪除SQL,需通過日志挖掘定位數(shù)據(jù)刪除的具體操作、時間點等信息。
打開補充日志:
圖片
2.2 確認出現(xiàn)問題的時間點
根據(jù)業(yè)務排查,第一次出現(xiàn)問題的時間點應該在6月5日上午08:30分左右,最后問題時間在6月5日下午17:00左右。
2.3 從數(shù)據(jù)庫視圖中查看問題時間段歸檔的序號
圖片
2.4 恢復已刪除的歸檔
當前系統(tǒng)備份由NBU接管,歸檔備份存儲在NBU的存儲上,沒有在數(shù)據(jù)庫本地,所以恢復時分配通道時要指定NBU相關(guān)的環(huán)境變量并創(chuàng)建一個本地目錄用于存放恢復的歸檔。
圖片
2.5 加載歸檔文件
第一個加載的歸檔文件需要使用DBMS_LOGMNR.NEW,后面的不需要。
圖片
2.6 執(zhí)行分析
exec DBMS_LOGMNR.START_LOGMNR(OPTIONS=>DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);
2.7 保存分析的數(shù)據(jù)
由于涉及了多張表的操作,并且數(shù)據(jù)較多,在存儲空間允許的情況下,最好是創(chuàng)建一張臨時表存放挖掘出的數(shù)據(jù),由于數(shù)據(jù)量較大,可以對表名和操作類型創(chuàng)建聯(lián)合索引,避免查詢太慢。
圖片
2.8 結(jié)束挖掘
execute dbms_logmnr.end_logmnr;
2.9 按表名和類型檢查操作
圖片
可以看到,從6月5日8:29開始,總共被刪除了4000多條記錄。
username,machine等字段為UNKONWN,是由于問題時間段沒有開啟補充日志,如果啟用了還是顯示UNKNOWN,那么可能是缺少登錄信息,即在挖掘的時間段之前會話已登錄了。
注意,這里查詢出的SQL并不是和實際執(zhí)行的SQL完全一致的,是經(jīng)過數(shù)據(jù)庫轉(zhuǎn)換過的SQL。