利用Logminer進(jìn)行Oracle日志分析

環(huán)境

數(shù)據(jù)庫(kù)服務(wù)器操作系統(tǒng):Windows Server2008 R2 Standard

數(shù)據(jù)庫(kù)版本:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

ORACLE_HOME: d:\app\Administrator\product\11.2.0\dbhome_1\

起因

新上線一個(gè)產(chǎn)品,數(shù)據(jù)庫(kù)一個(gè)表的數(shù)據(jù)出現(xiàn)被刪除情況,但沒有人主動(dòng)認(rèn)領(lǐng)。

由于

  • 客戶端沒有數(shù)據(jù)庫(kù)管理員

  • 新人加入項(xiàng)目組有數(shù)據(jù)庫(kù)操作權(quán)限

  • 實(shí)施人員直接操作數(shù)據(jù)庫(kù)記錄

無(wú)法準(zhǔn)確知道哪臺(tái)機(jī)子動(dòng)了數(shù)據(jù),于是想著如此強(qiáng)大的Oracle數(shù)據(jù)庫(kù)肯定有查看所有更改記錄的功能。

網(wǎng)上搜了一通,沒有發(fā)現(xiàn)直接的能夠雙擊運(yùn)行的exe工具,基本都是講通過(guò)oracle自帶的logminer(日志挖掘)工具對(duì)日志進(jìn)行分析。

logminer需要進(jìn)行一系列配置才可用。

步驟

啟動(dòng)sqlplus或在pl/sql developer中打開命令窗口

使用sys@sysdba連接數(shù)據(jù)庫(kù)

1.運(yùn)行兩個(gè)sql腳本

運(yùn)行l(wèi)ogminer需要先執(zhí)行兩個(gè)腳本,腳本中包含視圖、過(guò)程等運(yùn)行l(wèi)ogminer所需的數(shù)據(jù)庫(kù)對(duì)象。

這兩個(gè)腳本分別是dbmslm.sql、dbmslmd.sql,數(shù)據(jù)庫(kù)安裝好以后,他們保存在以下目錄中(安裝路徑不同目錄也不同)

'd:\app\Administrator\product\11.2.0\dbhome_1\RDBMS\ADMIN\dbmslm.sql'
'd:\app\Administrator\product\11.2.0\dbhome_1\RDBMS\ADMIN\dbmslmd.sql'

執(zhí)行這兩個(gè)腳本

SQL> @$ORACLE_HOME\RDBMS\ADMIN\dbmslm.sql;

SQL> @$ORACLE_HOME\RDBMS\ADMIN\dbmslmd.sql;

2.新增一個(gè)目錄,存放日志分析數(shù)據(jù)

因?yàn)槭菧y(cè)試,我手工在D盤建立logs目錄(D:/LOGS)

網(wǎng)上說(shuō)可以通過(guò)語(yǔ)句新增

SQL> CREATE DIRECTORY utlfile AS 'd:/logs';

3.增加一個(gè)初始化參數(shù) utl_file_dir

初始化文件存放路徑:‘d:\app\Administrator\product\11.2.0\dbhome_1\srvm\admin\init.ora’

可以同通過(guò)手工和腳本創(chuàng)建這個(gè)初始化參數(shù)

手工

進(jìn)入路徑打開init.ora文件,新增一行:utl_file_dir=d:/logs

腳本

SQL> alter system set utl_file_dir='d:/logs' scope=spfile;

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

SQL> exec dbms_logmnr_d.build(dictionary_filename => 'miner.ora', dictionary_location =>'d:/logs');

5.打開數(shù)據(jù)庫(kù)的擴(kuò)充日志(supplemental logging)

在通常情況下,redo log 只記錄的進(jìn)行恢復(fù)所必需的信息,但是這些信息對(duì)于一些其他應(yīng)用是不夠的,例如在 redo log中使用rowid唯一標(biāo)識(shí)一行而不是通過(guò)Primary key,如果我們?cè)诹硗獾臄?shù)據(jù)庫(kù)分析這些日志并想重新執(zhí)行某些dml時(shí)可能會(huì)有問(wèn)題,因?yàn)椴煌臄?shù)據(jù)庫(kù)其rowid代表的內(nèi)容是不同的。這時(shí)候就需要一些額外的信息(columns)加入redo log,這就是supplemental logging。

查看是否開啟擴(kuò)充日志

SQL> select SUPPLEMENTAL_LOG_DATA_MIN from v$database;

如果沒有沒有開啟(返回NO)擴(kuò)充日志,則開啟擴(kuò)充日志

SQL> alter database add supplemental log data;

6.重啟數(shù)據(jù)庫(kù)

要使初始化參數(shù)生效,需重新啟動(dòng)數(shù)據(jù)庫(kù)。

關(guān)閉數(shù)據(jù)庫(kù)

SQL> shutdown immediate;

開啟數(shù)據(jù)庫(kù)

SQL> startup;

7.提取要分析的日志文件

查看當(dāng)前聯(lián)機(jī)日志文件

SQL> SELECT group#, sequence#, status, first_change#, first_time FROM V$log ORDER BY first_change#;

status為current的記錄即為當(dāng)前活動(dòng)日志,取得這條記錄的group#,比如group# = 3

SQL> select * from v$logfile where group# = 3;

這條語(yǔ)句可以獲得當(dāng)前活動(dòng)日志的路徑,如:D:\APP\ADMINISTRATOR\ORADATA\GYTEST\REDO003.LOG

將此日志加入待分析的日志文件

SQL> exec dbms_logmnr.add_logfile('D:\APP\ADMINISTRATOR\ORADATA\GYTEST\REDO003.LOG', dbms_logmnr.new);

8.啟動(dòng)日志分析

SQL> exec dbms_logmnr.start_logmnr( dictfilename=>'d:/logs/miner.ora');

9.查看日志分析結(jié)果

SQL> SELECT sql_redo, sql_undo, seg_owner FROM v$logmnr_contents;

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

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

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