如何使用logminer查看日誌內容

我們知道數據的任何操作都會記錄到redo日誌文件中,在8i以前我們是沒有辦法查看redo文件裏面的內容的,但在9i以後,Oracle推出了logminer,通過logminer分析我們可以很清楚查看Oracle所做的任何操作,比如我刪除一個表,在logminer中可以看到很詳細的操作記錄.
 
1.使用logminer需要運行如下兩個文件
$ORACLE_HOME/rdbms/admin/dbmslm.sql
$ORACLE_HOME/rdbms/admin/dbmslmd.sql
SQL> connect sys/sys as sysdba
Connected.
SQL> @/u01/app/oracle/product/10.2.0/db_1/rdbms/admin/dbmslm.sql
Package created.
SQL> @/u01/app/oracle/product/10.2.0/db_1/rdbms/admin/dbmslmd.sql
Package created.
 
2.修改初始化參數utl_file_dir,指定分析數據的存放處
SQL>alter system set utl_file_dir='/u01/logmine_dir' scope=spfile;
SQL>shutdown immediate
SQL>startup
 
3.創建數據字典文件
begin
sys.dbms_logmnr_d.build(dictionary_filename =>'mylogmine.ora',dictionary_location =>'/u01/logmine_dir',options>=>dbms_logmnr_d.store_in_flat_file);
end;
mylogmine.ora是給字典文件起的文件名(可任意),字典文件的作用是將Oralce內部處理使用的對象編碼和內部數據類型轉換爲可讀的對象名稱和類型.例如這個SQL
INSERT INTO HR.JOBS(JOB_ID, JOB_TITLE, MIN_SALARY, MAX_SALARY)  VALUES('IT_WT','Technical Writer', 4000, 11000);
若沒有創建數據字典文件的文件的話,logminer出來的記錄內容如下:
insert into "UNKNOWN"."OBJ# 45522"("COL 1","COL 2","COL 3","COL 4") values
(HEXTORAW('45465f4748'),HEXTORAW('546563686e6963616c20577269746572'),
HEXTORAW('c229'),HEXTORAW('c3020b'));
 
4.這個時候我們使用某個用戶登錄數據庫後刪除某個表
SQL>connect app_user/hxl
SQL>drop table tb_test;
SQL>conect / as sysdba
SQL>alter system switch logfile;
這個時候會產生一個歸檔日誌文件,剛纔刪除表的操作就在這個文件裏
 
5.分析歸檔日誌
創建列表
begin
  sys.dbms_logmnr.add_logfile(LogFileName => '/u01/arch_log/1_13_787769576.dbf',
                              Options     => dbms_logmnr.new);
end;
這裏的歸檔日誌文件1_13_787769576.dbf就是我們剛纔switch生成的日誌文件.
當然還可以添加其他歸檔日誌,看分析的需要,我們這裏只分析一個歸檔日誌文件.
添加其他歸檔日誌分析的過程如下:
begin
  dbms_logmnr.add_logfile(LogFileName => '/u01/arch_log/1_12_787769576.dbf',
                          Options     => dbms_logmnr.addfile);
end;
6.開始使用LogMiner進行日誌分析
 
分析整個日誌文件(沒有任何條件)
begin
  sys.dbms_logmnr.start_logmnr(DictFileName =>'/u01/logmine_dir/mylogmine.ora');
end;
 
若大概知道某個操作發生的時間,可以按照需要時間分析的過程如下:
begin
  sys.dbms_logmnr.start_logmnr(DictFileName =>'/u01/logmine_dir/mylogmine.ora',
                              startTime => to_date('2012-07-04 15:00:00','YYYY-MM-DD HH24:MI:SS'),
                              endTime => to_date('2012-07-04 16:00:00','YYYY-MM-DD HH24:MI:SS')
                              );
end;
我們這裏分析的是整個日誌文件,分析完成後,查看V$LOGMNR_CONTENTS試圖的內容就是我們剛纔分析得到的內容.注意V$LOGMNR_CONTENTS的內容是保留在PGA中的,查看這個試圖需要在跟執行分析的過程在一個session中,否則在另外開一個session是查看不到的,而且會報ORA-01306錯誤.
從V$LOGMNR_CONTENTS視圖中可以查看得到我們剛纔刪除表的操作:
SQL>select sql_redo from V$LOGMNR_CONTENTS
    where upper(sql_redo) like '%TB_TEST%'
SQL_REDO
-----------------------------------
ALTER TABLE "APP_USER"."TB_TEST" RENAME TO "BIN$w/uEl9lUoujgQAB/AQAW2w==$0" ;
"drop table tb_test AS ""BIN$w/uEl9lUoujgQAB/AQAW2w==$0""
;"
 
7.結束分析
begin
  sys.dbms_logmnr.end_logmnr;
end;
 
使用logminer的一些說明:
1.分析日誌所在的數據庫平臺必須跟產生日誌的數據庫平臺保持一致;
2.分析日誌所在的數據庫可以跟產生日誌的數據庫完全獨立,或者是兩者是同一個數據庫;
3.分析日誌所在的數據庫的版本比如高於產生日誌的數據庫的版本;
4.分析日誌所在的數據庫的字符集必須跟產生日誌的數據庫的字符集保持一致;
5.logminer數據字典文件必須在產生日誌的數據庫生成.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章