您好,登錄后才能下訂單哦!
Oracle LogMiner 是Oracle公司從產品8i以后提供的一個實際非常有用的分析工具,使用該工具可以輕松獲得Oracle 在線/歸檔日志文件中的具體內容,特別是該工具可以分析出所有對于數據庫操作的DML和DDL語句。該工具特別適用于調試、審計或者回退某個特定的事務。
LogMiner分析工具實際上是由一組PL/SQL包和一些動態視圖(Oracle8i內置包的一部分)組成,它作為Oracle數據庫的一部分來發布是8i產品提供的一個完全免費的工具。但該工具和其他Oracle內建工具相比使用起來顯得有些復雜,主要原因是該工具沒有提供任何的圖形用戶界面(GUI)。
1、安裝LogMiner
在使用LogMiner之前需要確認Oracle是否帶有進行LogMiner分析包,一般來說Windows操作系統Oracle10g以上都默認包含。如果不能確認,可以DBA身份登錄系統,查看系統中是否存在運行LogMiner所需要的dbms_logmnr、dbms_logmnr_d包,如果沒有需要安裝LogMiner工具,必須首先要運行下面這樣兩個腳本:
a.$ORACLE_HOME/rdbms/admin/dbmslm.sql
b.$ORACLE_HOME/rdbms/admin/dbmslmd.sql
這兩個腳本必須均以DBA用戶身份運行。其中第一個腳本用來創建DBMS_LOGMNR包,該包用來分析日志文件。第二個腳本用來創建DBMS_LOGMNR_D包,該包用來創建數據字典文件。
2、修改數據庫參數
--數據庫版本 sys@ORCL>select * from v$version; BANNER ----------------------------------------------------------- CORE 11.2.0.4.0 Production TNS for Linux: Version 11.2.0.4.0 - Production NLSRTL Version 11.2.0.4.0 - Production --為數據庫添加最小附加日志 sys@ORCL>alter database add supplemental log data; Database altered. sys@ORCL>select supplemental_log_data_min from v$database; SUPPLEMENTAL_LOG_DATA_MI ------------------------ YES --設置utl_file_dir參數 sys@ORCL>alter system set utl_file_dir='/home/oracle/logminer' scope=spfile; System altered. --重啟數據庫 sys@ORCL>shutdown immediate sys@ORCL>startup sys@ORCL>show parameter utl_file_dir NAME TYPE VALUE ------------------------------------ --------------------------------- ------------------------------ utl_file_dir string /home/oracle/logminer
3、準備測試數據
sys@ORCL>conn zx/zx Connected. zx@ORCL>create table log_miner (id number,name varchar2(10)); Table created. zx@ORCL>insert into log_miner values(1,'zx'); 1 row created. zx@ORCL>insert into log_miner values(1,'lx'); 1 row created. zx@ORCL>insert into log_miner values(1,'xx'); 1 row created. zx@ORCL>commit; Commit complete.
4、創建數據字典
zx@ORCL>conn / as sysdba Connected. sys@ORCL>desc dbms_logmnr_d PROCEDURE BUILD Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- DICTIONARY_FILENAME VARCHAR2 IN DEFAULT DICTIONARY_LOCATION VARCHAR2 IN DEFAULT OPTIONS NUMBER IN DEFAULT PROCEDURE SET_TABLESPACE Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- NEW_TABLESPACE VARCHAR2 IN sys@ORCL>exec dbms_logmnr_d.build(DICTIONARY_FILENAME=>'dictionary.ora',DICTIONARY_LOCATION=>'/home/oracle/logminer'); LogMnr Dictionary Procedure started LogMnr Dictionary File Opened Procedure executed successfully - LogMnr Dictionary Created PL/SQL procedure successfully completed. sys@ORCL>!ls -l /home/oracle/logminer/dictionary.ora -rw-r--r-- 1 oracle oinstall 41483316 Nov 11 21:08 /home/oracle/logminer/dictionary.ora
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來創建。如果我們要分析的數據庫中的表有變化,影響到庫的數據字典也發生變化,這時就需要重新創建該字典文件。另外一種情況是在分析另外一個數據庫文件的重作日志時,也必須要重新生成一遍被分析數據庫的數據字典文件。
5、確認當前處理聯機狀態的redo日志
sys@ORCL>select group#,status from v$log; GROUP# STATUS ---------- ------------------------------------------------ 1 INACTIVE 2 CURRENT 3 INACTIVE sys@ORCL>select group#,member from v$logfile; GROUP# MEMBER ---------- ---------------------------------------------------------------------------------------------------- 3 /u02/app/oracle/oradata/orcl/redo03.log 2 /u02/app/oracle/oradata/orcl/redo02.log 1 /u02/app/oracle/oradata/orcl/redo01.log
可以看出redo02處于current狀態
6、加入需要分析的日志
--第一個日志文件使用dbms_logmnr.new sys@ORCL>exec dbms_logmnr.add_logfile(LOGFILENAME=>'/u02/app/oracle/oradata/orcl/redo02.log',OPTIONS=>dbms_logmnr.new); PL/SQL procedure successfully completed. --如果需要加入其他的日志使用如下語句 exec dbms_logmnr.add_logfile(LOGFILENAME=>'/u02/app/oracle/oradata/orcl/redo03.log',OPTIONS=>dbms_logmnr.addfile);
7、使用LogMiner進行分析
sys@ORCL>exec dbms_logmnr.start_logmnr(DICTFILENAME=>'/home/oracle/logminer/dictionary.ora'); PL/SQL procedure successfully completed. sys@ORCL>col seg_name for a15 sys@ORCL>col seg_owner for a15 sys@ORCL>col operation for a20 sys@ORCL>col sql_redo for a180 sys@ORCL>set linesize 200 sys@ORCL>select seg_owner,seg_name,operation,sql_redo from v$logmnr_contents where seg_owner='ZX' and seg_name='LOG_MINER'; SEG_OWNER SEG_NAME OPERATION SQL_REDO --------------- --------------- -------------------- -------------------------------------------------------------------------------- ZX LOG_MINER DDL create table log_miner (id number,name varchar2(10)); ZX LOG_MINER INSERT insert into "ZX"."LOG_MINER"("ID","NAME") values ('1','zx'); ZX LOG_MINER INSERT insert into "ZX"."LOG_MINER"("ID","NAME") values ('1','lx'); ZX LOG_MINER INSERT insert into "ZX"."LOG_MINER"("ID","NAME") values ('1','xx');
以上為分析在線redo日志的過程,分析歸檔日志的步驟同樣,只是在添加日志文件的時候把在線redo日志換為歸檔日志即可。歸檔日志也可以傳輸到其他數據庫服務器上進行數據分析,但分析時需要使用源庫的字典文件。
LogMiner使用注意事項:
源庫與Mining數據庫必須運行在同樣的硬件平臺上,windows的不可以傳到Linux上進行分析
Mining數據庫的版本大于等于源庫的數據庫版本
Mining數據庫的字符集需要與源庫一致或是源庫的超集
參考文檔:http://www.cnblogs.com/shishanyuan/p/3140440.html
官方文檔:http://docs.oracle.com/cd/E11882_01/server.112/e22490/logminer.htm#SUTIL1557
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。