oracle 9i logminer日誌分析01

聽海★藍心夢發表於2009-03-10

測試環境:

 OS:window XP

 Db:oracle 9i

注意:所有操作,要在一個會話中進行!!!

一、 oracle logminer簡介

dbms_logmnroracleoracle8i所提供的新package。它主要用於分析log file檔案(包括online redo log file,archived log file,log file中的資訊轉存到v$logmnr_contents中,從而獲取對oracle資料庫操作的歷史資訊。它不僅可以分析oracle8ilog file,也可以分析oracle8log file。資訊主要包括在你分析的時間限制內資料庫資料作了些什麼變更,執行了哪些語句。

二、  logminer日誌分析過程

1.       開啟init.ora檔案,加入utl_file_dir=d:\logminer(注:改為自己的路徑,是logminer使        用檔案的預設路徑),然後應用新的設定開啟oracle資料庫。

2.       執行SQL>execute dbms_logmnr_d.build('shwdict.ora','D:\logminer'); ,(注:將生成d:\logminer\shwdict.ora檔案,此檔案可以以後重複使用,但不能同時用於幾個logmnr)用於生成資料字典;如果沒有dbms_logmnr_d包,需手工執行@D:\oracle\rdbms\admin\dbmslmd.sql;如果執行過程中報下標越界錯誤,則需要開啟@ D:\oracle\rdbms\admin \dbmslmd.sql檔案,將其中的TYPE col_desc_array IS VARRAY(513) OF col_description513加大,我是改成了1513,儲存檔案重新執行@ D:\oracle\rdbms\admin \dbmslmd.sql;(注:都要以sysdba身份登陸執行)。

3.       將要分析的日誌檔案加入要分析的log list

1.       察看有哪些日誌檔案可以用
select * from v$logfile;

2.       查詢已經加入的日誌檔案
select * from v$logmnr_logs;(
注:查詢必須在同一個會話中查詢,單獨開查詢將查不到)

3.       新增日誌檔案到分析的log list
execute dbms_logmnr.add_logfile('d:\logminer\oradata\shw\redo01_1.log',dbms_logmnr.new);
execute dbms_logmnr.add_logfile('d:\logminer\ORADATA\ORA\REDO02_1.LOG',dbms_logmnr.addfile);
execute dbms_logmnr.add_logfile('d:\logminer\ORADATA\ORA\REDO03_1.LOG',dbms_logmnr.addfile);

4.       如果需要從分析列表裡去掉一個檔案用
execute dbms_logmnr.add_logfile ('d:\logminer\ORADATA\ORA\REDO03_1.LOG',dbms_logmnr.removefile);

 

4.       更改會話時間表達方式

alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'; 系統設定在登錄檔。

5.       查詢分析的日誌檔案(你已加入的日誌檔案)包含的scn範圍和日期範圍

  select low_time,high_time,low_scn,next_scn from v$logmnr_logs;

6.       執行分析:

1.       無限制條件

SQL> EXECUTE dbms_logmnr.start_logmnr(DictFileName=>' e:\oracle\logs\ v816dict.ora ');

2.       有限制條件
     
透過對過程DBMS_ LOGMNR.START_LOGMNR中幾個不同引數的設定(引數含義見表1),可以縮小要分析日誌檔案的範圍。如下面的例子,我們僅僅分析2009310日的日誌,

透過設定起始時間和終止時間引數我們可以限制只分析某一時間範圍的日誌:
 SQL> EXECUTE dbms_logmnr.start_logmnr(DictFileName => ' e:\oracle\logs\ v816dict.ora ',StartTime => to_date('2009-03-10 00:00:00','YYYY-MM-DD HH24:MI:SS'),EndTime => to_date(''2009-03-10 23:59:59','YYYY-MM-DD HH24:MI:SS '));  

 透過設定起始SCN和截至SCN來限制要分析日誌的範圍:
 SQL> EXECUTE dbms_logmnr.start_logmnr(DictFileName => ' e:\oracle\logs\ v816dict.ora ', StartScn => 20,EndScn => 50);  

1 DBMS_LOGMNR.START__LOGMNR過程引數含義 引數 引數型別 預設值 含義:  
StartScn
數字型(Number 0 分析重作日誌中SCN≥StartScn日誌檔案部分  
 EndScn
數字型(Number 0 分析重作日誌中SCN≤EndScn日誌檔案部分  
StartTime
日期型(Date) 1998-01-01 分析重作日誌中時間戳≥StartTime的日誌檔案部分  
EndTime
日期型(Date) 2988-01-01 分析重作日誌中時間戳≤EndTime的日誌檔案部分  
DictFileName
字元型(VARCHAR2) 字典檔案,該檔案包含一個資料庫目錄的快照。
使用該檔案可以使得到的分析結果是可以理解的文字形式,而非系統內部的16進位制 Options BINARY_INTEGER 0 系統除錯引數,實際很少使用。      
  

7.       查詢logminer分析結果:
Select SCN,timestamp, session# session_num, sql_redo
From V$LOGMNR_CONTENTS
Order by 1;
注:具體要查詢什麼內容可以自己修改。

 

8.       觀察分析結果(v$logmnr_contents
 
到現在為止,我們已經分析得到了重作日誌檔案中的內容。動態效能檢視$logmnr_contents包含LogMiner分析得到的所有的資訊。
SELECT sql_redo FROM v$logmnr_contents;  
如果我們僅僅想知道某個使用者對於某張表的操作,可以透過下面的SQL查詢得到,該查詢可以得到使用者DB_ZGXT對錶SB_DJJL所作的一切工作。
SQL> SELECT sql_redo FROM v$logmnr_contents WHERE username='DB_ZGXT' AND tablename='SB_DJJL';  
需要強調一點的是,檢視v$logmnr_contents中的分析結果僅在我們執行過程'dbms_logmrn.start_logmnr'這個會話的生命期中存在。
這是因為所有的LogMiner儲存都在PGA記憶體中,所有其他的程式是看不到它的,同時隨著程式的結束,分析結果也隨之消失。

三、  日誌分析事務,此時PGA記憶體區域被清除,分析結果也隨之不再存在:

1SQL> exec DBMS_LOGMNR.END_LOGMNR;

2、也可以直接退出SQL*PLUS,它會自動終止。

(未完待續)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/751371/viewspace-566637/,如需轉載,請註明出處,否則將追究法律責任。

相關文章