LogMiner是個功能非常強大的工具,該工具分析任何Oracle 8及其以後版本產生的重作日誌文件,可以得到大量的關於數據庫活動的信息。其中一個最重要的用途就是不用全部恢復數據庫就可以恢復數據庫的某個變化。該工具還可用來監視或者審計用戶的活動,可以利用LogMiner工具察看誰曾經修改了那些數據以及這些數據在修改前的狀態。
LogMiner 工具即可以用來分析在線,也可以用來分析離線日誌文件,即可以分析本身自己數據庫的重作日誌文件,也可以用來分析其他數據庫的重作日誌文件。
1.LogMiner工具實際上是由兩個新的PL/SQL內建包((DBMS_LOGMNR 和 DBMS_ LOGMNR_D)和四個V$動態性能視圖(視圖是在利用過程DBMS_LOGMNR.START_LOGMNR啓動LogMiner時創建)組成.安裝 LogMiner,要執行以下兩個腳本:
SYS>@$ORACLE_HOME/rdbms/admin/dbmslm.sql;創建DBMS_LOGMNR包,該包用來分析日誌文件.
SYS>@$ORACLE_HOME/rdbms/admin/dbmslmd.sql; 創建DBMS_LOGMNR_D包,該包用來創建數據字典文件.
SYS>alter database add supermental log data;
2.如何使用LogMiner?
①創建數據字典.在使用LogMiner工具分析redo log文件之前,可以使用DBMS_LOGMNR_D 包將數據字典導出爲一個文本文件。該字典文件是可選的,否則LogMiner解釋出來的語句中關於數據字典中的部分(如表名、列名等)和數值都將是16進制的形式,我們是無法直接理解的。
首先要修改參數UTL_FILE_DIR,指定數據字典的存放路徑,必須重啓數據庫才能生效.
SYS>show parameter utl_file_dir;
root@star~# mkdir -p /u02/lm_log 創建多級目錄,將會被指定爲數據字典的存放路徑.
root@star~# chown -R oracle.oinstall /u02/lm_log 更改目錄所屬用戶和組.
root@star~# cd /u02
root@star~# ls -l 查看目錄的權限和歸屬.
SYS>alter system set UTL_FILE_DIR='/u02/lm_log' scope=spfile;
重新啓動數據庫,使新加的參數生效,然後創建數據字典文件:
SYS> sqlplus / as sysdba;
SYS> execute dbms_logmnr_d.build(
dictionary_filename => ' v863dict.ora',
dictionary_location => '/u02/lm_log');
②對要分析的日誌創建列表.Oracle的重作日誌分爲兩種,在線(online)和離線(offline)歸檔日誌文件.
A.分析在線重作日誌文件
㈠創建列表
SYS>execute dbms_logmnr.add_logfile(
LogFileName=>' /u02/lm_log/redo01.log',
Options=>dbms_logmnr.new);
㈡添加其它日誌文件到列表
SYS> execute dbms_logmnr.add_logfile(
LogFileName=>' /u02/lm_log/redo02.log',
Options=>dbms_logmnr.addfile);
㈢也可以從列表中移除日誌文件
SYS> execute dbms_logmnr.add_logfile(
LogFileName=>' /u02/lm_log/redo02.log',
Options=>dbms_logmnr.removefile);
B.分析離線日誌文件
㈠創建列表
SYS> execute dbms_logmnr.add_logfile(
LogFileName=>'/u02/lm_log/archive/arch01.001',
Options=>dbms_logmnr.new);
㈡添加其它日誌文件到列表
SYS> execute dbms_logmnr.add_logfile(
LogFileName=>'/u02/lm_log/archive/arch02.001',
Options=>dbms_logmnr.addfile);
③設置日誌分析的範圍
A.無限制條件,日誌分析沒有起始時間.
SYS>execute dbms_logmnr.start_logmnr(
DictFileName=>'/u02/lm_log/v863dict.ora');
B.有限制條件,指定日誌分析的起始時間.
SYS>execute dbms_logmnr.start_logmnr(
DictFileName => ' /u02/lm_log/v863dict.ora ',
StartTime => to_date('2012-7-18 00:00:00','YYYY-MM-DD HH24:MI:SS'),
EndTime => to_date(''2012-7-18 23:59:59','YYYY-MM-DD HH24:MI:SS '));
另外,通過設置起始SCN和截至SCN,也可以指定日誌分析的起始時間範圍.
SYS> execute dbms_logmnr.start_logmnr(
DictFileName => ' /u02/lm_log/v863dict.ora',
StartScn => 20,
EndScn => 50);
3.參數含義和相關視圖
StartScn 和EndScn 是數值型,代表日誌文件的序號.分析重作日誌中,文件的序號介於 StartScn 和EndScn 之間.
DictFileName 字符型(VARCHAR2) 字典文件,該文件包含一個數據庫目錄的快照。使用該文件的好處?使得到的分析結果是可理解的文本形式,而非系統內部的16進制.
StartTime 和EndTime 是日期型(Date) .分析重作日誌中,日誌文件的時間戳介於StartTime 和EndTime之間.
日誌分析的有關視圖:
V$logmnr_contents 顯示日誌分析的結果信息.
V$logmnr_dictionary 顯示日誌分析的多個字典文件.
V$logmnr_parameters 顯示lomnr的參數.logmnr_logs .
V$logmnr_logs 顯示日誌分析的日誌列表信息.
SYS> select sql_redo from v$logmnr_contents;
SYS> select * from V$logmnr_logs;