LogMiner工具的主要用途有:sql
(1)跟蹤數據庫的變化:能夠離線的跟蹤數據庫的變化,而不會影響在線系統的性能。
(2)回退數據庫的變化:回退特定的變化數據,減小point-in-time recovery的執行。
(3)優化和擴容計劃:可經過分析日誌文件中的數據以分析數據增加模式。
安裝LogMiner工具,這兩個腳本必須均以SYS用戶身份運行
@$ORACLE_HOME/rdbms/admin/dbmslmd.sql
用來建立DBMS_LOGMNR_D包建立數據字典文件,用於提取數據字典信息到外部平面文件或者是聯機日誌中
@$ORACLE_HOME/rdbms/admin/dbmslm.sql
用來建立DBMS_LOGMNR包
grant execute on dbms_logmnr to public;
在10G以前,logmnr使用的臨時表v$logmnr_contents使用的是system表空間,在10g後使用的是sysaux表空間,能夠修改表空間:
exec sys.dbms_logmnr_d.set_tablespace('USERS');
有三種方法能獲得數據字典的方法:
1、字典提取到一個平面數據字典文件(DBMS_LOGMNR_D.STORE_IN_FLAT_FILE),9i之後不提倡使用
二、
據字典提取到重作日誌文件(DBMS_LOGMNR_D.STORE_IN_REDO_LOGS)
3、當前的數據庫的聯機數據字典(DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG),只能分析當前數據庫的重作日誌文件
使用補充日誌,將數據字典提取到重作日誌文件要用到:
Enable Supplemental Logging
Database-Level Supplemental Logging
Minimal Supplemental Logging
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
Database-Level Identification Key Logging
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (FOREIGN KEY) COLUMNS;
Disabling Database-Level Supplemental Logging
disable database-level supplemental logging:
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;
ALTER DATABASE DROP SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
ALTER DATABASE DROP SUPPLEMENTAL LOG DATA;
disable all database supplemental logging:
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;
ALTER DATABASE DROP SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
ALTER DATABASE DROP SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;
ALTER DATABASE DROP SUPPLEMENTAL LOG DATA;
Table-Level Supplemental Logging
Table-Level Identification Key Logging
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
ALTER TABLE HR.EMPLOYEES ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
ALTER TABLE HR.EMPLOYEES ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
ALTER TABLE HR.EMPLOYEES ADD SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;
Table-Level User-Defined Supplemental Log Groups
ALTER TABLE HR.EMPLOYEES ADD SUPPLEMENTAL LOG GROUP emp_parttime(EMPLOYEE_ID, LAST_NAME,DEPARTMENT_ID) ALWAYS;
ALTER TABLE HR.EMPLOYEES ADD SUPPLEMENTAL LOG GROUP emp_fulltime(EMPLOYEE_ID, LAST_NAME,DEPARTMENT_ID);
ALTER TABLE HR.EMPLOYEES ADD SUPPLEMENTAL LOG GROUP emp_parttime(DEPARTMENT_ID NO LOG, EMPLOYEE_ID);
1、在初始化參數文件中設置參數utl_file_dir,使用平面數據字典文件方法須要用到這個參數
2、提取數據字典
1)提取數據字典到平面數據文件
Execute dbms_logmnr_d.build('平面數據文件名','路徑名’,options=>dbms_logmnr_d.store_in_flat_file);
2)提取數據字典到重作日誌文件
Alter database add dupplemental log data;
Execute dbms_logmnr_d.build(options=>dbms_logmnr_d.store_in_redo_logs);
3)使用當前數據庫的聯機數據字典
Execute dbms_logmnr_d.build(options=>dbms_logmnr_d.dict_from_online_catalog);
3、
添加須要監視的日誌文件
1)
建立logminer要分析的日誌文件列表
Execute dbms_logmnr.add_logfile(logfilename=>'******',options=>dbms_logmnr.new);
2)
添加其餘日誌文件到列表
Execute dbms_logmnr.add_logfile(logfilename=>'******',options=>dbms_logmnr.addfile);
3)
從要分析的日誌列表中刪除日誌
Execute dbms_logmnr.add_logfile(logfilename=>'*****',options=>dbms_logmnr.removefile);
4、
啓動logminer會話,進行日誌分析
1)
無限制條件分析
Execute dbms_logmnr.start_logmnr(dictfilename=>'******');
------指定平面文件名
Execute dbms_logmnr.start_logmnr(optioons=>dbms_logmnr.dict_from_online_catalog+
dbms_logmnr.committed_data_only);
----- committed_data_only 標識咱們只提取已提交的事務
Execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);
------Logminer將使用聯機數據字典
Execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_redo_logs);
------Logminer將在重作日誌文件中查找字典數據
Execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.skip_curruption);
------忽略redo日誌中的全部錯誤
Execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.ddl_dict_tracking);
------用來跟蹤ddl語句,默認是關閉的!當使用online catalog時,不能使用!
2)
有限制條件分析
①
使用平面數據字典文件
Execute dbms_logmnr.start_logmnr(dictfilename=>'*******',starttime=>'*****',
Endtime=>'*******');
Execute dbms_logmnr.start_logmnr(dictfilename=>'*******',starttime=>'*****',
Endtime=>'*******',options=>dbms_logmnr.continuous_mine);
Execute dbms_logmnr.start_logmnr(dictfilename=>'*******',startscn=>*****,
endscn=>*****);
②
使用重作日誌
Execute dbms_logmnr.start_logmnr(startscn=>******,endscn=*******,options=>
dbms_logmnr.dict_form_redo_logs);
③
使用聯機數據字典
Execute dbms_logmnr.start_logmnr(startscn=>******,endscn=>******,options=>
dbms_logmnr.dict_from_online_catalog+dbms_logmnr.continuous_mine);
5、
查詢v$logmnr_contents
6、
結束logminer會話,釋放全部資源和清除PGA
EXECUTE DBMS_LOGMNR.END_LOGMNR;
7、
相關的數據字典
v$logmnr_contents
v$logmnr_logs
v$logmnr_dictionary
v$logmnr_parameters
v$lolist
1)LogMiner生成行級sql,並非實際的語句
2)全部信息都在PGA中,會話結束,信息丟失,能夠用create table as select * from v$logmnr_contents保存信息。
3)不支持下面的數據結構
簡單的和嵌套的抽象數據結構
嵌套表和varry
索引組織表
一個帶有族建的create table as select
4)LogMiner必須使用被分析數據庫實例產生的字典文件,而不是安裝LogMiner的數據庫產生的字典文件,另外必須保證安裝LogMiner數據庫的字符集和被分析數據庫的字符集相同。5)被分析數據庫平臺必須和當前LogMiner所在數據庫平臺同樣。
6)LogMiner日誌分析工具僅可以分析Oracle 8之後的產品。