使用Oracle 10g的Logminer挖掘日誌

Logminer是oracle從8i開始提供的用於分析重做日誌信息的工具,它包括DBMS_LOGMNR和DBMS_LOGMNR_D兩個package,後邊的D是字典的意思。它既能分析redo log file,也能分析歸檔後的archive log file。在分析日誌的過程中需要使用數據字典,一般先生成數據字典文件後使用,10g版本還可以使用在線數據字典。

Logminer可以分析其它數據庫的重做日誌文件,但是必須使用重做日誌所在數據庫的數據字典,否則會出現無法識別的亂碼。另外被分析數據庫的操作系統平臺最好和當前Logminer所在數據庫的運行平臺一樣,且block size相同。

1、運行以下2個腳本安裝logminer功能,一般數據庫都已經安裝好了:

p5b2@/u01/app/oracle/product/10.2/rdbms/admin$ ls -l dbmsl*
-rw-r--r--   1 oracle   oinstall      17246 Oct 27 2006  dbmslm.sql
-rw-r--r--   1 oracle   oinstall       4663 Oct 27 2006  dbmslmd.sql

2、要生成數據字典文件,首先要修改一個utl_file_dir參數,修改爲*或者想存放數據字典文件位置的目錄:

SQL> show parameter utl_file_dir

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
utl_file_dir                         string

SQL> alter system set utl_file_dir='*' scope=spfile;

System altered.

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

3、生成數據字典文件

SQL> show parameter utl_file_dir

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
utl_file_dir                         string      *
SQL> EXECUTE dbms_logmnr_d.build(dictionary_filename => 'dict20090625.dat',dictionary_location => '/orabak');

PL/SQL procedure successfully completed.

4、可以先設置使用的表空間

SQL> EXECUTE DBMS_LOGMNR_D.SET_TABLESPACE('erp')  

PL/SQL procedure successfully completed.

5、填加要分析的日誌文件

SQL> EXECUTE DBMS_LOGMNR.ADD_LOGFILE(LogFileName=>'/orabak/testarch/1_89802_640266118.dbf',Options=>dbms_logmnr.new);

PL/SQL procedure successfully completed.

6、可以繼續填加,用dbms_logmnr.removefile可以刪除

SQL> EXECUTE DBMS_LOGMNR.ADD_LOGFILE(LogFileName=>'/orabak/testarch/1_89807_640266118.dbf',Options=>dbms_logmnr.addfile);

PL/SQL procedure successfully completed.

7、開始分析日誌

SQL> execute dbms_logmnr.start_logmnr(dictfilename=>'/orabak/dict20090625.dat');

PL/SQL procedure successfully completed.

提取特定時間的日誌:

dbms_logmnr.start_logmnr(dictfilename=>'/orabak/dict20090625.dat',
starttime=>to_date('2009-06-24 09:30:00','YYYY-MM-DD HH24:MI:SS'),
endtime=>to_date('2009-06-24 12:00:59','YYYY-MM-DD HH24:MI:SS'))

使用在線數據字典:

SQL> EXEC DBMS_LOGMNR.START_LOGMNR(OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);

PL/SQL procedure successfully completed.

8、查看結果

select timestamp,username,session#,sql_redo,operation from v$logmnr_contents;

9、結束分析,釋放PGA內存資源

SQL> exec dbms_logmnr.end_logmnr;

PL/SQL procedure successfully completed.

注意,v$logmnr_contents內容保存了日誌的內容,只在當前會話有效,如果想長期保存分析,可以在當前會話用create table tablename as select * from v$logmnr_contents語句來持久保存。

另外一個windows環境的測試:

SQL> desc v$logmnr_logs;
名稱 是否爲空? 類型
----------------------------------------- --------
LOG_ID NUMBER
FILENAME VARCHAR2(512)
LOW_TIME DATE
HIGH_TIME DATE
DB_ID NUMBER
DB_NAME VARCHAR2(8)
RESET_SCN NUMBER
RESET_SCN_TIME DATE
THREAD_ID NUMBER
THREAD_SQN NUMBER
LOW_SCN NUMBER
NEXT_SCN NUMBER
DICTIONARY_BEGIN VARCHAR2(3)
DICTIONARY_END VARCHAR2(3)
TYPE VARCHAR2(7)
BLOCKSIZE NUMBER
FILESIZE NUMBER
INFO VARCHAR2(32)
STATUS NUMBER

SQL> select filename from v$logmnr_logs;
FILENAME
--------------------------------------------------------------------------------
E:ORACLEPRODUCT10.2.0DB_2DATABASEDB_RECOVERY_FILE_DESTARC26_666280390_1
E:ORACLEPRODUCT10.2.0DB_2DATABASEDB_RECOVERY_FILE_DESTARC27_666280390_1

SQL> select log_id,low_scn,low_time,next_scn,high_time from v$logmnr_logs;
LOG_ID LOW_SCN LOW_TIME NEXT_SCN HIGH_TIME
---------- ---------- ------------------- ---------- -------------------
26 1576118 2008/09/26 12:56:37 1580527 2008/09/26 13:15:02
27 1580527 2008/09/26 13:15:02 1580563 2008/09/26 13:16:04

SQL> exec dbms_logmnr.start_logmnr(dictfilename=>'E:\logmnrdict.ora',startscn=>1576118,endscn=>1580563);

SQL> select scn,timestamp , sql_redo from v$logmnr_contents where seg_owner='TEST' and seg_name='TT';

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章