logmnr是用於分析日志的工具,主要有以下幾個用途:
1. 查明數據庫的改變登記:能夠用Logmnr來分析這些事務,看看究竟發生了些什么事情
2. 找回丟失的數據,當不能利用flashback時候,能夠利用Logmnr工具來找回數據,這個時候,只必需有歸檔日志即可.
logmnr工具包含的過程與視圖
dbms_logmnr_d包包含了:
(1)add_logfile:用來增加/剔除用於分析的日志文件.
(2)start_logmnr:用來開啟日志分析,而且在9i/10g中,能夠開啟許多不同的分析選項.
(3)end_logmnr:用來終止分析會話,它將回收LogMiner所挪借的內存
與LogMiner相關的數據字典:
v$logmnr_dictionary:LogMiner可能利用的數據字典消息.
v$logmnr_parameters:目前LogMiner所設定的參數消息.
v$logmnr_logs:目前用於分析的日志列表.
v$logmnr_contents:日志分析收獲.
使用示例1:
SQL> exec sys.dbms_logmnr.add_logfile(LogFileName=>'c:\oradata\jssweb\arc\20120911_35.arc',options=>dbms_logmnr.new);
--SQL> exec sys.dbms_logmnr.add_logfile(LogFileName=>'c:\oradata\jssweb\arc\20120911_36.arc',options=>dbms_logmnr.addfile);
--開啟日志分析
--DBMS_LOGMNR_D.STORE_IN_FLAT_FILE:將數據字典提取到一個平面數據字典文件
--DBMS_LOGMNR_D.STORE_IN_REDO_LOGS:將數據字典提取到重做日志文件
--DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG:使用當前的數據庫的聯機數據字典(只能分析當前數據庫的重做日志文件,此時就不需要平面字典文件)
SQL> exec sys.dbms_logmnr.start_logmnr(options=>sys.dbms_logmnr.dict_from_online_catalog);
--查看分析結果
SQL> select t.scn,t.timestamp,t.seg_owner,t.operation from v$logmnr_contents t where t.seg_name='MYTESTTAB';
--釋放內存
SQL> exec dbms_logmnr.end_logmnr;
使用示例2:
1). 修改初始化參數
SQL> alter system set utl_file_dir='C:\oracle\logmnr\' SCOPE=SPFILE;
2). 重啟數據庫
3). 提取數據字典文件
SQL> execute dbms_logmnr_d.build('logmnr_dict.ora','c:\oracle\logmnr\',options=>dbms_logmnr_d.store_in_flat_file);
4). 指定LogMiner要分析的重做日志文件
SQL> EXECUTE DBMS_LOGMNR.ADD_LOGFILE('C:\oradata\orcl\REDO01.LOG',options=>dbms_logmnr.NEW);
SQL> EXECUTE DBMS_LOGMNR.ADD_LOGFILE('C:\oradata\orcl\REDO02.LOG',options=>dbms_logmnr.ADDFILE);
SQL> EXECUTE DBMS_LOGMNR.ADD_LOGFILE('C:\oradata\orcl\REDO03.LOG',options=>dbms_logmnr.ADDFILE);
5). 啟動LogMiner會話
--options=>dbms_logmnr.NO_ROWID_IN_STMT 取消"ROWID="的內容
--dbms_logmnr.DICT_FROM_ONLINE_CATALOG只分析當前數據庫的重做日志文件
--options=>dbms_logmnr.NO_ROWID_IN_STMT+dbms_logmnr.DICT_FROM_ONLINE_CATALOG
SQL> execute dbms_logmnr.start_logmnr(dictfilename=>'c:\oracle\logmnr\logmnr_dict.ora');
6). 查看結果
SQL> SELECT * FROM V$LOGMNR_LOGFILE;
SQL> select t.scn,t.timestamp,t.seg_owner,t.operation from v$logmnr_contents t where t.seg_name='MYTESTTAB';
7). 結束LogMiner會話
SQL> EXECUTE DBMS_LOGMNR.END_LOGMNR;