Oracle日志挖掘案例,你學(xué)到了什么?
一、最常用的日志挖掘方式
日志挖掘可以在源庫進(jìn)行,也可以在其他目標(biāo)庫進(jìn)行,但需要注意必須是同構(gòu)操作系統(tǒng)、數(shù)據(jù)庫版本要大于等于源庫,字符集也需相同。
最常用的還是在源庫加載歸檔日志進(jìn)行挖掘。
二.操作案例
2.1 程序異常造成誤刪除記錄
某系統(tǒng)應(yīng)用程序BUG,造成數(shù)據(jù)庫丟失了幾千條數(shù)據(jù),但程序上沒有找到對應(yīng)的刪除SQL,需通過日志挖掘定位數(shù)據(jù)刪除的具體操作、時(shí)間點(diǎn)等信息。
打開補(bǔ)充日志:
圖片
2.2 確認(rèn)出現(xiàn)問題的時(shí)間點(diǎn)
根據(jù)業(yè)務(wù)排查,第一次出現(xiàn)問題的時(shí)間點(diǎn)應(yīng)該在6月5日上午08:30分左右,最后問題時(shí)間在6月5日下午17:00左右。
2.3 從數(shù)據(jù)庫視圖中查看問題時(shí)間段歸檔的序號
圖片
2.4 恢復(fù)已刪除的歸檔
當(dāng)前系統(tǒng)備份由NBU接管,歸檔備份存儲在NBU的存儲上,沒有在數(shù)據(jù)庫本地,所以恢復(fù)時(shí)分配通道時(shí)要指定NBU相關(guān)的環(huán)境變量并創(chuàng)建一個(gè)本地目錄用于存放恢復(fù)的歸檔。
圖片
2.5 加載歸檔文件
第一個(gè)加載的歸檔文件需要使用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í)表存放挖掘出的數(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,是由于問題時(shí)間段沒有開啟補(bǔ)充日志,如果啟用了還是顯示UNKNOWN,那么可能是缺少登錄信息,即在挖掘的時(shí)間段之前會(huì)話已登錄了。
注意,這里查詢出的SQL并不是和實(shí)際執(zhí)行的SQL完全一致的,是經(jīng)過數(shù)據(jù)庫轉(zhuǎn)換過的SQL。