轉:LogMiner安裝和使用的一些心得

mengzhaoliang發表於2008-07-26

http://blog.chinaunix.net/u/25565/showart_200455.html

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

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

 

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

 

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

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

SQL> conn sys/sg1980@sgtest2 as sysdba

已連線。

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(addfileremovefile)的三個引數,分別是新建、新增、刪除日誌。

 

3.使用LogMiner進行日誌分析

  1)無限制條件

 

 

 

BEGIN

dbms_logmnr.start_logmnr(

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

END;

/

 

2)有限制條件

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

 

 

 

 

 

如何查改過的記錄:

 

 

把時間變成秒

 

SQL>alter session set nls_date_format='YYYY-MM-DD hh24:mi:ss';

 

SQL> select timestamp,table_name,username,session_info,sql_redo from v$logmnr_contents where table_name='EMP';

   

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

相關文章