`

分析Oracle数据库日志文件(二)

阅读更多

三、Oracle8i/9i的日志分析过程

  LogMiner只要在实例起来的情况下都可以运行,LogMiner使用一个字典文件来实现Oracle内部对象名称的转换,如果没有这个字典文件,则直接显示内部对象编号,例如我们执行下面的语句:

  delete from "C"."A" where "C1" = ‘gototop’ and ROWID = 'AAABg1AAFAAABQaAAH';

  如果没有字典文件,LogMiner分析出来的结果将是:

  delete from "UNKNOWN"."OBJ# 6197" where "COL 1" = HEXTORAW('d6a7d4ae') and ROWID

  = 'AAABg1AAFAAABQaAAH';

  如果想要使用字典文件,数据库至少应该出于MOUNT状态。然后执行dbms_logmnr_d.build过程将数据字典信息提取到一个外部文件中。下面是具体分析步骤:

  1、确认设置了初始化参数:UTL_FILE_DIR,并确认Oracle对改目录拥有读写权限,然后启动实例。示例中UTL_FILE_DIR参数如下:

  SQL> show parameter utl
  NAME TYPE VALUE
  ------------------------ ----------- ------------------------------
  utl_file_dir string /data6/cyx/logmnr

  这个目录主要用于存放dbms_logmnr_d.build过程所产生的字典信息文件,如果不用这个,则可以不设,也就跳过下面一步。

  2、生成字典信息文件:

  exec dbms_logmnr_d.build(dictionary_filename =>'
  dic.ora',dictionary_location => '/data6/cyx/logmnr');

  其中dictionary_location指的是字典信息文件的存放位置,它必须完全匹配UTL_FILE_DIR的值,例如:假设UTL_FILE_DIR=/data6/cyx/logmnr/,则上面这条语句会出错,只因为UTL_FILE_DIR后面多了一个“/”,而在很多其它地方对这一“/”是不敏感的。

  dictionary_filename指的是放于字典信息文件的名字,可以任意取。当然我们也可以不明确写出这两个选项,即写成:

  exec dbms_logmnr_d.build('dic.ora','/data6/cyx/logmnr');

  如果你第一步的参数没有设,而直接开始这一步,Oracle会报下面的错误:

  ERROR at line 1:

  ORA-01308: initialization parameter utl_file_dir is not set

  ORA-06512: at "SYS.DBMS_LOGMNR_D", line 923

  ORA-06512: at "SYS.DBMS_LOGMNR_D", line 1938

  ORA-06512: at line 1

  需要注意的是,在oracle817 for Windows版中会出现以下错误:

  14:26:05 SQL> execute dbms_logmnr_d.build('oradict.ora','c:\oracle\admin\ora\log');

  BEGIN dbms_logmnr_d.build('oradict.ora','c:\oracle\admin\ora\log'); END;

  *

  ERROR at line 1:

  ORA-06532: Subscript outside of limit

  ORA-06512: at "SYS.DBMS_LOGMNR_D", line 793

  ORA-06512: at line 1

  解决办法:

  编辑"$ORACLE_HOME/rdbms/admindbmslmd.sql"文件,把其中的

  TYPE col_desc_array IS VARRAY(513) OF col_description;

  改成:

  TYPE col_desc_array IS VARRAY(700) OF col_description;

  保存文件,然后执行一遍这个脚本:

  15:09:06 SQL> @c:\oracle\ora81\rdbms\admin\dbmslmd.sql

  Package created.

  Package body created.

  No errors.

  Grant succeeded.

  然后重新编译DBMS_LOGMNR_D包:

  15:09:51 SQL> alter package DBMS_LOGMNR_D compile body;

  Package body altered.

  之后重新执行dbms_logmnr_d.build即可:

  15:10:06 SQL> execute dbms_logmnr_d.build('oradict.ora','c:\oracle\admin\ora\log');
  PL/SQL procedure successfully completed.

  3、添加需要分析的日志文件

  SQL>exec dbms_logmnr.add_logfile( logfilename=>'
  /data6/cyx/rac1arch/arch_1_197.arc', options=>dbms_logmnr.new);
  PL/SQL procedure successfully completed.

  这里的options选项有三个参数可以用:

  NEW - 表示创建一个新的日志文件列表

  ADDFILE - 表示向这个列表中添加日志文件,如下面的例子

  REMOVEFILE - 和addfile相反。

  SQL> exec dbms_logmnr.add_logfile( logfilename=>'
  /data6/cyx/rac1arch/arch_2_86.arc', options=>dbms_logmnr.addfile);
  PL/SQL procedure successfully completed.

  4、当你添加了需要分析的日志文件后,我们就可以让LogMiner开始分析了:

  SQL> exec dbms_logmnr.start_logmnr(dictfilename=>'/data6/cyx/logmnr/dic.ora');

  PL/SQL procedure successfully completed.

  如果你没有使用字典信息文件(此时我们只需要启动实例就可以了),那么就不需要跟dictfilename参数:

  SQL> exec dbms_logmnr.start_logmnr();
  PL/SQL procedure successfully completed.

  当然dbms_logmnr.start_logmnr()过程还有其它几个用于定义分析日志时间/SCN窗口的参数,它们分别是:

  STARTSCN / ENDSCN - 定义分析的起始/结束SCN号,

  STARTTIME / ENDTIME - 定义分析的起始/结束时间。

  例如下面的过程将只分析从 '2003-09-21 09:39:00'到'2003-09-21 09:45:00'这段时间的日志:

  SQL> exec dbms_logmnr.start_logmnr(dictfilename=>'/data6/cyx/logmnr/dic.ora' , -

  starttime => '2003-09-21 09:39:00',endtime => '2003-09-21 09:45:00');

  PL/SQL procedure successfully completed.

  上面过程第一行结尾的“-”表示转行,如果你在同一行,则不需要。我们可以看到有效日志的时间戳:

  SQL> select distinct timestamp from v$logmnr_contents;
  TIMESTAMP
  -------------------
  2003-09-21 09:40:02
  2003-09-21 09:42:39

  这里需要注意的是,因为我之前已经设置NLS_DATE_FORMAT环境变量,所以上面的日期可以直接按这个格式写就行了,如果你没有设,则需要使用to_date函数来转换一下。

  SQL> !env|grep NLS
  NLS_LANG=american_america.zhs16cgb231280
  NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS
  ORA_NLS33=/oracle/oracle9/app/oracle/product/9.2.0/ocommon/nls/admin/data

  使用to_date的格式如下:

  exec dbms_logmnr.start_logmnr(dictfilename=>'/data6/cyx/logmnr/dic.ora',-
  starttime => to_date('2003-09-21 09:39:00','YYYY-MM-DD HH24:MI:SS'),-
  endtime => to_date('2003-09-21 09:45:00','YYYY-MM-DD HH24:MI:SS'));

  STARTSCN 和ENDSCN参数使用方法类似。

  5、好了,在上面的过程执行结束之后,我们就可以通过访问与LogMiner相关的几个视图来提取我们需要的信息了。其中在v$logmnr_logs中可以看到我们当前分析的日志列表,如果数据库有两个实例(即OPS/RAC),在v$logmnr_logs中会有两个不同的THREAD_ID。

  而真正的分析结果是放在v$logmnr_contents中,这里面有很多信息,我们可以根据需要追踪我们感兴趣的信息。后面我将单独列出来讲常见的追踪情形。

  6、全部结束之后,我们可以执行dbms_logmnr.end_logmnr过程退出LogMiner分析过程,你也可以直接退出SQL*PLUS,它会自动终止。

  四、如何利用LogMiner分析Oracle8的日志文件

  虽然说LogMiner是Oracle8i才推出来,但我们同样可以用它来分析Oracle8的日志文件,只不过稍微麻烦了一点,并且有一定的限制,下面是具体做法:

  我们首先复制Oracle8i的$ORACLE_HOME/rdbms/admin/dbmslmd.sql脚本到Oracle8数据库所在主机的同样目录;这个脚本用于创建dbms_logmnr_d包(注意,Oracle9i中还将创建dbms_logmnr包),如果是8.1.5脚本名字为dbmslogmnrd.sql。然后在Oracle8的数据库上运行这个脚本,之后使用dbms_logmnr_d.build过程创建字典信息文件。现在我们就可以把Oracle8的归档日志连同这个字典信息文件复制到Oracle8i数据库所在的主机上,之后在Oracle8i数据库中从上面分析过程的第三步开始分析Oracle8的日志,不过

  dbms_logmnr.start_logmnr()中使用的是Oracle8的字典信息文件。

  按照我前面所说的那样,如果不是字典文件,我们则可以直接将Oracle8的归档日志复制到Oracle8i数据库所在主机,然后对它进行分析。

  其实这里涉及到了一个跨平台使用LogMiner的问题,笔者做过试验,也可以在Oracle9i中来分析Oracle8i的日志。但这些都是有所限制的,主要表现在:

  1、LogMiner所使用的字典文件必须和所分析的日志文件是同一个数据库所产生的,并且该数据库的字符集应和执行LogMiner数据库的相同。这很好理解,如果不是同一个数据库所产生就不存在对应关系了。

  2、生成日志的数据库硬件平台和执行LogMiner数据库的硬件平台要求一致,操作系统版本可以不一致,一个是 V5.1A,另一个则是V4.0F。如果操作系统不一致则会出现下面的错误:

  ORA-01284: file /data6/cyx/logmnr/arch_1_163570.arc cannot be opened

  ORA-00308: cannot open archived log '/data6/cyx/logmnr/arch_1_163570.arc'

  ORA-27048: skgfifi: file header information is invalid

  ORA-06512: at "SYS.DBMS_LOGMNR", line 63

  ORA-06512: at line 1

分享到:
评论

相关推荐

    ORACLE数据库的日志文件分析.pdf

    ORACLE数据库日志文件分析 ORACLE数据库日志文件分析是关系型数据库管理系统中非常重要的一部分。日志文件是ORACLE数据库的核心组件之一,用于记录数据库的所有操作,包括事务、数据修改、回滚等。日志文件分析是...

    oracle数据库日志查看方法

    #### 二、Oracle数据库日志类型 Oracle数据库中有多种类型的日志文件,包括但不限于: 1. **后台进程日志(Background Dump Files)**:这些日志文件通常包含系统错误信息,可以帮助诊断系统级的问题。 2. **Alert...

    深入分析Oracle数据库日志文件.rar

    日志文件在Oracle数据库系统中起着至关重要的作用,它们记录了数据库的所有更改,确保数据的安全性和可恢复性。本文将深入探讨Oracle数据库的日志文件,包括redo logs(重做日志)和archive logs(归档日志),以及...

    分析Oracle数据库日志文件(1) .txt

    ### Oracle数据库日志文件分析详解 #### 一、Oracle LogMiner工具介绍 在Oracle数据库管理与维护中,LogMiner是一项重要的工具,用于解析重做日志(Redo Logs)来获取数据库变更的详细信息。它能帮助数据库管理员...

    论文研究-Oracle8i数据库日志文件的分析与恢复.pdf

    首先,Oracle数据库日志文件是数据库管理的重要组成部分,它记录了数据库中所有事务的详细信息。Oracle 8i数据库日志文件主要包含以下几个关键概念和组件: 1. 转储文件(Dump File):转储文件是Oracle在处理日志...

    Oracle数据库日志文件的分析与应用.pdf

    总的来说,Oracle数据库日志文件的分析与应用是数据库管理中的重要环节,LogMiner作为Oracle提供的工具,能够帮助管理员深入理解数据库的操作历史,有效地进行数据恢复、审计监控和程序调试。通过正确安装、设置数据...

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

    基于LogMiner的Oracle数据库日志分析 一、概述 Oracle 数据库是世界上使用最广泛的关系数据库系统之一。Oracle 数据库除了具有强大数据组织、存储、查询及处理的基本功能外,还提供了许多与应用及管理有关的辅助...

    深入分析oracle日志文件

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

    Oracle数据库日志文件损坏时修复方法的实验研究

    ### Oracle数据库日志文件损坏时修复方法的实验研究 #### 引言与背景 Oracle数据库作为全球领先的企业级数据库管理系统之一,其数据安全性和可靠性至关重要。数据库日志文件,包括重做日志(Redo Log)和归档日志...

    Oracle数据库重做日志文件的分析及其应用.pdf

    Oracle数据库重做日志文件的分析及其应用 本文将详细讨论 Oracle 数据库重做日志文件的分析及其应用,包括日志文件的概念、类型、结构、恢复机制等方面的知识点。 1. 日志文件的概念 日志文件是数据库管理系统中...

    Oracle数据库日志收集手册小白必备

    #### 二、RDA工具收集Oracle数据库日志 **1. RDA工具简介** - **定义**: RDA (Oracle Remote Diagnostic Agent) 是由Oracle官方提供的一个强大的诊断工具,主要用于收集Oracle数据库的系统配置和详细信息。 - **...

    Oracle数据库精讲之数据库管理_ Oracle数据库管理视频

    第五讲:Oracle数据库在线日志文件管理 第六讲:Oracle数据库归档日志文件管理 第七讲:Oracle数据库控制文件管理 第八讲:Oracle数据库参数文件管理 第九讲:oracle数据库启动和关闭管理 第十讲:oracle undo sapce...

    Oracle数据库日志文件损坏时修复方法的实验研究.pdf

    本篇文章将深入探讨Oracle数据库日志文件损坏时的修复方法。 Oracle数据库的日志文件主要分为两种类型:重做日志文件(Redo Log Files)和归档日志文件(Archive Log Files)。重做日志文件记录了对数据库的所有...

    Oracle数据库联机日志文件丢失处理方法

    Oracle 数据库联机日志文件丢失处理方法 Oracle 数据库联机日志文件是数据库运行的重要组件,负责记录数据库的事务信息,以便在出现故障时可以恢复数据库。然而,在某些情况下,联机日志文件可能会丢失,从而导致...

    如何对Oracle数据库文件进行恢复与备份

    Oracle数据库的恢复与备份是数据库管理员的关键技能,确保在数据丢失或系统故障时能迅速恢复服务。本篇文章主要探讨了如何对Oracle数据库进行备份和恢复,以及涉及的主要工具和技术。 Oracle数据库采用多种机制来...

    oracle查看alert日志文件位置

    在Oracle数据库管理中,了解如何查看Alert日志文件的位置至关重要。Alert日志文件包含有关数据库实例运行时的重要信息,例如错误消息、警告和其他重要事件,对于诊断问题和维护数据库健康状态非常有用。本文将详细...

    ORACLE数据库调整归档日志空间大小[收集].pdf

    ORACLE数据库调整归档日志空间大小 ORACLE数据库的归档日志是一种重要的灾难恢复机制,它可以帮助数据库管理员在发生灾难时恢复数据库。然而,如果不正确地配置和维护归档日志,可能会导致数据库无法启动或连接。...

    Oracle8i数据库日志文件的分析与恢复.pdf

    Oracle 8i 数据库日志文件的分析与恢复 Oracle 8i 数据库日志文件是数据库中最重要的组成部分之一,对数据库的可靠性和安全性起着至关重要的作用。日志文件记录了数据库中所有的事务操作,包括插入、更新、删除等...

    ORACLE数据库 ORACLE数据库

    Oracle数据库是全球最广泛使用的商业关系型数据库管理系统之一,由美国甲骨文公司(Oracle Corporation)开发和维护。Oracle数据库以其高效、稳定和强大的功能在金融、电信、医疗、政府等多个领域得到广泛应用。本篇...

Global site tag (gtag.js) - Google Analytics