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

淺談LogMiner的使用方法

編輯:關於Oracle數據庫
Logminer是每個Dba都應熟悉的工具,當一天由於用戶的誤操作你需要做不完全的恢復時,由於你無法確定這個操作是哪個時間做的,所以這對你的恢復就帶來的很大的難度,丟失的數據也不能完全恢復回來。而LogMiner就可以幫你確定這個誤操作的准確時間。

我的測試環境是Aix4.3.3的操作系統,Oracle9.2.0.3的測試庫。

一、LogMiner的幾點說明
1、LogMiner可以幫你確定在某段時間所發的各種DML,DDL操作的具體時間和SCN號,它所依據的是歸檔日志文件及聯機日志文件。
2、它只能在Oracle8i及以後的版本中使用,不過它可以分析Oracle8的日志。
3、Oracle8i只能用於分析DML操作,到Oracle9i則可以分析DDL操作了。
4、LogMiner不支持索引組織表、Long、LOB及集合類型。
5、MTS的環境也不能使用LogMiner.

二、操作步驟
1、設定用於LogMiner分析的數據文件存放的位置
這是設定utl_file_dir參數的過程,我的示例:
a、在initctc.ora文件中加入如下一行
    utl_file_dir=/u01/arch
b、得啟數據庫
  oracle>sqlplus /nolog  
  sql>conn / as sysdba
  sql>shutdown immediate
  sql>statup

2、生成數據字典文件,是通過dbms_logmnr_d.build()來完成。
  SQL> BEGIN
  2    dbms_logmnr_d.build(
  3      dictionary_filename => ’logminer_dict.dat’,
  4      dictionary_location => ’/u01/arch’
  5    );
  6  END;
  7 / 

  dictionary_location指的是Logminer數據字典文件存放的位置,它必須匹配utl_file_dir的設定。
  其中的dictionary_filename指的是放於存放位置的字典文件的名字,名字可以任意取。

3、建立一個日志分析表
  a、建立日志分析表數據庫必須在mount或nomount狀態,啟動數據庫到mount狀態。
    sqlplus /nolog
    sql>conn / as sysdba
    sql>shutdown immediate
    sql>starup mount

  b、建立日志分析表,使用dbms_logmnr.add_logfile()
    SQL> BEGIN
    2    dbms_logmnr.add_logfile(
    3      options => dbms_logmnr.new,
    4      logfilename => ’/u01/arch/arc_ctc_0503.arc’
    5    );
    6  END;
    7 /      
    其中的options有三種取值,dbms_logmnr.new用於建一個日志分析表;dbms_logmnr.addfile用於加入用於分析的的日志文件;dbms_logmnr.removefile用於移出用於分析的日志文件。


4、添加用於分析的日志文件。
    SQL> BEGIN
    2    dbms_logmnr.add_logfile(
    3      options => dbms_logmnr.addfile,
    4      logfilename => ’/u01/arch/arc_ctc_0504.arc’
    5    );
    6  END;
    7 / 

  使用則可以把這個文件從日志分析表中移除,從而不進行分析。
    SQL> BEGIN
    2    dbms_logmnr.add_logfile(
    3      options => dbms_logmnr.removefile,
    4      logfilename => ’/u01/arch/arc_ctc_0503.arc’
    5    );
    6  END;
    7 /  


5、啟動LogMiner進行分析。
    SQL> BEGIN
    2    dbms_logmnr.start_logmnr(
    3      dictfilename => ’/u01/arch/logminer_dict.dat’,
    4      starttime => to_date(’20030501 12:15:00’,’yyyymmdd hh24:mi:ss’),
    5      endtime => to_date(’20030501 15:40:30’,’yyyymmdd hh24:mi:ss’)
    6    );
    7  END;
    8 / 

    即分析2003年5月1日這天12:15至15:40這段時間,並把分析結果放到數據字典中以用於查詢。還有兩個參數StartScn(起始scn號)及EndScn(終止Scn)號。

6、查看日志分析的結果,通過查詢v$logmnr_contents可以查詢到
  a、查看DML操作,示例:
    SELECT operation,
          sql_redo,
          sql_undo,
      FROM V$logmnr_contents
    WHERE seg_name = ’QIUYB’;

    OPERATION    SQL_REDO                    SQL_UNDO
    ----------    --------------------------  --------------------------
    INSERT        inser into qiuyb.qiuyb ...  delete from qiuyb.qiuyb...

    其中operation指的是操作,sql_redo指的是實際的操作,sql_undo指的是用於取消的相反的操作。

  b、查看DDL操作,示例:
    SELECT timstamp,
          sql_redo
      FROM v$logmnr_contents
    WHERE upper(sql_redo) like ’%TRUNCATE%’;

7、結束LogMiner的分析。
  SQL>BEGIN
  2    dbms_logmnr.end_logmnr;
  3  end;
  4 / 

三、與LogMiner相關的數據字典。
1、v$loglist          它用於顯示歷史日志文件的一些信息
2、v$logmnr_dictionary 因logmnr可以有多個字典文件,該視圖用於顯示這方面信息。
3、v$logmnr_parameters 它用於顯示logmnr的參數
4、v$logmnr_logs      它用於顯示用於分析的日志列表信息。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved