Oracle日志分析

參考文獻(xiàn)

  1. UTL_FILE_DIR
  2. Oracle日志分析!
  3. 詳解Oracle的日志的工具——LogMiner

一、 背景介紹

Oracle的跟蹤文件只記錄系統(tǒng)相關(guān)的內(nèi)容,對于數(shù)據(jù)庫上執(zhí)行的具體的刪除、插入、修改等操作,跟蹤文件并無相關(guān)記錄(若這也記錄的話,跟蹤文件就爆炸了),但是,如果真的需要查看特定時刻特定用戶在數(shù)據(jù)庫上執(zhí)行的操作,也不是沒辦法,可以通過用logminer分析日志文件獲取相關(guān)信息。
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. 設(shè)置utl_file_dir參數(shù)

utl_file_dir參數(shù)用于Oracle進(jìn)行IO操作時指定目錄,此參數(shù)為空值、指定目錄不存在以及IO操作目錄與此參數(shù)不一致都會引起IO操作報錯。可用以下語句查看utl_file_dir的值:

show parameter utl_file_dir

用以下命令設(shè)定utl_file_dir的值:

alter system set utl_file_dir='/tmp' scope=spfile;

此參數(shù)為靜態(tài)參數(shù),需要通過修改spfile重啟數(shù)據(jù)庫生效。

3. 創(chuàng)建數(shù)據(jù)字典文件

因為Oracle日志文件中記錄的并非原始對象名稱,而是其內(nèi)部編碼,為了使logminer分析出的sql信息便于查看,我們需要利用數(shù)據(jù)字典文件將其轉(zhuǎn)換成易讀的表名和列名。

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ù)據(jù)字典文件。

6. 查看分析結(jié)果

通過分析視圖v$logmnr_contents獲取具體的sql語句信息。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容