LogMiner
前言
众所周知,所有对用户数据和数据字典的改变都记录在Oracle的Redo Log中,因此,Redo Log包含了所有进行恢复操作所需要的信息。但是,原始的Redo Log文件无法看懂,所以,Oracle从8i以后提供了一个非常有用的分析工具,称为LogMiner。使用该工具可以轻松获得Redo Log文件(包含归档日志文件)中的具体内容。特别是该工具可以分析出所有对于数据库的DML操作(INSERT、UPDATE、DELETE等)语句。Oracle 9i后可以分析DDL语句,另外还可分析得到一些必要的回滚SQL语句。LogMiner一个最重要的用途就是不用全部恢复数据库就可以恢复数据库的某个变化。
所以,该工具特别适用于调试、审计或者回退某个特定的事务。查看数据信息也是非常有帮助的
使用的流程:
配置步骤解析
实验环境:
(oracle-g11-r2,redhat6.5,oracle安装目录:/opt/oracle)
需要确认是否安装的logminer;如果没有安装需要自己安装(一般oracle-g10之后都会附带该软件包),命令是(只能由sys用户运行):
SQL>@$ORACLE_HOME/rdbms/admin/dbmslm.sql
SQL>@$ORACLE_HOME/rdbms/admin/dbmslmd.sql
SQL>@$ORACLE_HOME/rdbms/admin/dbmslms.sql
步骤1、进行初始化设置:
1. 开启附加日志
1.1. 命令:
1.1.1. 设置命令
alter database add supplemental log data;
注:设置完后值会从no变成yes
1.1.2. 查看命令
select name,supplemental_log_data_min from v$database;
1.1.3. 取消命令
alter database drop supplemental log data;
注:值会从yes变成no
2. 设置LogMiner的表空间
2.1. 命令(可以不设置)
2.1.1.
3. 设置UTL_FILE_DIR参数的值
3.1. 命令
3.1.1.
alter system set utl_file_dir='/home/oracle/dir' scope=spfile;
注:指定一个可以存放字典的文件夹物理路径;如果路径不正确,后面会报错;路径具体真实目录需要去系统上自己手动创建。后面的路径自定义,不过最好在软件安装目录下,否则可能会有权限问题。
步骤2、提取(也可以说是创建)一个字典:
将字典文件提取为Flat File或Redo模式日志,或者直接使用Online Catalog;(共三种,其他的自己百度,我目前只用一种。)
指定路径保存字典的命令:
EXEC dbms_logmnr_d.build(dictionary_filename => 'dictionary.ora',dictionary_location =>'/home/oracle/dir');
注:当前使用的提取模式是flat file模式;文件名和后缀可以自定义,后面需要指定的路径需要和上面UTL_FILE_DIR一样,否则还是会报错。具体区别我会放一个连接在该文最下面。
步骤3、指定需要分析的Redo日志文件:
利用DBMS_LOGMNR.ADD_LOGFILE来添加日志;
加入的第一个日志文件的命令:
Exec dbms_logmnr.add_logfile(logfilename=>'D:\oracle\oradata\practice\REDO03.LOG',options=>dbms_logmnr.NEW);
后续加入的日志文件的命令:
Exec dbms_logmnr.add_logfile(logfilename=>'D:\oracle\oradata\practice\ARCHIVE\ARC00002_0817639922.001',options=>dbms_logmnr.ADDFILE);
注:后面的跟的路径地址就是你需要分析的日志文件的路径了,只有一个日志文件需要分析只要用第一个命令就好;有多个就需要先使用第一个,之后剩下日志文件路径都是用第二个命令加入分析中,小编认为这些文件会通过这个命令和第二步骤所建立的字典联系起来,然后由下一步开始将二进制内容转换成可见信息。
步骤4、开始LogMiner进行日志分析:
执行DBMS_LOGMNR.START_LOGMNR来启动LogMiner;
EXEC DBMS_LOGMNR.START_LOGMNR;
注:这步骤分析分为有条件和无条件两种,本教程使用的是无条件。其实后面可以加路径,如果出现一个什么什么未定义的报错,那或许是你敲错字母了;需要学习有条件分析的同学,请看下一段落介绍(太多懒得写,直接转载了)。
注:这条命令其实有很多参数,可以自己百度,也可以看我最后一行给的链接。
步骤5、查询
V$LOGMNR_CONTENTS视图;
SELECTed sql_redo FROM v$logmnr_contents;
注:如果需要指定列查询的话,只要用命令将列信息调出来就可以,或者最后的链接有相关列介绍。
步骤6、结束LogMiner:
通过执行EXECUTE DBMS_LOGMNR.END_LOGMNR来结束分析。
EXECUTE DBMS_LOGMNR.END_LOGMNR
注:一旦执行该语句后视图将不存在,因为分析的结果都保存在内存中,不会保存在硬盘中。
对于这个操作和解释最详细的链接:
http://blog.csdn.net/yes_is_ok/article/details/79296614