Oracle logminer 使用總結

來源:互聯網
上載者:User

一、logminer的用途記錄檔中存放著所有進行資料庫恢複的資料,記錄了針對資料庫結構的每一個變化,也就是對資料庫操作的所有DML語句。logminer 工具即可以用來分析線上,也可以用來分析離線記錄檔,即可以分析本身自己資料庫的重作記錄檔,也可以用來分析其他資料庫的重作記錄檔。總的說來,logminer工具的主要用途有:
 1.追蹤資料庫的變化:可以離線的追蹤資料庫的變化,而不會影響線上系統的效能。
 2. 回退資料庫的變化:回退特定的變化資料,減少point-in-time recovery的執行。

 3.最佳化和擴容計劃:可通過分析記錄檔中的資料以分析資料增長模式。

二、安裝logminer
要安裝logminer工具,必須首先要運行下面這樣兩個指令碼:
 l. $Oracle_HOME/rdbms/admin/dbmslm.sql
 2. $ORACLE_HOME/rdbms/admin/dbmslmd.sql
這兩個指令碼必須均以SYS使用者身份運行。其中第一個指令碼用來建立DBMS_LOGMNR包,該包用來分析記錄檔。第二個指令碼用來建立DBMS_LOGMNR_D包,該包用來建立資料字典檔案。

  1. SQL> @?/rdbms/admin/dbmslm.sql  
  2.   
  3. 程式包已建立。  
  4.   
  5. 授權成功。  
  6.   
  7. 同義字已建立。  
  8.   
  9. SQL> @?/rdbms/admin/dbmslmd.sql  
  10.   
  11. 程式包已建立。  
  12.   
  13. 同義字已建立。  
  14.   
  15. SQL> show user  
  16. USER 為 "SYS"  
三、使用logminer工具
下面將詳細介紹如何使用logminer工具。
 1、建立資料字典檔案(data-dictionary)
前面已經談到,logminer工具實際上是由兩個新的PL/SQL內建包((DBMS_LOGMNR 和 DBMS_ LOGMNR_D)和四個V$動態效能檢視(視圖是在利用過程DBMS_LOGMNR.START_LOGMNR啟動logminer時建立)組成。在使用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'));

建立資料字典的目的就是讓logminer引用涉及到內部資料字典中的部分時為他們實際的名字,而不是系統內部的16進位。資料字典檔案是一個文字檔,使用包DBMS_LOGMNR_D來建立。如果我們要分析的資料庫中的表有變化,影響到庫的資料字典也發生變化,這時就需要重新建立該字典檔案。另外一種情況是在分析另外一個資料庫檔案的重作日誌時,也必須要重建一遍被分析資料庫的資料字典檔案。首先指定資料字典檔案的位置,也就是添加一個參數UTL_FILE_DIR,該參數值為伺服器中放置資料字典檔案的目錄。重新啟動資料庫,使新加的參數生效,然後建立資料字典檔案。

  1. SQL> show user  
  2. USER 為 "SYS"  
  3. SQL> show parameter utl_file_dir  
  4.   
  5. NAME                                 TYPE        VALUE  
  6. ------------------------------------ ----------- ------------------------------   
  7. utl_file_dir                         string  
  8.   
  9. SQL> alter system set utl_file_dir='/u01/app/logminer' scope=spfile;  
  10.   
  11. 系統已更改。  
  12.   
  13. SQL> shutdown immediate  
  14. 資料庫已經關閉。  
  15. 已經卸載資料庫。  
  16. ORACLE 常式已經關閉。  
  17. SQL> startup  
  18. ORACLE 常式已經啟動。  
  19.   
  20. Total System Global Area  238530560 bytes  
  21. Fixed Size                  1335724 bytes  
  22. Variable Size             150998612 bytes  
  23. Database Buffers           83886080 bytes  
  24. Redo Buffers                2310144 bytes  
  25. 資料庫裝載完畢。  
  26. 資料庫已經開啟。  
  27. SQL> show parameter utl_file_dir  
  28.   
  29. NAME                                 TYPE        VALUE  
  30. ------------------------------------ ----------- ------------------------------   
  31. utl_file_dir                         string      /u01/app/logminer  
  32. SQL> exec dbms_logmnr_d.build( 'dictionary.ora', '/u01/app/logminer');  
  33.   
  34. PL/SQL 過程已成功完成。  

   開始之前

  1. SQL> show user  
  2. USER 為 "SYS"  
  3. SQL> select SUPPLEMENTAL_LOG_DATA_MIN from v$database;  
  4.   
  5. SUPPLEME  
  6. --------   
  7. NO  
  8.   
  9. SQL> alter database add supplemental log data;  
  10.   
  11. 資料庫已更改。  
  12.   
  13. SQL> select SUPPLEMENTAL_LOG_DATA_MIN from v$database;  
  14.   
  15. SUPPLEME  
  16. --------   
  17. YES  
supplemental logging(擴充日誌):在通常情況下,redo log 只記錄的進行恢複所必需的資訊,但是這些資訊對於我們使用redo log進行一些其他應用時是不夠的,例如在 redo log中使用rowid唯一標識一行而不是通過Primary key,如果我們在另外的資料庫分析這些日誌並想重新執行某些dml時就可能會有問題,因為不同的資料庫其rowid代表的內容是不同的。在這時候就需要一些額外的資訊(columns)加入redo log,這就是supplemental logging。supplemental logging分為兩個層級database_level and table_level,其中database_level層級分為兩種,minimal supplemental logging and identification key logging,其中minimal supplemental logging不會顯著增加系統的負擔,但是identification key logging對系統負擔比較大,在預設情況下oracle不會設定任何supplemental logging,但是如果要使用logminer,oracle建議至少設定minimal supplemental logging。我在使用logminer是,不設定minimal supplemental logging,從v$logmnr_contents中幾乎得不到任何資訊。


    2、建立要分析的記錄檔列表
Oracle的重作日誌分為兩種,線上(online)和離線(offline)歸檔記錄檔,下面就分別來討論這兩種不同記錄檔的列表建立。
 (1)分析線上重作記錄檔
  1. SQL> show user  
  2. USER 為 "SYS"  
  3. SQL> select * from v$log;  
  4.   
  5.     GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME     NEXT_CHANGE# NEXT_TIME  
  6. ---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------------- ------------ --------------   
  7.          1          1         67   52428800        512          1 YES INACTIVE                643449 14-12月-11           653614 15-12月-11  
  8.          2          1         68   52428800        512          1 NO  CURRENT                 653614 15-12月-11       2.8147E+14  
  9.          3          1         66   52428800        512          1 YES INACTIVE                614556 13-12月-11           643449 14-12月-11  
  10.   
  11. SQL> select * from v$logfile;  
  12.   
  13.     GROUP# STATUS  TYPE    MEMBER                                                       IS_  
  14. ---------- ------- ------- ------------------------------------------------------------ ---   
  15.          1         ONLINE  /u01/app/oracle/oradata/orcl/redo01.log                      NO  
  16.          2         ONLINE  /u01/app/oracle/oradata/orcl/redo02.log                      NO  
  17.          3         ONLINE  /u01/app/oracle/oradata/orcl/redo03.log                      NO  
  18.   
  19. SQL> exec dbms_logmnr.add_logfile('/u01/app/oracle/oradata/orcl/redo01.log', dbms_logmnr.new);  
  20.   
  21. PL/SQL 過程已成功完成。  
  22.   
  23. SQL> exec dbms_logmnr.add_logfile('/u01/app/oracle/oradata/orcl/redo02.log', dbms_logmnr.addfile);  
  24.   
  25. PL/SQL 過程已成功完成。  
  26.   
  27. SQL> exec dbms_logmnr.add_logfile('/u01/app/oracle/oradata/orcl/redo03.log', dbms_logmnr.addfile);  
  28.   
  29. PL/SQL 過程已成功完成。  

刪除列表中的記錄檔:exec dbms_logmnr.add_logfile('/u01/app/oracle/oradata/orcl/redo03.log', dbms_logmnr.removefile);
關於這個記錄檔列表中需要分析記錄檔的個數完全由你自己決定,但這裡建議最好是每次只添加一個需要分析的記錄檔,在對該檔案分析完畢後,再添加另外的檔案。

  • 1
  • 2
  • 3
  • 下一頁

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.