Oracle 10g Logminer

    LogMiner提供了一個處理重作日誌文件並將其內容翻譯成表明對數據庫的邏輯操做的SQL語句的過程。LogMiner運行在Oracle版本8.1或者更高版本中。 一,如何使用Logminer:   先要安裝logminer的兩個包;以SYS用戶運行下面兩個腳本,其中第一個腳本dbmslm.sql用來建立DBMS_LOGMNR包,該包用來分析日誌文件。第二個腳本dbmslmd.sql用來建立DBMS_LOGMNR_D包,該包用來建立數據字典文件。 D:\oracle\product\10.2.0\db_1\RDBMS\ADMIN>sqlplus /nolog SQL*Plus: Release 10.2.0.4.0 - Production on星期五4月10 17:49:02 2009 Copyright (c) 1982, 2007, Oracle. All Rights Reserved. SQL> conn sys/oracle as sysdba 已鏈接。 SQL> SQL> @dbmslm.sql 程序包已建立。 受權成功。 SQL> SQL> @dbmslmd.sql 程序包已建立。 二,建立數據字典文件    數據字典文件是一個文本文件,使用包DBMS_LOGMNR_D來建立,若是咱們要分析的數據庫中的表有變化(好比表結構有變化等),影響到庫的數據字典也發生變化。另一種狀況是在分析另一個數據庫文件的重作日誌時,也必需要從新生成一遍被分析數據庫的數據字典文件。 首先須要修改參數UTL_FILE_DIR ,該參數值爲服務器中放置數據字典文件的目錄,10g中咱們經過動態修改參數的方式來修改,而後從新啓動數據庫生效。其中logs_utl_file目錄先期創建好。 SQL> alter system set UTL_FILE_DIR='/opt/oradata/logs_utl_file' scope=spfile;  SQL> shutdown immediate 數據庫已經關閉。 已經卸載數據庫。 ORACLE例程已經關閉。 SQL> SQL> startup ORACLE例程已經啓動。 Total System Global Area 167772160 bytes Fixed Size                 1295608 bytes Variable Size            125831944 bytes Database Buffers          33554432 bytes Redo Buffers               7090176 bytes 數據庫裝載完畢。 數據庫已經打開。 SQL> SQL> show parameter UTL_FILE NAME                                TYPE ------------------------------------ ------------- VALUE ------------------------------ utl_file_dir                        string /opt/oradata/logs_utl_file SQL> 而後建立數據字典文件: BEGIN dbms_logmnr_d.build( dictionary_filename => ' logminer_dict.ora', dictionary_location => ' /opt/oradata/logs_utl_file'); END; / OK ,能夠看到在logs_ult_file中已經生成了logminer_dict.ora數據字典文件。數據字典文件是能夠打開的文本文件。有興趣能夠打開看看。 建立數據字典是讓logminer引用實際到內部數據字典中的部分是使用對象的名稱,而不是系統內部的16進制的ID. 三,建立要分析的日誌文件(在線日誌或歸檔日誌)的列表 (1)分析在線的重作日誌 A。創建列表 SQL> execute dbms_logmnr.add_logfile(LogFileName => '/opt/oradata/stream1/redo01.log', options => dbms_logmnr.new); PL/SQL過程已成功完成。 B。添加其餘日至文件到列表 SQL> execute dbms_logmnr.add_logfile(LogFileName => '/opt/oradata/stream1/redo02.log', options => dbms_logmnr.addfile); PL/SQL過程已成功完成。   SQL> execute dbms_logmnr.add_logfile(LogFileName => '/opt/oradata/stream1/redo03.log', options => dbms_logmnr.addfile); PL/SQL過程已成功完成。 (2)分析歸檔的重作日誌 A。創建列表 SQL> execute dbms_logmnr.add_logfile(LogFileName => '/u01/app/oracle/arch_log/1_20_765410122.dbf', options=>dbms_logmnr.new); PL/SQL過程已成功完成。 B。添加其餘日誌文件到列表 SQL> execute dbms_logmnr.add_logfile(LogFileName => '/u01/app/oracle/arch_log/1_21_765410122.dbf', options=>dbms_logmnr.addfile); PL/SQL過程已成功完成。 若是你以爲不須要分析已經在列表中的在線或歸檔日誌,能夠經過removefile命令刪除: SQL> execute dbms_logmnr.add_logfile(LogFileName => '/u01/app/oracle/arch_log/1_21_765410122.dbf', options=>dbms_logmnr.removefile); PL/SQL過程已成功完成。 四,使用Logminer進行日誌分析  無限制條件: SQL> execute dbms_logmnr.start_logmnr(DictFileName => /opt/oradata/logs_utl_file/logminer_dict.ora); PL/SQL過程已成功完成。 有限制條件: 經過對過程DBMS_LOGMNR.START_LOGMNR中的時間或者SCN參數的設置,能夠縮小分析日誌文件的範圍: 如咱們僅僅分析2009年2月23日到2005年7月26日的日誌: SQL> execute dbms_logmnr.start_logmnr( DictFileName => '/opt/oradata/logs_utl_file/logminer_dict.ora', StartTime => to_date('2009-2-23 00:00:00','YYYY-MM-DD HH24:MI:SS') EndTime => to_date(''2009-2-26 23:59:59','YYYY-MM-DD HH24:MI:SS ')); 相關的參數以下: 參數參數類型默認值含義 StartScn數字型0分析重做日誌中SCN≥StartScn日誌文件部分 EndScn數字型0分析重做日誌中SCN≤EndScn日誌文件部分 StartTime日期型1998-01-01分析重做日誌中時間戳≥StartTime的日誌文件部分 EndTime日期型2988-01-01分析重做日誌中時間戳≤EndTime的日誌文件部分 DictFileName字符型字典文件該文件包含一個數據庫目錄的快照。 使用該文件可使獲得的分析結果是能夠理解的文本形式, 而非系統內部的16進制 Options BINARY_INTEGER 0系統調試參數,實際不多使用   五,獲得分析結果: 到如今爲止,咱們已經分析獲得了重做日誌文件中的內容。動態性能視圖v$logmnr_contents包含LogMiner分析獲得的全部的信息。 SELECT sql_redo FROM v$logmnr_contents; 若是咱們僅僅想知道某個用戶對於某張表的操做,能夠經過下面的SQL查詢獲得,該查詢能夠獲得用戶TONY對錶R_WIP_TST所做的一切工做。 SQL>; SELECT sql_redo FROM v$logmnr_contents WHERE username='SCOTT' AND TABLE_NAME='emp';  須要強調一點的是,視圖v$logmnr_contents中的分析結果僅在咱們運行過程'dbms_logmrn.start_logmnr' 這個會話的生命期中存在(若是執行了DBMS_LOGMNR.END_LOGMNR分析結果將消失)。這是由於全部的LogMiner存儲都在PGA內存中,全部其餘的進程是看不到它的,同時隨着進程的結束,分析結果也隨之消失。 若是須要,能夠經過removefile命令刪除日誌分析文件。 SQL> execute dbms_logmnr.add_logfile(LogFileName => '/u01/app/oracle/arch_log/1_21_765410122.dbf', ptions=>dbms_logmnr.removefile); 六,使用DBMS_LOGMNR.END_LOGMNR結束日誌分析過程,釋放內存。 最後,使用過程DBMS_LOGMNR.END_LOGMNR終止日誌分析事務,此時PGA內存區域被清除,分析結果也隨之再也不存在。 SQL> execute dbms_logmnr.end_logmnr;
相關文章
相關標籤/搜索