通過SQL的介面來查詢redo日誌的工具。
用途:
1, 使用者在誤刪除資料後,可以通過LogMiner來恢複;雖然也可以通過RMAN來恢複,但需要有之前的備份,要先轉出再query,會比較麻煩;LogMiner比較簡單;
2,可以進行後審計功能,LOG 日誌中包含跟蹤任何DML和DDL的的全部資訊,可以知道執行的順序和有誰來執行;
步驟
1.資料庫的supplemental的狀態調整
2.建立資料庫層級的觸發器,用以記錄客戶的登入資訊
3.安裝logminer
4.建立logminer資料字典(如果沒有建立資料自己,而是線上分析,看見的不是原始sql,而是
被Oracle格式化的sql語句)
5.添加需要分析的日誌
6.分析日誌
7.查看結果(v$logmnr_contents)
一,我們需要查看v$logmnr_contents中的用戶端的資訊,看是否開啟支援logminer。
select name,supplemental_log_data_min from v$database
我們就要設定 supplemental_log_data_min 為on
YES為開啟狀態,會記錄session_info,username等資訊
NO為關閉狀態,不會記錄sesion_info,username等資訊
開啟方式:
alter database add supplemental log data;
關閉方式
alter database drop supplemental log data;
此參數是記錄到控制檔案中的,如果重新建立了資料庫控制檔案,我們需要重新設定。
二,建立庫基本的觸發器:
SQL> create or replace trigger on_logon_tigger
2 after logon on database
3 begin
4 dbms_application_info.set_client_info(sys_context('userenv','ip_address'));
5 end;
6 /
現在,我們就可以在V$SESSION視圖的CLIENT_INFO列中看到新登入的用戶端IP地址了。那麼現在就可以在
session_info 中看用戶端的ip了
三,安裝logminer:
四、分析
exec dbms_logmnr.start_logmnr(dictfilename=>'C:\oracle\logs\dictionary.ora');
exec dbms_logmnr.start_logmnr;
例子:
select timestamp,commit_timestamp,table_space,session#,serial#,username,session_info,sql_redo,operation,table_name,seg_name,seg_owner
from v$logmnr_contents
where seg_owner=upper('scott)
and operation=upper('insert');
六、結束分析
SQL> execute dbms_logmnr.end_logmnr;
建議使用非SYSTEM TABLESPACE來存放LogMiner的資訊:
exec DBMS_LOGMNR_D.SET_TABLESPACE(’logmnrts$’);
1.logminer實際上是由兩個pl/sql內建包(dbms_logmnr和dbms_logmnr_d)和4個v$動態效能檢視組成的.
v$logmnr_logs
v$logmnr_contents
v$logmnr_parameters
安裝logminer首先要以sys管理員的身份運行這個pl/sql指令碼
sql> conn /as sysdba
sql> @/rdbms/admin/dbmslm.sql
sql> @/rdbms/admin/dbmslmd.sql
2. 修改參數 utl_file_dir參數
這個參數是靜態參數,修改後需要資料庫,才會起作用。
SQL> alter system set utl_file_dir='c:\logminerlog' scope=spfile;
系統已更改。
SQL> host mkdir c:\logminerlog
SQL> exec dbms_logmnr_d.build(dictionary_filename=>'logminer',dictionary_location=>'c:\logminerlog');
PL/SQL 過程已成功完成。
SQL> begin
2 dbms_logmnr_d.build(dictionary_filename=>'logminer',dictionary_location=>'c:\logminerlog');
3 end;
4 /
PL/SQL 過程已成功完成。
SQL> show parameter utl_file_dir
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
utl_file_dir string c:\logminerlog
SQL> exec dbms_logmnr_d.build(dictionary_filename=>'dictionary.ora',dictionary_location=>'c:\logminerlog');
PL/SQL 過程已成功完成。
SQL> exec dbms_logmnr.add_logfile(logfilename=>'D:\app\Gavin\oradata\orcl\redo03.log',options=>dbms_logmnr.new);
PL/SQL 過程已成功完成。
SQL> exec dbms_logmnr.add_logfile(logfilename=>'D:\app\Gavin\oradata\orcl\redo01.log',options=>dbms_logmnr.addfile);
PL/SQL 過程已成功完成。
為了減少視圖的資料量,加快分析的時間,可以把分析過的日誌從視圖中刪除
SQL> exec dbms_logmnr.add_logfile(logfilename=>'D:\app\Gavin\oradata\orcl\redo03.log',options=>dbms_logmnr.removefile);
PL/SQL 過程已成功完成。
SQL> exec dbms_logmnr.add_logfile(logfilename=>'D:\app\Gavin\oradata\orcl\redo01.log',options=>dbms_logmnr.removefile);
PL/SQL 過程已成功完成。