LOGMNR的安裝和使用

lsm_3036發表於2011-08-01

logmnr的安裝和使用

SQL> conn sys/sys as sysdba

已連線。

SQL>  @C:\oracle\ora92\rdbms\admin\dbmslmd.sql

過程已建立。

沒有錯誤。

授權成功。

PL/SQL 過程已成功完成。

程式包已建立。

SQL> @C:\oracle\ora92\rdbms\admin\dbmslms.sql

程式包已建立。

沒有錯誤。

授權成功。

SQL> EXECUTE dbms_logmnr_d.build(dictionary_filename=>'v816dict.ora',dictionary_location=>'e:\oracle\logs');

SQL> EXECUTE dbms_logmnr.add_logfile(LogFileName=>'e:\Oracle\oradata\NCDBPX\redo01.log',Options=>dbms_logmnr.new);

PL/SQL procedure successfully completed.

SQL> EXECUTE dbms_logmnr.add_logfile(LogFileName=>'e:\Oracle\oradata\NCDBPX\redo02.log',Options=>dbms_logmnr.ADDFILE);

PL/SQL procedure successfully completed.

SQL> EXECUTE dbms_logmnr.add_logfile(LogFileName=>'e:\Oracle\oradata\NCDBPX\redo03.log',Options=>dbms_logmnr.ADDFILE);

PL/SQL procedure successfully completed.

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

PL/SQL procedure successfully completed.

SQL> select sql_REDO  from v$logmnr_contents where upper(operation)='DELETE' and upper(sql_redo) like '%GPRS_SER%'
  2  /

no rows selected

SQL> ed
Wrote file afiedt.buf

  1* select sql_REDO  from v$logmnr_contents where upper(operation)='CREATE' and upper(sql_redo) like '%EMP%'
SQL> /

no rows selected

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

LogMiner的主要用途

LogMiner工具的主要用途有:

(1)跟蹤資料庫的變化:可以離線的跟蹤資料庫的變化,而不會影響線上系統的效能。

(2)回退資料庫的變化:回退特定的變化資料,減少point-in-time recovery的執行。

(3)優化和擴容計劃:可通過分析日誌檔案中的資料以分析資料增長模式。

Oracle9i LogMiner的增強功能

(1)支援更多資料/儲存型別:連結/遷移行、CLUSTER表操作、DIRECT PATH插入以及DDL操作。

(2)提取和使用資料字典的選項:現在資料字典不僅可以提取到一個外部檔案中,還可以直接提取到重做日誌流中,它在日誌流中提供了操作當時的資料字典快照,這樣就可以實現離線

分析。

(3)允許對DML操作按事務進行分組:可以在START_LOGMNR()中設定COMMITTED_DATA_ONLY選項,實現對DML操作的分組,這樣將按SCN的順序返回已經提交的事務。

(4)支援SCHEMA的變化:在資料庫開啟的狀態下,如果使用了LogMiner的DDL_DICT_TRACKING選項,Oracle9i的LogMiner將自動對比最初的日誌流和當前系統的資料字典,並返回正確的

 DDL語句,並且會自動偵察並標記當前資料字典和最初日誌流之間的差別,這樣即使最初日誌流中所涉及的表已經被更改或者根本已經不存在,LogMiner同樣會返回正確的DDL語句。

(5)在日誌中記錄更多列資訊的能力:例如對於UPDATE操作不僅會記錄被更新行的情況,還可以捕捉更多已發生的更新操作資訊。

(6)支援基於數值的查詢:Oracle9i LogMiner在支援原有基於後設資料(操作、物件等)查詢的基礎上,開始支援基於實際涉及到的資料的查詢。例如涉及一個工資表,現在可以很容易

地查出員工工資由1000變成2000的原始更新語句,而在之前只能選出所有的更新語句。

LogMiner的安裝     
  
要安裝LogMiner工具,必須首先要以SYS使用者身份執行下面兩個指令碼檔案:

(l)$Oracle_HOME/rdbms/admin/dbmslmd.sql
 
    用來建立DBMS_LOGMNR包,該包用來分析日誌檔案。

(2)$Oracle_HOME/rdbms/admin/dbmslms.sql
 
     用來建立DBMS_LOGMNR_D包,該包用來建立資料字典檔案。

LogMiner工具的使用   
 
(1)建立資料字典檔案(data-dictionary)

建立資料字典的目的就是讓LogMiner引用涉及到內部資料字典中的部分時為他們實際的名字,而不是系統內部的16進位制。資料字典檔案是一個文字檔案,使用包DBMS_LOGMNR_D

來建立。 

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

UTL_FILE_DIR=e:\Oracle\logs;

重新啟動資料庫,使新加的引數生效,然後建立資料字典檔案:

CONNECT SYS

EXECUTE dbms_logmnr_d.build(dictionary_filename=>'v816dict.ora',dictionary_location=>'e:\oracle\logs');

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

Oracle的重作日誌分為兩種,線上(online)和離線(offline)歸檔日誌檔案,下面就分別來討論這兩種不同日誌檔案的列表建立。

①分析線上重作日誌檔案

●  建立列表

EXECUTE dbms_logmnr.add_logfile(LogFileName=>'e:\Oracle\oradata\sxf\redo01.log',Options=>dbms_logmnr.new);

●  新增其他日誌檔案到列表

EXECUTE dbms_logmnr.add_logfile(

LogFileName=>'e:\Oracle\oradata\sxf\redo02.log',

Options=>dbms_logmnr.addfile);

②分析離線日誌檔案

●  建立列表

EXECUTE dbms_logmnr.add_logfile(LogFileName=>'E:\Oracle\oradata\sxf\archive\ARCARC09108.001',Options=>dbms_logmnr.new);

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

EXECUTE dbms_logmnr.add_logfile(

LogFileName=>'E:\Oracle\oradata\sxf\archive\ARCARC09109.001',Options=>dbms_logmnr.addfile);

(3)使用LogMiner進行日誌分析

 ①無限制條件

EXECUTE dbms_logmnr.start_logmnr(DictFileName=>'e:\oracle\logs\v816dict.ora');
 
 ②有限制條件
  
通過對過程DBMS_ LOGMNR.START_LOGMNR中幾個不同引數的設定,可以縮小要分析日誌檔案的範圍。通過設定起始時間和終止時間引數可以限制只分析某一時間範圍的日誌。

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

動態效能檢視v$logmnr_contents包含LogMiner分析後得到的所有的資訊。

與日誌分析相關檢視還有:

①V$LOGMNR_DICTIONARY:查詢使用的資料字典檔案。

②V$LOGMNR_PARAMETERS:查詢當前LogMiner設定的引數。

③V$LOGMNR_FILES:查詢分析的日誌檔案。

④V$LOGMNR_CONTENTS:日誌檔案的內容。

3.其他注意事項

(1)LogMiner必須使用被分析資料庫例項產生的字典檔案,而不是安裝LogMiner的資料庫產生的字典檔案,另外必須保證安裝LogMiner資料庫的字符集和被分析資料庫的字符集相同。

(2)被分析資料庫平臺必須和當前LogMiner所在資料庫平臺一樣。

(3)LogMiner日誌分析工具僅能夠分析Oracle 8以後的產品。

 

 

附錄:

一、安裝LogMiner工具,以下兩個指令碼以SYSDBA身份執行

@$ORACLE_HOME\rdbms\admin\dbmslm.sql;

@ $ORACLE_HOME\rdbms\admin\dbmslmd.sql; 

第一個指令碼用來建立DBMS_LOGMNR包,該包用來分析日誌檔案。

第二個指令碼用來建立DBMS_LOGMNR_D包,該包用來建立資料字典檔案。 

二、使用LogMiner工具 

下面將詳細介紹如何使用LogMiner工具。 

1、建立資料字典檔案(data-dictionary) 
  
1).首先在init.ora初始化引數檔案中,指定資料字典檔案的位置,也就是新增一個引數UTL_FILE_DIR,該引數值為伺服器中放置資料字典檔案的目錄。如:UTL_FILE_DIR =

($ORACLE_HOME\logs) ,重新啟動資料庫,使新加的引數生效: 

2).然後建立資料字典檔案

SQL> connect /as sysdba

SQL> execute dbms_logmnr_d.build(dictionary_filename => 'dict.ora',dictionary_location => 'G:\oracle\logs');

PL/SQL procedure successfully completed
  
2、建立要分析的日誌檔案列表 

1).建立分析列表,即所要分析的日誌
 
SQL> execute dbms_logmnr.add_logfile(LogFileName => 'G:\ORACLE\ORADATA\ORADBSP\REDO04.LOG',Options => dbms_logmnr.new);

PL/SQL procedure successfully completeds
    
2).新增分析日誌檔案,一次新增1個為宜

SQL> execute dbms_logmnr.add_logfile(LogFileName => 'G:\ORACLE\ORADATA\ORADBSP\REDO05.LOG',Options => dbms_logmnr.ADDFILE);

PL/SQL procedure successfully completed

3、使用logMiner進行日誌分析

1).無限制條件,即用資料字典檔案對要分析的日誌檔案所有內容做分析

SQL> execute dbms_logmnr.start_logmnr(DictFileName => 'G:\oracle\logs\dict.ora');

PL/SQL procedure successfully completed
     
2).帶限制條件,可以用scn號或時間做限制條件,也可組合使用

--分析日誌列表中時間從07.02.28從10:00到15:00的內容

SQL> execute dbms_logmnr.start_logmnr(startTime => to_date('20070228100000','yyyy-mm-dd hh24:mi:ss'),endTime => to_date('20070228150000','yyyy-mm-

ddhh24:mi:ss'),DictFileName => 'G:\oracle\logs\dict.ora');
    
PL/SQL procedure successfully completed

dbms_logmnr.start_logmnr函式的原型為:

PROCEDURE start_logmnr(
       startScn           IN  NUMBER default 0 ,
       endScn  IN  NUMBER default 0,
       startTime       IN  DATE default '',
       endTime         IN  DATE default '',
       DictFileName     IN  VARCHAR2 default '',
       Options IN  BINARY_INTEGER default 0 ); 

4.分析後釋放記憶體
  
SQL> execute dbms_logmnr.end_logmnr;

PL/SQL procedure successfully completed

5.其它

1).刪除日誌分析檔案

exec dbms_logmnr.add_logfile('G:\ORACLE\ORADATA\ORADBSP\REDO04.LOG',dbms_logmnr.removefile);
   
三、檢視LogMiner工具分析結果

SQL> select * from dict t where t.table_name like '%LOGMNR%';--看所有與logmnr相關的檢視

TABLE_NAME                     COMMENTS
------------------------------ --------------------------------------------------------------------------------
GV$LOGMNR_CALLBACK             Synonym for GV_$LOGMNR_CALLBACK
GV$LOGMNR_CONTENTS             Synonym for GV_$LOGMNR_CONTENTS
GV$LOGMNR_DICTIONARY           Synonym for GV_$LOGMNR_DICTIONARY
GV$LOGMNR_LOGFILE              Synonym for GV_$LOGMNR_LOGFILE
GV$LOGMNR_LOGS                 Synonym for GV_$LOGMNR_LOGS
GV$LOGMNR_PARAMETERS           Synonym for GV_$LOGMNR_PARAMETERS
GV$LOGMNR_PROCESS              Synonym for GV_$LOGMNR_PROCESS
GV$LOGMNR_REGION               Synonym for GV_$LOGMNR_REGION
GV$LOGMNR_SESSION              Synonym for GV_$LOGMNR_SESSION
GV$LOGMNR_STATS                Synonym for GV_$LOGMNR_STATS
GV$LOGMNR_TRANSACTION          Synonym for GV_$LOGMNR_TRANSACTION
V$LOGMNR_CALLBACK              Synonym for V_$LOGMNR_CALLBACK
V$LOGMNR_CONTENTS              Synonym for V_$LOGMNR_CONTENTS
V$LOGMNR_DICTIONARY            Synonym for V_$LOGMNR_DICTIONARY
V$LOGMNR_LOGFILE               Synonym for V_$LOGMNR_LOGFILE
V$LOGMNR_LOGS                  Synonym for V_$LOGMNR_LOGS
V$LOGMNR_PARAMETERS            Synonym for V_$LOGMNR_PARAMETERS
V$LOGMNR_PROCESS               Synonym for V_$LOGMNR_PROCESS
V$LOGMNR_REGION                Synonym for V_$LOGMNR_REGION
V$LOGMNR_SESSION               Synonym for V_$LOGMNR_SESSION

TABLE_NAME                     COMMENTS
------------------------------ --------------------------------------------------------------------------------
V$LOGMNR_STATS                 Synonym for V_$LOGMNR_STATS
V$LOGMNR_TRANSACTION           Synonym for V_$LOGMNR_TRANSACTION

GV$LOGMNR_LOGS 是分析日誌列表檢視

分析結果在GV$LOGMNR_CONTENTS 檢視中,可按以下語句查詢:

select scn,timestamp,log_id,seg_owner,seg_type,table_space,data_blk#,data_obj#,data_objd#,
       session#,serial#,username,session_info,sql_redo,sql_undo 
from logmnr3 t 
where t.sql_redo like 'create%';

如果不能正常查詢GV$LOGMNR_CONTENTS檢視,並報以下錯誤,ORA-01306: 在從 v$logmnr_contents 中選擇之前必須呼叫 dbms_logmnr.start_logmnr() 。可採用如下方法:

create table logmnr3 as select * from GV$LOGMNR_CONTENTS;

FAQ:

1.建立資料字典的目 : 讓LogMiner引用涉及到內部資料字典中的部分時為他們實際的名字,而不是系統內部的16進位制。資料字典檔案是一個文字檔案,使用包DBMS_LOGMNR_D來建立。如
果我們要分析的資料庫中的表有變化,影響到庫的資料字典也發生變化,這時就需要重新建立該字典檔案。另外一種情況是在分析另外一個資料庫檔案的重作日誌時,也必須要重新生成
一遍被分析資料庫的資料字典檔案。 在使用LogMiner工具分析redo log檔案之前,可以使用DBMS_LOGMNR_D 包將資料字典匯出為一個文字檔案。該字典檔案是可選的,但是如果沒有它,
LogMiner解釋出來的語句中關於資料字典中的部分(如表名、列名等)和數值都將是16進位制的形式,我們是無法直接理解的。例如,下面的sql語句: 

INSERT INTO dm_dj_swry (rydm, rymc) VALUES (00005, '張三');  

LogMiner解釋出來的結果將是下面這個樣子, 

insert into Object#308(col#1, col#2) values (hextoraw('c30rte567e436'), hextoraw('4a6f686e20446f65'));

 

 


 

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

相關文章