程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> Oracle數據庫LogMiner工具的使用方法

Oracle數據庫LogMiner工具的使用方法

編輯:Oracle數據庫基礎

Logminer(DBMS_LOGMNR和DBMS_LOGMNR_D)package,可以用來分析Oracle的重做日志文件。Logminer是Oracle從8i開始提供的工具。

  我們可以使用logminer分析其它instance(版本可不一致)的重做日志文件,但是必須遵循以下要求:

  1.LogMiner日志分析工具僅能夠分析Oracle 8以後的產品

  2.LogMiner必須使用被分析數據庫實例產生的字典文件,且安裝LogMiner數據庫的字符集必須和被分析數據庫的字符集相同

  3.被分析數據庫平台必須和當前LogMiner所在數據庫平台一樣,且block size相同。

  使用logminer

  1.安裝logminer:

  要安裝LogMiner工具,必須首先要運行下面這樣兩個腳本, $Oracle_HOME/rdbms/admin/dbmslm.sql

  $Oracle_HOME/rdbms/admin/dbmslmd.sql.

  這兩個腳本必須均以SYS用戶身份運行。

  2.創建數據字典文件

  首先在init.ora初始化參數文件中,添加參數UTL_FILE_DIR,該參數值為服務器中放置數據字典文件的目錄。如: UTL_FILE_DIR = (D:\Oracle\logs)

  重新啟動數據庫,使新加的參數生效,然後創建數據字典文件: SQL> EXECUTE dbms_logmnr_d.build(


  dictionary_filename => ' logmn_ora817.dat',
  dictionary_location => ' D:\Oracle\logs ');

  創建數據字典是讓LogMiner引用涉及到內部數據字典中的部分時使用對象的名稱,而不是系統內部的16進制的ID。如果我們要分析的數據庫中的表有變化,影響到庫的數據字典也發生變化,就需要重新創建該字典。

  3.添加要分析的日志文件

  Logminer可以用來分析在線的重做日志文件和歸檔日志文件,但是我們一般建議使用歸檔的日志文件。

  a.添加新的日志文件: SQL> EXECUTE dbms_logmnr.add_logfile(

  LogFileName=>' D:\database\Oracle\oradata\ora817\archive \ ARC01491.001 ', Options=>dbms_logmnr.new);

  b.添加另外的日志文件到列表 SQL> EXECUTE dbms_logmnr.add_logfile(

  LogFileName=>' D:\database\Oracle\oradata\ora817\archive \ ARC01491.002', Options=>dbms_logmnr.addfile);

c. 移去一個日志文件 SQL> EXECUTE dbms_logmnr.add_logfile(

  LogFileName=>' D:\database\Oracle\oradata\ora817\archive \ ARC01491.002', Options=>dbms_logmnr. REMOVEFILE);

  創建了要分析的日志文件,就可以對其進行分析。

  4. 進行日志分析 SQL> EXECUTE dbms_logmnr.start_logmnr(

  DictFileName=>' D:\Oracle\logs\ logmn_ora817.dat ');

  可以使用相應的限制條件:

  時間范圍:對dbms_logmnr.start_logmnr使用StartTime和EndTime參數

  SCN范圍:對dbms_logmnr.start_logmnr使用StartScn和EndScn參數

  5.觀察結果:

  主要是查詢v$logmnr_contents: SQL> desc v$logmnr_contents;

  名稱 空? 類型


  SCN NUMBER
  TIMESTAMP DATE
  THREAD# NUMBER
  LOG_ID NUMBER
  XIDUSN NUMBER
  XIDSLT NUMBER
  XIDSQN NUMBER
  RBASQN NUMBER
  RBABLK NUMBER
  RBABYTE NUMBER
  UBAFIL NUMBER
  UBABLK NUMBER
  UBAREC NUMBER
  UBASQN NUMBER
  ABS_FILE# NUMBER
  REL_FILE# NUMBER
  DATA_BLK# NUMBER
  DATA_OBJ# NUMBER
  DATA_OBJD# NUMBER
  SEG_OWNER VARCHAR2(32)
  SEG_NAME VARCHAR2(32)
  SEG_TYPE NUMBER
  SEG_TYPE_NAME VARCHAR2(32)
  TABLE_SPACE VARCHAR2(32)

ROW_ID VARCHAR2(19)
  SESSION# NUMBER
  SERIAL# NUMBER
  USERNAME VARCHAR2(32)
  SESSION_INFO VARCHAR2(4000)
  ROLLBACK NUMBER
  OperaTION VARCHAR2(32)
  SQL_REDO VARCHAR2(4000)
  SQL_UNDO VARCHAR2(4000)
  RS_ID VARCHAR2(32)
  SSN NUMBER
  CSF NUMBER
  INFO VARCHAR2(32)
  STATUS NUMBER
  PH1_NAME VARCHAR2(32)
  PH1_REDO VARCHAR2(2000)
  PH1_UNDO VARCHAR2(2000)
  PH2_NAME VARCHAR2(32)
  PH2_REDO VARCHAR2(2000)
  PH2_UNDO VARCHAR2(2000)
  PH3_NAME VARCHAR2(32)
  PH3_REDO VARCHAR2(2000)
  PH3_UNDO VARCHAR2(2000)
  PH4_NAME VARCHAR2(32)
  PH4_REDO VARCHAR2(2000)
  PH4_UNDO VARCHAR2(2000)
  PH5_NAME VARCHAR2(32)
  PH5_REDO VARCHAR2(2000)
  PH5_UNDO VARCHAR2(2000)

  通過字段sql_redo可以得到該日志文件中進行過的sql操作,通過sql_undo可以得到撤銷的sql語句。

  還可以用這樣的sql對日志文件中的所有的操作分類統計: select operation,count(*)from v$logmnr_contents group by Operation;

  視圖v$logmnr_contents中的分析結果僅在我們運行過程'dbms_logmrn.start_logmnr'這個會話的生命期中存在。這是因為所有的LogMiner存儲都在PGA內存中,所有其他的會話是看不到它的,同時隨著會話的結束而清除分析結果。

  最後,使用過程DBMS_LOGMNR.END_LOGMNR終止日志分析事務,PGA內存區域將被清除。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved