參考文獻
一、 背景介紹
Oracle的跟蹤文件只記錄系統(tǒng)相關的內容团甲,對于數(shù)據庫上執(zhí)行的具體的刪除逾冬、插入黍聂、修改等操作,跟蹤文件并無相關記錄(若這也記錄的話身腻,跟蹤文件就爆炸了)产还,但是,如果真的需要查看特定時刻特定用戶在數(shù)據庫上執(zhí)行的操作嘀趟,也不是沒辦法脐区,可以通過用logminer分析日志文件獲取相關信息。
logminer分析歸檔日志文件所獲得的信息并不是原始的操作信息她按,而是等價的原子操作信息牛隅,譬如用一條delete語句刪除兩百萬條信息,原始操作只需一條命令酌泰,但是分析歸檔文件會獲得兩百萬條delete命令信息媒佣。
二、 分析步驟
1. 獲取所要分析時間段歸檔日志文件信息
SELECT 'dbms_logmnr.add_logfile(LogFileName=>'''
|| name
|| ''', Options=>dbms_logmnr.addfile);'
FROM v$archived_log
WHERE first_time > To_date('2019-02-27 20:00', 'yyyy-mm-dd hh24:mi')
AND first_time < To_date('2019-02-27 21:00', 'yyyy-mm-dd hh24:mi')
AND dest_id = 1
ORDER BY first_time
輸出信息格式如下:
dbms_logmnr.add_logfile(LogFileName=>'+DATADG/dggtge/archivelog/2019_02_27/thread_2_seq_229652.7316.1001361899', Options=>dbms_logmnr.addfile);
保存好輸出信息陵刹,并將輸出信息第一條中的dbms_logmnr.addfile改成dbms_logmnr.new默伍,即:
dbms_logmnr.add_logfile(LogFileName=>'+DATADG/dggtge/archivelog/2019_02_27/thread_2_seq_229652.7316.1001361899', Options=>dbms_logmnr.new);
2. 設置utl_file_dir參數(shù)
utl_file_dir參數(shù)用于Oracle進行IO操作時指定目錄,此參數(shù)為空值衰琐、指定目錄不存在以及IO操作目錄與此參數(shù)不一致都會引起IO操作報錯也糊。可用以下語句查看utl_file_dir的值:
show parameter utl_file_dir
用以下命令設定utl_file_dir的值:
alter system set utl_file_dir='/tmp' scope=spfile;
此參數(shù)為靜態(tài)參數(shù)羡宙,需要通過修改spfile重啟數(shù)據庫生效狸剃。
3. 創(chuàng)建數(shù)據字典文件
因為Oracle日志文件中記錄的并非原始對象名稱,而是其內部編碼狗热,為了使logminer分析出的sql信息便于查看捕捂,我們需要利用數(shù)據字典文件將其轉換成易讀的表名和列名瑟枫。
begin
dbms_logmnr_d.build(
dictionary_filename=>'logminer_dict.dat',
dictionary_location=>'/tmp');
end;
/
注意dictionary_location值與utl_file_dir一致。
4. 添加需要分析的日志文件
-- 第一個為new指攒,其他為addfile慷妙。
-- logfilename為select name from v$archived_log中的某一塊
begin
dbms_logmnr.add_logfile(LogFileName=>'+DATADG/dggtge/archivelog/2019_02_27/thread_2_seq_229652.7316.1001361899', Options=>dbms_logmnr.new);
dbms_logmnr.add_logfile(LogFileName=>'+DATADG/dggtge/archivelog/2019_02_27/thread_2_seq_229653.7632.1001362211', Options=>dbms_logmnr.addfile);
...
dbms_logmnr.add_logfile(LogFileName=>'+DATADG/dggtge/archivelog/2019_02_27/thread_1_seq_226713.7138.1001365283', Options=>dbms_logmnr.addfile);
end;
/
這里的Options有三個參數(shù):
NEW - 創(chuàng)建一個新的日志文件列表
ADDFILE - 向這個列表中添加日志文件
REMOVEFILE - 移除這個列表中日志文件
5. 開始分析日志文件
用生成的數(shù)字字典文件:
begin
dbms_logmnr.start_logmnr(dictfilename=>'/tmp/logminer_dict.dat');
end;
/
或者:
EXECUTE dbms_logmnr.start_logmnr(options =>dbms_logmnr.DICT_FROM_ONLINE_CATALOG);
如果用第二種方式,則無需第3步中創(chuàng)建數(shù)據字典文件允悦。
6. 查看分析結果
通過分析視圖v$logmnr_contents獲取具體的sql語句信息膝擂。