2014-08-19 Created By BaoXinjian

DBA_Oracle LogMiner分析重做和归档日志(案例)_sql一、摘要


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


DBA_Oracle LogMiner分析重做和归档日志(案例)_DBA_02二、案例 - 创建测试表并塞入资料分析重做日志是否记录


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包,该包用来创建数据字典文件。

创建完毕后将包括如下过程和视图:

DBA_Oracle LogMiner分析重做和归档日志(案例)_日志文件_03


2. 创建数据字典文件


CREATE DIRECTORY utlfile AS '/opt/oracle/oradata/gavinsit/logmnr'

alter system set utl_file_dir='/opt/oracle/oradata/gavinsit/logmnr' scope=spfile;

重启


DBA_Oracle LogMiner分析重做和归档日志(案例)_日志文件_04

LogMiner工具实际上是由两个新的PL/SQL内建包((DBMS_LOGMNR 和 DBMS_ LOGMNR_D)和四个V$动态性能视图(视图是在利用过程DBMS_LOGMNR.START_LOGMNR启动LogMiner时创建)组成。

在使用LogMiner工具分析redo log文件之前,可以使用DBMS_LOGMNR_D 包将数据字典导出为一个文本文件。

该字典文件是可选的,但是如果没有它,LogMiner解释出来的语句中关于数据字典中的部分(如表名、列名等)和数值都将是16进制的形式,我们是无法直接理解的


3. 查看数据库中的重做日志

DBA_Oracle LogMiner分析重做和归档日志(案例)_sql_05

DBA_Oracle LogMiner分析重做和归档日志(案例)_oracle_06


4. 创建表,并增加一笔记录,通过分析,查看是否存在在重做日志中,并确认SCN

DBA_Oracle LogMiner分析重做和归档日志(案例)_sql_07


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;


DBA_Oracle LogMiner分析重做和归档日志(案例)_DBA_08


6. 查看动态视图结果

6.1 查看数据字典文件

DBA_Oracle LogMiner分析重做和归档日志(案例)_日志文件_09

6.2 查看分析参数

DBA_Oracle LogMiner分析重做和归档日志(案例)_DBA_10

6.3 查看分析的日志文件

DBA_Oracle LogMiner分析重做和归档日志(案例)_日志文件_11

6.4 追溯到创建表的sql

DBA_Oracle LogMiner分析重做和归档日志(案例)_日志文件_12

6.5 追溯到插入数据的sql

DBA_Oracle LogMiner分析重做和归档日志(案例)_oracle_13

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