LogMiner的安裝和使用

尛樣兒發表於2010-01-08

Oracle LogMiner安裝和使用

轉載自:http://blog.csdn.net/binbin8765/archive/2009/02/12/3883012.aspx

Oracle LogMiner 是Oracle公司從產品8i以後提供的一個實際非常有用的分析工具,使用該工具可以輕鬆獲得Oracle 重作日誌檔案(歸檔日誌檔案)中的具體內容,特別是,該工具可以分析出所有對於資料庫操作的DML(insert、update、delete等)語句,另外還可分析得到一些必要的回滾SQL語句。該工具特別適用於除錯、審計或者回退某個特定的事務。

總的說來,LogMiner工具的主要用途有:
1. 跟蹤資料庫的變化:可以離線的跟蹤資料庫的變化,而不會影響線上系統的效能。
2. 回退資料庫的變化:回退特定的變化資料,減少point-in-time recovery的執行。
3. 最佳化和擴容計劃:可透過分析日誌檔案中的資料以分析資料增長模式。
 

下面簡單介紹LogMiner的安裝及使用,我的環境是WIN2000+ORACLE10R2。
 

LogMiner安裝:

要安裝LogMiner工具,必須首先要執行下面這樣兩個指令碼,這兩個指令碼必須均以SYS使用者身份執行。其中第一個指令碼用來建立DBMS_LOGMNR包,該包用來分析日誌檔案。第二個指令碼用來建立DBMS_LOGMNR_D包,該包用來建立資料字典檔案。

1.$ORACLE_HOME/rdbms/admin/dbmslm.sql

2.$ORACLE_HOME/rdbms/admin/dbmslmd.sql.

SQL> conn as sysdba

已連線。

SQL> @$oracle_home/rdbms/admin/dbmslm.sql

SP2-0310: 無法開啟檔案 "$oracle_home/rdbms/admin/dbmslm.sql"

SQL> @d:\oracle\product\10.2.0\db_2\RDBMS\ADMIN\dbmslm.sql

程式包已建立。

授權成功。

SQL> @d:\oracle\product\10.2.0\db_2\RDBMS\ADMIN\dbmslmd.sql

程式包已建立。


使用LogMiner工具

1.建立資料字典檔案(data-dictionary)

資料字典檔案是一個文字檔案,使用包DBMS_LOGMNR_D來建立。如果我們要分析的資料庫中的表有變化,影響到庫的資料字典也發生變化,這時就需要重新建立該字典檔案。另外一種情況是在分析另外一個資料庫檔案的重作日誌時,也必須要重新生成一遍被分析資料庫的資料字典檔案。

在ORACLE8I的時候,首先在init.ora初始化引數檔案中,指定資料字典檔案的位置,也就是新增一個引數UTL_FILE_DIR,該引數值為伺服器中放置資料字典檔案的目錄。如:

UTL_FILE_DIR = (e:\Oracle\logs) 

ORACLE9I後,推薦使用SPFILE啟動,可以動態調整引數;

SQL> show parameter spfile

NAME                                 TYPE        VALUE                         

------------------------------------ ----------- ------------------------------

spfile                               string      D:\ORACLE\PRODUCT\10.2.0\DB_2\

                                                 DATABASE\SPFILESGTEST2.ORA    

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

系統已更改。

SQL> startup force

ORACLE 例程已經啟動。

Total System Global Area  289406976 bytes                                      

Fixed Size                  1248600 bytes                                      

Variable Size              96469672 bytes                                      

Database Buffers          188743680 bytes                                      

Redo Buffers                2945024 bytes                                      

資料庫裝載完畢。

資料庫已經開啟。

SQL> show parameter utl_file_dir

NAME                                 TYPE        VALUE                         

------------------------------------ ----------- ------------------------------

utl_file_dir                         string      d:\oracle\logs  

然後建立資料字典檔案

SQL> @d:\dbms_logmnr_d.build.txt

PL/SQL 過程已成功完成。


指令碼dbms_logmnr_d.build.txt

BEGIN

dbms_logmnr_d.build(

dictionary_filename => 'logminer_dict.dat',

dictionary_location => 'd:\oracle\logs');

END;

/

2.建立要分析的日誌檔案列表

Oracle的重作日誌分為兩種,線上(online)和離線(offline)歸檔日誌檔案,我這裡主要分析歸檔日誌,線上日誌原理一樣。

A.建立列表

SQL> @d:\dbms_logmnr.add_logfile.txt   

PL/SQL 過程已成功完成。
   

指令碼dbms_logmnr.add_logfile.txt

BEGIN

dbms_logmnr.add_logfile(

options => dbms_logmnr.new,

logfilename=> 'D:\oracle\product\10.2.0\flash_recovery_area\SGTEST2\ARCHIVELOG\2006_11_10\O1_MF_1_35_2O7JY3M1_.ARC');

END;

/

B.新增另外的日誌檔案到列表

SQL> @d:\dbms_logmnr.add_logfile2.txt
 

PL/SQL 過程已成功完成。


指令碼dbms_logmnr.add_logfile2.txt

BEGIN

dbms_logmnr.add_logfile(

options => dbms_logmnr.addfile,

logfilename => 'D:\oracle\product\10.2.0\flash_recovery_area\SGTEST2\ARCHIVELOG\2006_11_09\O1_MF_1_34_2O55BFH4_.ARC');

END;

/

注意Options=>dbms_logmnr.new(addfile、removefile)的三個引數,分別是新建、新增、刪除日誌。


3.使用LogMiner進行日誌分析

(1)無限制條件

BEGIN

dbms_logmnr.start_logmnr(

dictfilename => 'd:\oracle\logs\logminer_dict.dat');

END;

/
 

(2)有限制條件

透過對過程DBMS_ LOGMNR.START_LOGMNR中幾個不同引數的設定(引數含義見表1),可以縮小要分析日誌檔案的範圍。

   

引數         引數型別          預設值       含義
 
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  系統除錯引數,實際很少使用


例如我沒只需要分許2006年11月10日0點-2006年11月10日2點之間的日誌

BEGIN

dbms_logmnr.add_logfile(

options => dbms_logmnr.addfile,

logfilename=> 'D:\oracle\product\10.2.0\flash_recovery_area\SGTEST2\ARCHIVELOG\2006_11_09\O1_MF_1_34_2O55BFH4_.ARC');

END;

/
 

4.觀察分析結果(v$logmnr_contents)

到現在為止,我們已經分析得到了重作日誌檔案中的內容。動態效能檢視v$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記憶體中,所有其他的程式是看不到它的,同時隨著程式的結束,分析結果也隨之消失。


最後,使用過程DBMS_LOGMNR.END_LOGMNR終止日誌分析事務,此時PGA記憶體區域被清除,分析結果也隨之不再存在。

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

相關文章