`
kakajw
  • 浏览: 265111 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

详解Oracle的日志的工具——LogMiner

阅读更多
  前言
  Oracle的重做日志分为两种,联机重做日志文件(online Redo log)和归档重做日志(Archive Redo log )文件;本文主要归档重做日志(Archive Redo log )文件,在线日志在分析方法上相似。
  由于各种因素,Oracle的重做日志(redo log)文件无法通过各种文本软件直接读取,而Oracle自带的LogMiner是分析日志最优选择。
LogMiner: Oracle自8i后提供的,通过SQL命令形式来查询和解析redo(重做)和undo(撤销)日志的工具。

1.安装LogMiner--简单 
  LogMiner是Oracle自带的日志解析工具,安装时只要运行sql脚本即可,安装一次就ok。

首先运行下面这样两个脚本,这两个脚本必须均以SYS用户身份运行。
其中第一个脚本用来创建DBMS_LOGMNR包,该包用来分析日志文件。
第二个脚本用来创建DBMS_LOGMNR_D包,该包用来创建数据字典文件。

  两个文件的位置:
  1  $ORACLE_HOME/rdbms/admin/dbmslm.sql
  2. $ORACLE_HOME/rdbms/admin/dbmslmd.sql.
 
  操作命令:
  SQL> @d:\oracle\product\10.2.0\db_2\RDBMS\ADMIN\dbmslm.sql
  程序包已创建。
   授权成功。

  SQL> @d:\oracle\product\10.2.0\db_2\RDBMS\ADMIN\dbmslmd.sql
  程序包已创建。

2.创建数据字典(data-dictionary)--根据实际情况选择
  数据字典用来解析日志中的十六进制的数据项(如日志中的sql语句的列名称)。

  3种可选的方式,创建供LogMiner访问数据字典。
  1)直接访问数据库中在线的数据字典。
    这种方式简单,方便,但是由于数据字典是当前最新的,可能不匹配过去的log中的信息。      
    使用方法:在启动logMiner进行分析的时候,使用DICT_FROM_ONLINE_CATALOG选项。如下所示:
  SQL> EXECUTE dbms_logmnr.start_logmnr(options =>dbms_logmnr.DICT_FROM_ONLINE_CATALOG);
  最好以sys sysdba身份登录执行该命令。
    
  2)将数据字典导出为一个文件。
    这种方式是将某个时间点的数据字典导出为文件;在logMiner启动分析的时候(见第四步)通过options参数指定该文件的名称和路径,以解析日志。
  如果我们要分析的数据库中的表有变化,影响到库的数据字典也发生变化,这时就需要重新创建该字典文件。另外,在分析另外一个数据库文件的重作日志时,也必须要重新生成一遍被分析数据库的数据字典文件。
  使用方法:
  a. 首先调整spfile参数;  
  b. 然后创建数据字典文件;
     SQL> EXECUTE dbms_logmnr_d.build(dictionary_filename =>'logmn_ora817.dat',dictionary_location => ' D:Oraclelogs ');
    # 注意,dictionary_location必须和UTL_FILE_DIR参数所指的目录相同。    

   3)将数据字典导出到log文件中。
      要将数据库字典信息提取到重做日志文件,数据库必须处于ARCHIVELOG 模式。
     导出时,使用STORE_IN_REDO_LOGS 选项。例如:
      SQL> EXECUTE DBMS_LOGMNR_D.BUILD (
          SQLPLUS>options => DBMS_LOGMNR_D.STORE_IN_REDO_LOGS);

3、创建要分析的日志文件列表---日志绝对路径
   参数logfilename的值是日志文件的绝对路径(字符串)。

   A.添加日志文件
     SQL>execute dbms_logmnr.add_logfile(options
=>dbms_logmnr.addfile,logfilename=>'E:\app\Administrator\product\11.1.0\db_1\RDBMS\ARC00013_0736960501.001');
   B.继续添加。。。
     SQL>execute dbms_logmnr.add_logfile(options
=>dbms_logmnr.addfile,logfilename=>'E:\app\Administrator\product\11.1.0\db_1\RDBMS\ARC00014_0736960501.001');
     继续添加。。。
     SQL> execute dbms_logmnr.add_logfile(options
=>dbms_logmnr.addfile,logfilename=>'E:\app\Administrator\product\11.1.0\db_1\RDBMS\ARC00015_0736960501.001');
     也可以删除(不常用)
     SQL> execute dbms_logmnr.add_logfile(options=>dbms_logmnr.removefile,logfilename=>'E:\app\Administrator\product\11.1.0\db_1\RDBMS\ARC00015_0736960501.001');
需要分析日志文件的个数完全由调用者决定。
  另外,Oracle提供归档日志视图(v$archived_log),通过select * from v$archived_log可查询已存档日志文件的信息(绝对路径、存档时间等);(需要DBA权限登录)
有关v$archived_log视图的详细信息请参考Oracle官方文档:http://download.oracle.com/docs/cd/B19306_01/server.102/b14237/dynviews_1016.htm

4.启动LogMiner进行分析--关键

(1)无限制条件
SQL> EXECUTE dbms_logmnr.start_logmnr( options =>dbms_logmnr.DICT_FROM_ONLINE_CATALOG); 

(2)有限制条件
    调用者通过对dbms_logmnr.start_logmnr命令的时间(包含StartTime和EndTime)参数和SCN参数(包含StartScn和EndScn)进行设置,可对日志进行按意愿筛选。

   时间范围(使用较多):对dbms_logmnr.start_logmnr命令使用StartTime和EndTime参数。
   SCN(语句顺序编号)范围:对dbms_logmnr.start_logmnr命令使用StartScn和EndScn参数。

   例如,假如想仅仅分析2010-12-07的日志(当然,上一步添加的日志文件需要包含该时间范围,不然会报错):
   SQL> EXECUTE dbms_logmnr.start_logmnr( StartTime => to_date('2010-12-07 00:00:00','YYYY-MM-DD HH24:MI:SS'), EndTime => to_date('2010-12-08 23:59:59','YYYY-MM-DD HH24:MI:SS'),options
=>dbms_logmnr.DICT_FROM_ONLINE_CATALOG);

假如想仅仅分析某个SCN范围内的日志:
SQL> EXECUTE dbms_logmnr.start_logmnr( options =>dbms_logmnr.DICT_FROM_ONLINE_CATALOG, StartScn => 20, EndScn => 50);

DBMS_LOGMNR.START__LOGMNR命令参数含义
参数      参数类型          默认值           含义
StartScn  数字型(Number)    0        分析重作日志中SCN≥StartScn日志文件部分
EndScn    数字型(Number)    0        分析重作日志中SCN≤EndScn日志文件部分
StartTime 日期型(Date)     1998-01-01  分析重作日志中时间戳≥StartTime的日志文件部分
EndTime   日期型(Date)     2988-01-01  分析重作日志中时间戳≤EndTime的日志文件部分
DictFileName 字符型(VARCHAR2)          字典文件,该文件包含一个数据库目录的快照。使用该文件可以使得到的分析结果是可以理解的文本形式,而非系统内部的16进制

Options BINARY_INTEGER       0         系统调试参数,实际很少使用

该步骤涉及数据字典的使用方法的选择:
a) 使用导出的文本文件数据字典。
SQL> EXECUTE dbms_logmnr.start_logmnr(
DictFileName=>' D:Oraclelogslogmn_ora817.dat ');

b)直接使用在线的数据字典。
EXECUTE dbms_logmnr.start_logmnr(options =>dbms_logmnr.DICT_FROM_ONLINE_CATALOG);

c)使用导出到log文件中的数据字典。
EXECUTE dbms_logmnr.start_logmnr(options =>dbms_logmnr.DICT_FROM_REDO_LOGS);


5、查看日志分析的结果--关键

动态性能视图v$logmnr_contents包含LogMiner分析得到的所有的信息,通过Select XX from        v$logmnr_contents可以查询。
  例如:

select SQL_REDO,to_char(TIMESTAMP,'YYYY-MM-DD HH24:MI:SS'),to_char(COMMIT_TIMESTAMP,'YYYY-MM-DD HH24:MI:SS') from v$logmnr_contents


  SQL> select sql_redo from v$logmnr_contents

  a、查看DML操作,示例:
     SELECT operation,sql_redo,sql_undo FROM V$logmnr_contents
     WHERE operation IN ('INSERT','UPDATE','DELETE') and seg_name = 'QIUYB';
   
     OPERATION     SQL_REDO                    SQL_UNDO
     ----------    --------------------------  --------------------------
     INSERT        inser into qiuyb.qiuyb ...  delete from qiuyb.qiuyb...
 
    operation--操作类型。
    sql_redo--记录已执行的SQL脚本,
    sql_undo--用于恢复所做的操作的,与sql_redo相反的SQL脚本。   

    以上三个字段是比较关键的字段,v$logmnr_contents视图的更多属性字段可查询Oracle官方文档(11g)。http://download.oracle.com/docs/cd/B19306_01/server.102/b14237/dynviews_1154.htm
 
  b、查看DDL操作,示例:
    SELECT timstamp,sql_redo
    FROM v$logmnr_contents WHERE operation IN ('DDL') ;
   
  所有的LogMiner的分析过程存储都在PGA内存中,视图v$logmnr_contents是基于dbms_logmrn.start_logmnr会话的。随着进程的结束,会话结束后,视图v$logmnr_content也随之消失。 

6.结束LogMiner的分析,结束本次logMiner会话。--简单
     DBMS_LOGMNR.END_LOGMNR终止日志分析事务,此时PGA内存区域被清除,所有的LogMiner的分析过程消失,分析结果也随之不再存在。

  SQL>BEGIN
   2     dbms_logmnr.end_logmnr;
   3   end;
   4 /


7.注意事项
    在利用LogMiner日志分析工具来分析其他数据库实例产生的重作日志文件,而不仅仅用来分析本身安装LogMiner的数据库实例的redo logs文件。

  使用LogMiner分析其他数据库实例时,有几点需要注意:
  1).LogMiner必须使用被分析数据库实例产生的字典文件(第二步创建数据字典的第二种方式),而不是安装LogMiner的数据库产生的字典文件,另外必须保证安装LogMiner数据库的字符集和被分析数据库的字符集相同。

  2). 被分析数据库平台必须和当前LogMiner所在数据库平台一样,也就是说如果我们要分析的文件是由运行在UNIX平台上的Oracle 8i产生的,那么也必须在一个运行在UNIX平台上的Oracle实例上运行LogMiner,而不能在其他如Microsoft NT上运行LogMiner。当然两者的硬件条件不一定要求完全一样。

  3). LogMiner日志分析工具仅能够分析Oracle 8i以后的产品,对于8i以前的产品,该工具也无能为力。

  4).LogMiner日志分析工具仅的数据字典的方式选择比较重要,根据实际的情况而慎重选择。
  5).LogMiner日志分析过程有些繁琐,涉及数据库的知识点较多,需要耐心调试。
分享到:
评论

相关推荐

    oracle日志分析工具LogMiner使用.

    Oracle 日志分析工具 LogMiner 使用 Oracle 日志分析工具 LogMiner 是 Oracle 数据库中的一种功能强大且灵活的日志分析工具,它可以帮助数据库管理员、开发人员和用户快速地对数据库进行日志分析和问题诊断。下面是...

    oracle日志分析工具LogMiner的使用

    Oracle的日志分析工具LogMiner是Oracle数据库内置的一个强大功能,用于分析数据库的redo logs,以获取关于数据库操作的历史信息。LogMiner可以帮助DBA进行性能优化、故障排查和审计等任务。以下将详细介绍LogMiner的...

    Oracle 日志挖掘(LogMiner)使用详解

    Logminer依赖于2个包:DBMS_LOGMNR和DBMS_LOGMNR_D,Oracle 11g默认已安装 Logminer 基本使用步骤 <1>. Specify a LogMiner dictionary. 指定Logminer字典 <2>. Specify a list of redo log files for analysis. ...

    Oracle日志分析工具LogMiner的研究.pdf

    "Oracle日志分析工具LogMiner的研究" Oracle日志分析工具LogMiner是Oracle公司提供的一个日志分析工具,旨在帮助数据库管理员快速地分析和解决数据库问题。LogMiner可以读取数据库日志文件,重建数据库操作记录,...

    Oracle DBA的后悔药——Logminer技术简介.pdf

    Oracle DBA的后悔药——Logminer技术是一种强大的数据库恢复和审计工具,主要应用于Oracle数据库系统。Logminer允许DBA(数据库管理员)分析数据库的重做日志,从中获取历史操作的详细信息,包括哪些用户执行了什么...

    oracle日志分析工具LogMiner使用

    ### Oracle日志分析工具LogMiner使用详解 #### 一、概述 Oracle LogMiner是Oracle数据库提供的一个强大工具,用于分析重做日志文件,提取数据库中的更改记录(即SCN序列)。通过LogMiner,我们可以追踪并监控...

    浅谈Oracle日志分析工具LogMiner.pdf

    综合来看,LogMiner是Oracle数据库管理系统中一个强大的日志分析工具,它对于数据库管理员来说,是一个不可或缺的工具,能帮助管理员有效地进行数据恢复、操作跟踪、以及安全审计等工作,确保数据库的正常运行和数据...

    【数据库】Oracle异机logminer日志分析-.docx

    Oracle LogMiner 是一个功能强大且常用的日志分析工具,能够便捷地从在线或归档日志中获取内容。通常情况下,在数据库本机上进行日志分析,通过数据字典文件来解析,配置过程需要重启数据库服务器。然而,在实际生产...

    Oracle日志管理logminer使用

    LogMiner是Oracle提供的一款强大的工具,用于读取和解析重做日志文件中的数据变化,从而帮助用户了解数据库中数据的变化情况。 **LogMiner的主要功能包括:** 1. **监控数据更改:**LogMiner能够监控数据库中的...

    深入分析oracle日志文件

    深入分析 Oracle 日志文件 Oracle 日志文件是 Oracle 数据库管理员 (DBA) 实现...Oracle 日志文件分析是数据库恢复和追踪用户操作的重要工具,LogMiner 是一种effective且low-cost的方法来分析 Oracle 日志文件。

    理解和使用Oracle分析工具-LogMiner

    LogMiner对于数据库管理员(DBA)来讲是个功能非常强大的工具,也是在日常工作中经常要用到的一个工具,借助于该工具,可以得到大量的关于...我们也可以借助于该工具分析任何Oracle 8及其以后版本产生的重作日志文件。

    基于LogMiner的Oracle数据库日志分析.pdf

    本文介绍了基于 LogMiner 的 Oracle 数据库日志分析方法,使用 LogMiner 获取日志分析结果,并开发出 LogViewer 工具,可以对 Oracle 日志进行查看、查询、重做、回退等操作。LogMiner 及 LogViewer 是 Oracle ...

    Oracle日志分析

    3. **LogMiner工具**:Oracle提供了一个强大的工具——LogMiner,用于分析重做日志和归档日志文件。通过LogMiner,我们可以追踪表的变化情况,包括插入、更新、删除等操作,并可以提取出这些变化的SQL语句。 #### ...

    Oracle_10g_LogMiner

    Oracle 10g LogMiner 是Oracle数据库的一个内置工具,用于分析数据库的重做日志文件,从而获取关于事务的历史信息、SQL语句及其影响的数据变化。LogMiner 提供了一个方便的方式来审计和理解数据库中发生的变化,而...

    Oracle10G LogMiner的配置

    Oracle 10G LogMiner 是Oracle数据库系统中一个强大的日志分析工具,它允许用户在不使用归档重做日志的情况下分析数据库的redo log files,获取对数据库更改历史的详细视图。LogMiner 提供了一种有效的方式来进行...

    Oracle 10g中LogMiner的使用.pdf

    Oracle 10g中的LogMiner是一个强大的工具,主要用于分析Oracle数据库的日志文件,从而获取数据库的DML(数据操纵语言)操作历史。这个工具在Oracle 10g版本中得到了显著的提升,使得分析过程更为简便且功能更为强大...

Global site tag (gtag.js) - Google Analytics