Oracle logminer是oracle从8i之后提供的一个非常有用的分析工具,使用该工具可以轻松获得oracle重做日志文件中的具体内容。该工具可以分析出所有对于数据库的DML语句,9i后可以分析DDL语句,另外还可以分析得到一些必要的回滚SQL语句。
其中一个最重要的用途就是不用全部恢复数据库就可以恢复数据库的某个变化。特别适用于调试、审计或者回退某个特定的事务。
1, 跟踪数据库的变化:可以离线的跟踪数据库的变化,而不会影响在线系统的性能。
2, 回退数据库的变化:回退特定的变化数据,减少point-in-timerecovery的执行。
3, 优化和扩容计划:可通过分析日志文件中的数据以分析数据增长模式。
4, 确定数据库的逻辑损坏时间:准确定位操作执行的时间和SCN
5, 确定事务级要执行的精细逻辑恢复操作――取得相应的undo操作
6, 执行后续审计 ―― dml , ddl, dcl, 执行时间、用户
1, Logminer可以帮助你确定在某段时间所发的各种DML,DDL操作的具体时间和SCN,它所依据的是归档日志文件及联机日志文件。
select scn,cscn,TIMESTAMP,COMMIT_TIMESTAMP,OPERATION,SQL_REDO,sql_undo from v$logmnr_contents;
2,8i只能用于分析DML操作,9i则可以分析DDL操作。
2, logminer不支持索引组织表、Long、LOB及集合类型。
3, Logminer不支持MTS的环境
4, Logminer必须使用被分析的数据库实例产生的字典文件,另外必须保证安装Logminer数据库的字符集和被分析数据库的字符集相同。
5, 源数据库平台必须和分析数据库平台一样。
以SYS用户身份登陆SQLPLUS,运行下面两个脚本
1,$ORACLE_HOME/rdbms/admin/dbmslm.sql(创建dbms_logmnr包)
2,$ORACLE_HOME/rdbms/admin/dbmslmd.sql(创建dbms_logmnr_d包)
设置UTL_FILE_DIR需要重启数据库。该参数的值是待分析的日志文件的存储位置,也可以设置未*表示你能操作任何目录。
在initsid.ora文件中加入utl_file_dir参数或者在sqlplus中执行命令。
SQL> alter system set utl_file_dir=* scope=spfile;
SQL> shutdown immediate;
SQL>startup
begin
dbms_logmnr_d.build(dictionary_filename => 'zhanglei_dict.dat',dictionary_location => 'D:');
end;
dictionary_location指的是Logminer数据字典文件存放的位置,它必须匹配utl_file_dir的设定。 Dictionary_filename指的是字典文件的名称,可以任意取。
建立日志分析表数据库必须在mount或nomount状态。
begin dbms_logmnr.add_logfile(options=>dbms_logmnr.new,logfilename=>'E:/ORACLE/ORADATA/ORADB/REDO01.LOG');
end;
其中的opeions有三种取值,
Dbms_logmnr.new 用于建立一个日志分析表
Dbms_logmnr.addfile 用于加入分析的日志文件;
Dbms_logmnr.removefile 用于移出日志文件。
可以用下述方法查询分析的日志包含的SCN范围和日期范围。
select low_time,high_time,low_scn,next_scn from v$logmnr_logs;
1 2009-1-7 9:45:07 2009-1-12 9:23:44 6266026 6300404
2 2009-1-12 9:23:44 2009-2-2 15:00:46 6300404 6672312
3 2009-2-2 15:00:46 1988-1-1 6672312 281474976710655
begin
dbms_logmnr.start_logmnr(dictfilename=>'d:/zhanglei_dict.dat',startTime => sysdate-1/24/6,endtime=>sysdate);
end;
上面的语句分析最近10分钟的操作日志,并把分析结果放到数据字典中以用于查询。
Select * from v$logmnr_contents
Begin
Dbms_logmnr.end_logmnr();
End;