--- layout: post title: LogMiner Introduction category : Oracle tags : [Oracle, Database, DBA] --- ## LogMiner介绍 OracleLogMiner是 Oracle 公司从产品 8i 以后提供的一个实际非常有用的分析工具,使用该工具可以轻松获得 Oracle 重作日志文件(归档日志文件)中的具体内容,特别是,该工具可以分析出所有对于数据库操作的 DML(insert、update、delete 等)语句,9i 后可以分析 DDL 语句,另外还可分析得到一些必要的回滚 SQL 语句。其中一个最重要的用途就是不用全部恢复数据库就可以恢复数据库的某个变化。该工具特别适用于调试、审计或者回退某个特定的事务。 Log Miner工具即可以用来分析在线,也可以用来分析离线日志文件,即可以分析本身自己数据库的重作日志文件,也可以用来分析其他数据库的重作日志文件。 总的说来,LogMiner 工具的主要用途有: * 跟踪数据库的变化,可以离线的跟踪数据库的变化,而不会影响在线系统的性能。 * 回退数据库的变化,回退特定的变化数据,减少 point-in-time recovery 的执行。 * 优化和扩容计划,可通过分析日志文件中的数据以分析数据增长模式。 * 确定数据库的逻辑损坏时间,准确定位操作执行的时间和SCN(基于时间和SCN 的恢复) * 确定事务级要执行的精细逻辑恢复操作(取得相应的 UNDO 操作) * 执行后续审计(DML、DDL、DCL、执行时间、用户) 需要注意的是,在没有启动supplemental log的情况下,Mining出来的`SQL_REDO`和`SQL_UNDO`数据是没有经过数据字典进行转换的(使用Oracle的内部ID标示),可读性很差。一般生产环境不会启动supplemental log。所以用Logminer 方法来做数据恢复不是一种常用的方法。 对于DML操作,还是有一定的可行性。 ## 安装LogMiner 要安装 LogMiner 工具,必须首先要运行下面这样两个脚本: * `$ORACLE_HOME/rdbms/admin/dbmslm.sql` 创建`DBMS_LOGMNR`包,分析日志 * `$ORACLE_HOME/rdbms/admin/dbmslmd.sql` 创建`DBMS_LOGMNR_D`包,创建数据字典 注:这两个脚本必须均以SYS用户身份运行。 ## LogMiner使用步骤 ### 设置日志文件存放位置 因`UTL_FILE_DIR`为静态参数,设置后,需要重启数据库才能生效。 SQL> alter system set utl_file_dir='/dba' scope=spfile; ### 弹回数据库 SQL> shutdown immediate; SQL> startup ### 建立LogMiner分析数据字典 SQL> exec dbms_logmnr_d.build(dictionary_filename=>'logmnr_dict.dat',dictionary_location=>'/dba'); ### 添加用于分析的日志文件 SQL> exec dbms_logmnr.add_logfile(options=>dbms_logmnr.new,logfilename=>'/db/oracle/arch/1_9_808334794.arc'); ### 执行LogMiner分析 SQL> exec dbms_logmnr.start_logmnr(dictfilename=>'/dba/logmnr_dict.dat'); ### 查看分析结果 SQL> select operation,sql_redo,sql_undo from v$logmnr_contents; ... ... ### 结束分析 SQL> exec dbms_logmnr.end_logmnr(); ### 保存分析结果 因`v$logmnr_content`只对执行过`dbms_logmnr`程序包的会话有效,这里可以通过创建表的方式保存结果,以便长期查看和分析。这里需要注意以下两点:统一标准时间格式,复制分析结构数据时不要成日志记录(无需再分析)。 修改时间格式: SQL>alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'; 创建表结构: SQL> create table hn_logmnr nologging as select * from v$logmnr_contents where 1=2; 使用APPEND直接插入数据: SQL> insert /*+append */ into hn_logmnr select * from v$logmnr_contents; 提交事务: SQL> commit; ## 主要视图 --历史日志文件信息 select * from v$loghist; --LogMnr字典文件信息 select * from v$logmnr_dictionary; --LogMnr参数信息 select * from v$logmnr_parameters; --显示用于分析的日志列表 select * from v$logmnr_logs; --LogMnr分析结果 仅对执行分析的会话有效 select * from v$logmnr_contents; ## 延伸阅读 * [Oracle Redo Log机制小结](http://blog.csdn.net/tianlesoftware/article/details/7346212) * [LogMiner说明](http://blog.csdn.net/tianlesoftware/article/details/5604497) * [LogMiner做数据恢复 说明示例](http://blog.csdn.net/tianlesoftware/article/details/6554674)