程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> 更多數據庫知識 >> Oracle數據庫備份與恢復(6):LogMiner

Oracle數據庫備份與恢復(6):LogMiner

編輯:更多數據庫知識

    6.1 LogMiner 的用途

    Oracle LogMiner 是Oracle公司從產品8i以後提供的一個實際非常有用的分析工具,使用該工具可以輕松獲得  Oracle 重作日志文件(歸檔日志文件)中的具體內容,特別是,該工具可以分析出所有對於數據庫操作的 DML(insert、update、delete 等)語句,9i後可以分析 DDL語句,另外還可分析得到一些必要的回滾 SQL語句。其中一個最重要的用途就是不用全部恢復數據庫就可以恢復數據庫的某個變化。該工具特別適用於調試、審計或者回退某 個特定的事務。

    LogMiner  工具即可以用來分析在線,也可以用來分析離線日志文件,即可以分析本身自己數據庫的重作日志文件,也可以用來分析其他數據庫的重作日志文件。 總的說來,LogMiner工具的主要用途有:

    1.  跟蹤數據庫的變化:可以離線的跟蹤數據庫的變化,而不會影響在線系統的性能。

    2.  回退數據庫的變化:回退特定的變化數據,減少 point-in-time recovery 的執行。

    3.  優化和擴容計劃:可通過分析日志文件中的數據以分析數據增長模式。

    4.    確定數據庫的邏輯損壞時間:准確定位操作執行的時間和  SCN    ==> 基於時間和SCN的恢復

    5.    確定事務級要執行的精細邏輯恢復操作          //取得相應的 UNDO操作

    6.    執行後續審計         //DML    DDL    DCL    執行時間、用戶

    注意事項:

    1.    LogMiner 可以幫你確定在某段時間所發的各種 DML,DDL操作的具體時間和 SCN號,它所依據的是歸檔日志文件及聯機日志文件。

    2.    它只能在 Oracle8i及以後的版本中使用,不過它可以分析 Oracle8的日志。

    3.    Oracle8i 只能用於分析 DML操作,到 Oracle9i則可以分析 DDL操作了。

    4.    LogMiner 不支持索引組織表、Long、LOB及集合類型。

    5.    不支持 MTS的環境6.    LogMiner 必須使用被分析數據庫實例產生的字典文件,而不是安裝 LogMiner的數 據庫產生的字典文件,另外必須保證安裝 LogMiner數據庫的字符集和被分析數據庫的 字符集相同。

    7.  源數據庫(Source Database)平台必須和分析數據庫(Mining Database)平台一樣

    6.2 安裝LogMiner

    要安裝LogMiner工具,必須首先要運行下面這樣兩個腳本:

    l. $ORACLE_HOME/rdbms/admin/dbmslm.sql

    2. $ORACLE_HOME/rdbms/admin/dbmslmd.sql

    這兩個腳本必須均以SYS用戶身份運行。其中第一個腳本用來創建DBMS_ LOGMNR包,該包用來分析日志文件. 第二個腳本用來創建DBMS_ LOGMNR_D包,該包用來創建數據字典文件。

    6.3 基本對象

    Source Database:日志所屬的數據庫

    Mining Database:執行 LogMiner操作要使用的數據庫,相同硬件平台,相同字符集,版本不低於Source Database

    LogMiner 字典:將內部對象ID號和數據類型轉換為對象名和外部數據格式,在SourceDatabase 上生成,有三種方式:

    1.  使用源數據庫數據字典//  表結構無變化    S-DB 必須 OPEN,只能跟蹤DML不能為DDL SQL> exec DBMS_ LOGMNR.START_ LOGMNR(OPTIONS=>DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG );

    2.  摘取LogMiner字典到重做日志// Source-DB 必須 OPEN,  Archivelog模式SQL> exec DBMS_ LOGMNR_D.BUILD( OPTIONS=>DBMS_LOGMNR_D.STORE_IN_REDO_LOGS );

    3.  摘取 LogMiner字典到字典文件

    配置字典文件所在目錄:    靜態參數: UTL_FILE_DIR

    建立字典文件:

    SQL> exec dbms_logmnr_d.build(

    dictionary_filename => 'logminer.dat',

    dictionary_location => 'F:\0_WorkSpace\1_Database\1_Oracle\Log_Miner' );

    SQL> exec dbms_logmnr_d.build('dict.ora', '/xxx',

    OPTIONS=>DBMS_LOGMNR_D.STORE_IN_FLAT_FILE);

    與LogMiner 相關的數據字典:

    v$loghist                                         顯示歷史日志文件的一些信息

    v$logmnr_dictionary                   因 logmnr可以有多個字典文件,顯示字典文件信息

    v$logmnr_parameters                 顯示 logmnr 的參數 v$logmnr_logs 顯示用於分析的日志列表信息

    v$logmnr_contents       LogMiner 結果

[NextPage]

    6.4 使用LogMiner 進行分析

    6.4.1  設定用於LogMiner分析的日志文件存放的位置

    設置  UTL_FILE_DIR,需要重啟數據庫。

    設置  utl_file_dir=*        表示你能操作任何目錄

    在 initsid.ora 文件中加入 utl_file_dir參數或者:

    SQL> alter system set utl_file_dir='d:' scope=spfile;

    SQL> shutdown immediate

    SQL> starup

    6.4.2  生成數據字典文件

    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指的是放於存放位置的字典文件的名字,名字可以任意取。

    6.4.3  建立日志分析表

    建立日志分析表數據庫必須在 mount或 nomount 狀態建立日志分析表,使用 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 用於移出用於分析的日志文件

    6.4.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 /

    可以用以下方法查詢分析的日志文件包含的 scn 范圍和日期范圍:

    SQL> select low_time,high_time,low_scn,next_scn from v$logmnr_logs;

    6.4.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.4.6  查看日志分析的結果

    查看DML操作:

    SELECT operation, sql_redo, sql_undo

    FROMV$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 指的是用於取消的相反的操作。

    查看DDL操作:

    SELECT timstamp, sql_redo    FROM v$logmnr_contents

    WHERE upper(sql_redo) like '%TRUNCATE%';

    6.4.7結束LogMiner的分析

    SQL>BEGIN

    2           dbms_logmnr.end_logmnr();

    3      end;

    4 /

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