ORACLE 使用LOGMNR檢視資料庫日誌

2021-08-30 07:12:53 字數 2394 閱讀 3091

如果被人不小心刪除了資料庫的表物件裡面的資料,而我們又不知道準確的操作時間,這時,就可以使用oracle的logmnr工具,分析查詢資料庫的歸檔日誌,從而查詢該誤操作的內容和時間,有些直接呼叫log_undo就可以恢復。

我的作業系統cent-os,資料庫是oracle11g

1、使用oracle使用者登入linux,進入$oracle_home/dbs,找到裡面的initsid.ora這個檔案,這是資料庫啟動的引數文 件,使用vi工具,手動在裡面新增乙個引數utl_file_dir='/u01/arch',utl_file_dir在資料庫裡預設為空,大家可以使 用show parameter utl來檢視系統裡是否已經設定過該引數。

或者在啟動的server裡面使用alter來修改該引數。

alter system set utl_file_dir='/u01/arch' scope=spfile;

2、重啟服務,讓我們剛剛的修改生效。

3、接著,我們來生成用於分析的資料字典

在sqlplus裡呼叫資料庫的工具包dbms_logmnr_d.build

begin

dbms_logmnr_d.build(

dictionary_name => 'logmnr_dict.dat',

dictionary_location=>'/u01/arch' );

end; /

操作完成後,會再/u01/arch裡面出現乙個名為logmnr_dict.dat的檔案。

上面的dictionary_location的位址可以隨便設,不過一定要和utl_file_dir的值一樣,否則出錯。

4、下面我們要做的重啟服務,然後裝入我們要分析的日誌檔案。

shutdown immediate

startup mount

下面的操作需要在mount狀態下操作

begin

dbms_logmnr.add_logfile(

options=>dbms_logmnr.new,

logfilename=>'/u01/arch/o1_mf_1_37_57scllcl_.arc' );

end; /

options是用來指定檔案操作:new為新增新的用於分析的日誌檔案;removefile用來移除不需要分析的日誌。

logfilename為需要新增進入分析的日誌的檔案路徑,我這個是把歸檔的日誌檔案從flash_recovery_area裡面拷貝過來的。

5、再接著我們就要啟動分析了

因為使用logmnr分析需要些檔案,而剛剛我們的server是在mount狀態下的,無法寫檔案,因此我們需要做的是:

alter database open

將資料庫的狀態修改為open

begin

dbms_logmnr.start_logmnr(

dictfilename => '/u01/arch/logminer_dict.dat',

starttime => to_date('20090808 22:00:00','yyyymmdd hh24:mi:ss'),

endtime => to_date('20090808 23:40:00','yyyymmdd hh24:mi:ss') );

end; /

dictfilename為我們剛剛建立的資料字典檔案。

starttime,endtime為分析的時間範圍。

如果大家使用pl/sql developer上面的這些過程的呼叫就不用像我這樣還要手動寫了。

6、查詢日誌內容

進過上面的辛苦的工作,下面就是我們收穫的時候了,先介紹幾個資料字典檢視。

v$logmnr_dictionary  顯示用來決定物件id名稱的字典檔案的資訊

v$logmnr_logs  在logminer啟動時顯示被分析的日誌列表

v$logmnr_contents logminer啟動後,可以使用這個檢視在sql提示符下輸入sql語句來查詢重做日誌的內容。

select scn ,seq_name,timestamp,seq_owner,operation from v$logmnr_contents where sql_name='your

object'

我們可以看到幾條關於object的記錄,operation顯示的該操作的型別(ddl,delete,insert,update),沒有select,因為select是不寫redo log的(美中不足!!)。

我們如果想看看操作的具體內容可以接著查詢:

select scn,sql_redo,sql_undo from v$logmnr_contents where scn='192838718'

就可以顯示你要檢視的操作的內容,以及它對應的undo操作,可以呼叫sql_undo在rollback。

ok了....

Oracle中logmnr包的使用詳解

dbms logmnr是oracle在oracle8i所提供的新package。它主要用於分析log file檔案 包括online redo log file,archived log file 將log file中的資訊轉存到v logmnr contents中,從而獲取對oracle資料庫操作...

如何使用Logmnr方法分析資料庫日誌

您是不是在資料庫日誌問題上而頭痛呢?您是不是在苦於沒有想到乙個方便的解決方法而苦惱呢?本文用舉例的形式來講解使用logmnr方法分析資料庫日誌。一 安裝logminer工具 以下兩個指令碼以sysdba身份執行 oracle home rdbms admin dbmslm.sql oracle ho...

使用oracle的olap函式優化分頁查詢

周 走查時發現由於分頁功能需要根據總條數計算分頁數 而目前專案組內的普遍做法是進行兩次sql查詢,一次用count 獲得總條數,一次獲取真正的展現資料。其實我們可以使用oracle提供的olap函式對此進行優化,通過偽列 count over 即可獲得當前sql的總條數。比如selectt.coun...