2014-08-19 Created By BaoXinjian
一、摘要
Oracle LogMiner 是一个非常有用并且完全免费的分析工具,可轻松获得Oracle 重做日志文件(归档日志文件)中的具体内容,它是由一组PL/SQL包和一些动态视图组成。
日志文件中存放着所有进行数据库恢复的数据,记录了针对数据库结构的每一个变化,也就是对数据库操作的所有DML语句。
Logminer工具即可以用来分析在线,也可以用来分析离线日志文件,即可以分析本身自己数据库的重作日志文件,也可以用来分析其他数据库的重作日志文件。
1. 主要用途:
- (1). 跟踪数据库的变化:可以离线的跟踪数据库的变化,而不会影响在线系统的性能。
- (2).回退数据库的变化:回退特定的变化数据,减少point-in-time recovery的执行。
- (3).优化和扩容计划:可通过分析日志文件中的数据以分析数据增长模式。
2. 两个重要package
- DBMS_LOGMNR
- DBMS_LOGMNR_D
3. 四个重要视图
- V$LOGMNR_DICTIONARY-------查询使用的数据字典文件
- V$LOGMNR_PARAMETERS-------查询当前LogMiner设定的参数
- V$LOGMNR_LOGS-------查询分析的日志文件
- V$LOGMNR_CONTENTS-------日志文件的内容
4. DBMS_LOGMNR.start_logmnr可定义参数区分分析的范围
- SCN
- Timestamp
二、案例 - 创建测试表并塞入资料分析重做日志是否记录
1. 安装LogMiner
要安装logminer工具,必须首先要运行下面这样三个脚本
SQL> @$ORACLE_HOME/rdbms/admin/dbmslm.sql
SQL> @$ORACLE_HOME/rdbms/admin/dbmslmd.sql
SQL> @$ORACLE_HOME/rdbms/admin/dbmslms.sql
这两个脚本必须均以SYS用户身份运行。其中第一个脚本用来创建DBMS_LOGMNR包,该包用来分析日志文件。第二个脚本用来创建DBMS_LOGMNR_D包,该包用来创建数据字典文件。
创建完毕后将包括如下过程和视图:
2. 创建数据字典文件
CREATE DIRECTORY utlfile AS '/opt/oracle/oradata/gavinsit/logmnr'
alter system set utl_file_dir='/opt/oracle/oradata/gavinsit/logmnr' scope=spfile;
重启
LogMiner工具实际上是由两个新的PL/SQL内建包((DBMS_LOGMNR 和 DBMS_ LOGMNR_D)和四个V$动态性能视图(视图是在利用过程DBMS_LOGMNR.START_LOGMNR启动LogMiner时创建)组成。
在使用LogMiner工具分析redo log文件之前,可以使用DBMS_LOGMNR_D 包将数据字典导出为一个文本文件。
该字典文件是可选的,但是如果没有它,LogMiner解释出来的语句中关于数据字典中的部分(如表名、列名等)和数值都将是16进制的形式,我们是无法直接理解的
3. 查看数据库中的重做日志
4. 创建表,并增加一笔记录,通过分析,查看是否存在在重做日志中,并确认SCN
5. 加入需分析的日志文件,使用LogMiner进行日志分析
BEGIN
DBMS_LOGMNR_D.build (
dictionary_filename => 'dictionary.ora',
dictionary_location => '/opt/oracle/oradata/gavinsit/logmnr'
);
DBMS_LOGMNR.add_logfile ('/opt/oracle/oradata/gavinsit/redo01.log',
DBMS_LOGMNR.NEW);
DBMS_LOGMNR.add_logfile ('/opt/oracle/oradata/gavinsit/redo02.log',
DBMS_LOGMNR.ADDFILE);
DBMS_LOGMNR.add_logfile ('/opt/oracle/oradata/gavinsit/redo03.log',
DBMS_LOGMNR.ADDFILE);
DBMS_LOGMNR.start_logmnr (
DictFileName => '/opt/oracle/oradata/gavinsit/logmnr/dictionary.ora'
);
END;
6. 查看动态视图结果
6.1 查看数据字典文件
6.2 查看分析参数
6.3 查看分析的日志文件
6.4 追溯到创建表的sql
6.5 追溯到插入数据的sql
insert into "SYS"."OBJ$"("OBJ#","DATAOBJ#","OWNER#","NAME","NAMESPACE","SUBNAME","TYPE#","CTIME","MTIME","STIME","STATUS","REMOTEOWNER","LINKNAME","FLAGS","OID$","SPARE1","SPARE2","SPARE3","SPARE4","SPARE5","SPARE6") values ('78204','78204','0','BXJ_TEST_LOGMINER','1',NULL,'2',TO_DATE('18-AUG-14', 'DD-MON-RR'),TO_DATE('18-AUG-14', 'DD-MON-RR'),TO_DATE('18-AUG-14', 'DD-MON-RR'),'1',NULL,NULL,'0',NULL,'6','1','0',NULL,NULL,NULL);
7. 取消分析
execute dbms_logmnr.end_logmnr;
Thanks and Regards
参考: http://docs.oracle.com/cd/E11882_01/server.112/e22490/logminer.htm