zoukankan      html  css  js  c++  java
  • 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日志分析过程有些繁琐,涉及数据库的知识点较多,需要耐心调试。 

  • 相关阅读:
    15、事例十五:纹理映射
    14、事例十四:材质:十二个材质球
    [luogu]P1084 疫情控制
    [luogu]P2502 [HAOI2006]旅行
    [luogu]P2053 [SCOI2007]修车
    线性相关/线性基
    [luogu]P3629 [APIO2010]巡逻
    [luogu]P3623 [APIO2008]免费道路
    权值线段树
    树链剖分
  • 原文地址:https://www.cnblogs.com/tracy/p/2192755.html
Copyright © 2011-2022 走看看