日志挖掘(LogMnr)
①在参数文件中设置utl_file_dir路径
②重启
③创建directory file使用execute dbms_logmnr_dbuild()
④添加日志文件使用dbms_logmnradd_logfile
或删除日志文件使用dbms_logmnrremovefile
⑤启动logmnr使用dbms_logmnrstart_logmnr
⑥查询使用V$logmnr_contents(sqlredo/sqlundo)
设置utl_file_dir目录
alter system set utl_file_dir=D:\app\Leo\utl_file_dir scope=spfile;
建立日志挖掘的数据字典
execute dbms_logmnr_dbuild(shwdictoraD:\app\Leo\utl_file_dir); //第二个参数要与参数utl_file_dir的设置完全匹配
无此包则需执行@d:\oracle\ora\rdbms\admin\dbmslmdsql;
创建分析的文件列表(可以是在线或归档日志)
execute dbms_logmnradd_logfile(D:\app\Leo\archivelog\ARC_dbms_logmnrnew);
execute dbms_logmnradd_logfile(D:\app\Leo\archivelog\ARC_dbms_logmnraddfile);
execute dbms_logmnradd_logfile(D:\app\Leo\archivelog\ARC_dbms_logmnraddfile);
optionnew创建一个新的日志列表addfile向列表中添加日志文件
remove_logfile删除
在视图v$logmnr_logs中可以看到添加的日志列表
select log_idfilename from v$logmnr_logs;
开始分析
execute dbms_logmnrstart_logmnr(dictfilename=>D:\app\Leo\utl_file_dir\shwdictora);
execute dbms_logmnrstart_logmnr(dictfilename=>d:\oracle\shwdictorastartscn=>xxxxxxendscn=>xxxxxstarttime=>to_date( ::yyyymmdd hh:mi:ss) endtime=>to_date( ::yyyymmdd hh:mi:ss));
没有建立数据字典使用dbms_logmnrdict_from_online_catalog选项参数则logminer期望在所指定的dbms_logmnradd_logfile或重做日志中找到数据字典
exec sysdbms_logmnrstart_logmnr(options=>sysdbms_logmnrdict_from_online_catalog);
查询分析内容
select to_char(timestampyyyymmdd hh:mi:ss) timesql_redo from v$logmnr_contents where seg_owner=SCOTT;
结束分析
execute dbms_logmnrend_logmnr;
部分日志归档不出的解决
①将数据库至于force logging模式
alter database force logging;
select force_logging from v$database;
②查看表是否处于归档模式
select table_namelogging from user_tables;
③查看数据库是否处于启用了补充日志(启动了则每条update写redo时会附加列值唯一信息)
SQL> select supplemental_log_data_pksupplemental_log_data_ui from v$database;
SUPPLEMENTAL_LOG_DATA_PK SUPPLEMENTAL_LOG_DATA_UI
NO NO
SQL> alter database add supplemental log data (primary keyunique index) columns;
Database altered
SQL> select supplemental_log_data_pksupplemental_log_data_ui from v$database;
SUPPLEMENTAL_LOG_DATA_PK SUPPLEMENTAL_LOG_DATA_UI
YES YES