Oracle 10g Logminer 研究及測試

maojinyu發表於2011-08-24

一,如何使用Logminer:

先要logminer的兩個包;以SYS使用者執行下面兩個指令碼,其中第一個指令碼dbmslm.sql用來建立DBMS_LOGMNR包,該包用來分析日誌檔案。第二個指令碼dbmslmd.sql用來建立DBMS_LOGMNR_D包,該包用來建立資料字典檔案

D:oracleproduct10.2.0db_1RDBMSADMIN>sqlplus /nolog

SQL*Plus: Release 10.2.0.4.0 - Production on星期五410 17:49:02 2009

Copyright (c) 1982, 2007, Oracle. All Rights Reserved.

SQL> conn sys/oracle as sysdba

已連線。

SQL>

SQL> @dbmslm.sql

程式包已建立。

授權成功。

SQL>

SQL> @dbmslmd.sql

程式包已建立。

二,建立資料字典檔案

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

首先需要修改引數UTL_FILE_DIR ,該引數值為伺服器中放置資料字典檔案的目錄,中我們透過動態修改引數的方式來修改,然後重新啟動資料庫生效。其中logs_utl_file目錄先期建立好

SQL> alter system set UTL_FILE_DIR='d:oracleproduct10.2.0oradatatestlogs_utl_file' scope=spfile; 系統已更改。

SQL> shutdown immediate

資料庫已經關閉。

已經解除安裝資料庫。

ORACLE例程已經關閉。

SQL>

SQL> startup

ORACLE例程已經啟動。

Total System Global Area 167772160 bytes

Fixed Size 1295608 bytes

Variable Size 125831944 bytes

Database Buffers 33554432 bytes

Redo Buffers 7090176 bytes

資料庫裝載完畢。

資料庫已經開啟。

SQL>

SQL> show parameter UTL_FILE

NAME TYPE

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

VALUE

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

utl_file_dir string

d:oracleproduct10.2.0orada

tatestlogs_utl_file

SQL>

然後建立資料字典檔案:

BEGIN

dbms_logmnr_d.build(

dictionary_filename => ' logminer_dict.ora',

dictionary_location => ' D:oracleproduct10.2.0oradatatestlogs_utl_file');

END;

/

OK ,可以看到在logs_ult_file中已經生成了logminer_dict.ora資料字典檔案。資料字典檔案是可以開啟的文字檔案。有興趣可以開啟看看。

建立資料字典是讓logminer引用實際到內部資料字典中的部分是使用物件的名稱,而不是系統內部的16進位制的ID.

三,建立要分析的日誌檔案(線上日誌或歸檔日誌)的列表

1)分析線上的重做日誌

A。建立列表

SQL> execute dbms_logmnr.add_logfile(LogFileName=>'d:oracleproduct10.2.0orad

atatestredo01.log', ptions=>dbms_logmnr.new);

PL/SQL過程已成功完成。

B。新增其他日至檔案到列表

SQL> execute dbms_logmnr.add_logfile(LogFileName=>'d:oracleproduct10.2.0orad

atatestredo02.log', ptions=>dbms_logmnr.addfile);

PL/SQL過程已成功完成。

SQL> execute dbms_logmnr.add_logfile(LogFileName=>'d:oracleproduct10.2.0orad

atatestredo03.log', ptions=>dbms_logmnr.addfile);

PL/SQL過程已成功完成。

2)分析歸檔的重做日誌

A。建立列表

SQL> execute dbms_logmnr.add_logfile(LogFileName=>'d:oracleproduct10.2.0orad

ataarchiveARC00052_0684166863.001', ptions=>dbms_logmnr.new);

PL/SQL過程已成功完成。

B。新增其他日誌檔案到列表

SQL> execute dbms_logmnr.add_logfile(LogFileName=>'d:oracleproduct10.2.0orad

ataarchiveARC00053_0684166863.001', ptions=>dbms_logmnr.addfile);

PL/SQL過程已成功完成。

如果你覺得不需要分析已經在列表中的線上或歸檔日誌,可以透過removefile命令刪除:

SQL> execute dbms_logmnr.add_logfile(LogFileName=>'d:oracleproduct10.2.0orad

ataarchiveARC00053_0684166863.001', ptions=>dbms_logmnr.removefile);

PL/SQL過程已成功完成。

四,使用Logminer進行日誌分析

無限制條件:

SQL> execute dbms_logmnr.start_logmnr(DictFileName=> 'D:oracleproduct10.2.0o

radatatestlogs_utl_filelogminer_dict.ora') ;

PL/SQL過程已成功完成。

有限制條件:

透過對過程DBMS_LOGMNR.START_LOGMNR中的時間或者SCN引數的設定,可以縮小分析日誌檔案的範圍:

如我們僅僅分析2009223日到726日的日誌:

SQL> execute dbms_logmnr.start_logmnr(

DictFileName => ' D:oracleproduct10.2.0o

radatatestlogs_utl_filelogminer_dict.ora ',

StartTime => to_date('2009-2-23 00:00:00','YYYY-MM-DD HH24:MI:SS')

EndTime => to_date(''2009-2-26 23:59:59','YYYY-MM-DD HH24:MI:SS '));

相關的引數如下:

引數引數型別預設值含義

StartScn數字型0分析重作日誌中SCNStartScn日誌檔案部分

EndScn數字型0分析重作日誌中SCNEndScn日誌檔案部分

StartTime日期型1998-01-01分析重作日誌中時間戳≥StartTime的日誌檔案部分

EndTime日期型2988-01-01分析重作日誌中時間戳≤EndTime的日誌檔案部分

DictFileName字元型字典檔案該檔案包含一個資料庫目錄的快照。

使用該檔案可以使得到的分析結果是可以理解的文字形式,

而非系統內部的16進位制

Options BINARY_INTEGER 0系統除錯引數,實際很少使用

五,得到分析結果:

到現在為止,我們已經分析得到了重作日誌檔案中的內容。動態效能檢視v$logmnr_contents包含LogMiner分析得到的所有的資訊。

SELECT sql_redo FROM v$logmnr_contents;

如果我們僅僅想知道某個使用者對於某張表的操作,可以透過下面的SQL查詢得到,該查詢可以得到使用者TONY對錶R_WIP_TST所作的一切工作。

SQL>; SELECT sql_redo FROM v$logmnr_contents WHERE username='TONY' AND tablename='R_WIP_TST';

需要強調一點的是,檢視v$logmnr_contents中的分析結果僅在我們執行過程'dbms_logmrn.start_logmnr' 這個會話的生命期中存在(如果執行了DBMS_LOGMNR.END_LOGMNR分析結果將消失)。這是因為所有的LogMiner儲存都在PGA記憶體中,所有其他的程式是看不到它的,同時隨著程式的結束,分析結果也隨之消失。

如果需要,可以透過removefile命令刪除日誌分析檔案

SQL> execute dbms_logmnr.add_logfile(LogFileName=>'d:oracleproduct10.2.0oradataarchiveARC00052_0684166863.001', ptions=>dbms_logmnr.removefile);

六,使用DBMS_LOGMNR.END_LOGMNR結束日誌分析過程,釋放記憶體

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

SQL> execute dbms_logmnr.end_logmnr;

[@more@]

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

相關文章