使用LogMiner分析oracle的redo日志和归档

Oracle LogMiner 是Oracle公司从产品8i以后提供的一个实际非常有用的分析工具,使用该工具可以轻松获得Oracle 在线/归档日志文件中的具体内容,特别是该工具可以分析出所有对于数据库操作的DML和DDL语句。该工具特别适用于调试、审计或者回退某个特定的事务。

LogMiner分析工具实际上是由一组PL/SQL包和一些动态视图(Oracle8i内置包的一部分)组成,它作为Oracle数据库的一部分来发布是8i产品提供的一个完全免费的工具。但该工具和其他Oracle内建工具相比使用起来显得有些复杂,主要原因是该工具没有提供任何的图形用户界面(GUI)。

1、安装LogMiner

在使用LogMiner之前需要确认Oracle是否带有进行LogMiner分析包,一般来说Windows操作系统Oracle10g以上都默认包含。如果不能确认,可以DBA身份登录系统,查看系统中是否存在运行LogMiner所需要的dbms_logmnr、dbms_logmnr_d包,如果没有需要安装LogMiner工具,必须首先要运行下面这样两个脚本:

a.$ORACLE_HOME/rdbms/admin/dbmslm.sql

b.$ORACLE_HOME/rdbms/admin/dbmslmd.sql

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

2、修改数据库参数

--数据库版本
[email protected]>select * from v$version;

BANNER
-----------------------------------------------------------
CORE	11.2.0.4.0	Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production
--为数据库添加最小附加日志
[email protected]>alter database add supplemental log data;

Database altered.

[email protected]>select supplemental_log_data_min from v$database;

SUPPLEMENTAL_LOG_DATA_MI
------------------------
YES
--设置utl_file_dir参数
[email protected]>alter system set utl_file_dir=‘/home/oracle/logminer‘ scope=spfile;

System altered.
--重启数据库
[email protected]>shutdown immediate
[email protected]>startup
[email protected]>show parameter utl_file_dir

NAME				     TYPE			       VALUE
------------------------------------ --------------------------------- ------------------------------
utl_file_dir			     string			       /home/oracle/logminer

3、准备测试数据

[email protected]>conn zx/zx
Connected.
[email protected]>create table log_miner (id number,name varchar2(10));

Table created.

[email protected]>insert into log_miner values(1,‘zx‘);

1 row created.

[email protected]>insert into log_miner values(1,‘lx‘);

1 row created.

[email protected]>insert into log_miner values(1,‘xx‘);

1 row created.

[email protected]>commit;

Commit complete.

4、创建数据字典

[email protected]>conn / as sysdba
Connected.
[email protected]>desc dbms_logmnr_d
PROCEDURE BUILD
 Argument Name			Type			In/Out Default?
 ------------------------------ ----------------------- ------ --------
 DICTIONARY_FILENAME		VARCHAR2		IN     DEFAULT
 DICTIONARY_LOCATION		VARCHAR2		IN     DEFAULT
 OPTIONS			NUMBER			IN     DEFAULT
PROCEDURE SET_TABLESPACE
 Argument Name			Type			In/Out Default?
 ------------------------------ ----------------------- ------ --------
 NEW_TABLESPACE 		VARCHAR2		IN

[email protected]>exec dbms_logmnr_d.build(DICTIONARY_FILENAME=>‘dictionary.ora‘,DICTIONARY_LOCATION=>‘/home/oracle/logminer‘);
LogMnr Dictionary Procedure started
LogMnr Dictionary File Opened
Procedure executed successfully - LogMnr Dictionary Created

PL/SQL procedure successfully completed.

[email protected]>!ls -l /home/oracle/logminer/dictionary.ora
-rw-r--r-- 1 oracle oinstall 41483316 Nov 11 21:08 /home/oracle/logminer/dictionary.ora

LogMiner工具实际上是由两个新的PL/SQL内建包((DBMS_LOGMNR 和 DBMS_ LOGMNR_D)和四个V$动态性能视图(视图是在利用过程DBMS_LOGMNR.START_LOGMNR启动LogMiner时创建)组成。在使用LogMiner工具分析redo log文件之前,可以使用DBMS_LOGMNR_D 包将数据字典导出为一个文本文件。该字典文件是可选的,但是如果没有它,LogMiner解释出来的语句中关于数据字典中的部分(如表名、列名等)和数值都将是16进制的形式,我们是无法直接理解的。例如,下面的sql语句:

INSERT INTO dm_dj_swry (rydm, rymc) VALUES (00005, ‘张三‘);

LogMiner解释出来的结果将是下面这个样子:

insert into Object#308(col#1, col#2) values (hextoraw(‘c30rte567e436‘), hextoraw(‘4a6f686e20446f65‘));

创建数据字典的目的就是让LogMiner引用涉及到内部数据字典中的部分时为他们实际的名字,而不是系统内部的16进制。数据字典文件是一个文本文件,使用包DBMS_LOGMNR_D来创建。如果我们要分析的数据库中的表有变化,影响到库的数据字典也发生变化,这时就需要重新创建该字典文件。另外一种情况是在分析另外一个数据库文件的重作日志时,也必须要重新生成一遍被分析数据库的数据字典文件。

5、确认当前处理联机状态的redo日志

[email protected]>select group#,status from v$log;

    GROUP# STATUS
---------- ------------------------------------------------
	 1 INACTIVE
	 2 CURRENT
	 3 INACTIVE
[email protected]>select group#,member from v$logfile;

    GROUP# MEMBER
---------- ----------------------------------------------------------------------------------------------------
	 3 /u02/app/oracle/oradata/orcl/redo03.log
	 2 /u02/app/oracle/oradata/orcl/redo02.log
	 1 /u02/app/oracle/oradata/orcl/redo01.log

可以看出redo02处于current状态

6、加入需要分析的日志

--第一个日志文件使用dbms_logmnr.new
[email protected]>exec dbms_logmnr.add_logfile(LOGFILENAME=>‘/u02/app/oracle/oradata/orcl/redo02.log‘,OPTIONS=>dbms_logmnr.new);

PL/SQL procedure successfully completed.
--如果需要加入其他的日志使用如下语句
exec dbms_logmnr.add_logfile(LOGFILENAME=>‘/u02/app/oracle/oradata/orcl/redo03.log‘,OPTIONS=>dbms_logmnr.addfile);

7、使用LogMiner进行分析

[email protected]>exec dbms_logmnr.start_logmnr(DICTFILENAME=>‘/home/oracle/logminer/dictionary.ora‘);

PL/SQL procedure successfully completed.

[email protected]>col seg_name for a15
[email protected]>col seg_owner for a15
[email protected]>col operation for a20
[email protected]>col sql_redo for a180
[email protected]>set linesize 200
[email protected]>select seg_owner,seg_name,operation,sql_redo from v$logmnr_contents where seg_owner=‘ZX‘ and seg_name=‘LOG_MINER‘;

SEG_OWNER	SEG_NAME	OPERATION	     SQL_REDO
--------------- --------------- -------------------- --------------------------------------------------------------------------------
ZX		LOG_MINER	DDL		     create table log_miner (id number,name varchar2(10));
ZX		LOG_MINER	INSERT		     insert into "ZX"."LOG_MINER"("ID","NAME") values (‘1‘,‘zx‘);
ZX		LOG_MINER	INSERT		     insert into "ZX"."LOG_MINER"("ID","NAME") values (‘1‘,‘lx‘);
ZX		LOG_MINER	INSERT		     insert into "ZX"."LOG_MINER"("ID","NAME") values (‘1‘,‘xx‘);

以上为分析在线redo日志的过程,分析归档日志的步骤同样,只是在添加日志文件的时候把在线redo日志换为归档日志即可。归档日志也可以传输到其他数据库服务器上进行数据分析,但分析时需要使用源库的字典文件。

LogMiner使用注意事项:

  1. 源库与Mining数据库必须运行在同样的硬件平台上,windows的不可以传到Linux上进行分析
  2. Mining数据库的版本大于等于源库的数据库版本
  3. Mining数据库的字符集需要与源库一致或是源库的超集

参考文档:http://www.cnblogs.com/shishanyuan/p/3140440.html

官方文档:http://docs.oracle.com/cd/E11882_01/server.112/e22490/logminer.htm#SUTIL1557

时间: 2024-10-11 05:59:15

使用LogMiner分析oracle的redo日志和归档的相关文章

Shell: extract more from listener.log (分析oracle监听日志)

最近遇到了两起数据库连接数不足的问题, 通常都会预留一些会话增加的情况, 但在一些特殊情况下如连接风暴(logon storm), 如果在监听中没有做rate限流,对数据库来说巨大的冲击可能会导致数据库Hang 或 ora-20 或ora-18 错误. 对于Hang并伴有进程数不足的情况,AWR.ASH 都可能无法升成,甚至数据库都无法登录或做SSD 都不成功, 这时候LISTENER.LOG 就成了"破案"时关键的线索. 下面记录分享一些分析listener.log的一些脚本.(No

Oracle 采用logmnr 分析在线redo日志

logmnr 需要先安装 才能使用. 安装步骤: 以sys用户登录 执行如下脚本进行安装 @ORACLE_HOME/rdbms/admin/dbmslm.sql @ORACLE_HOME/rdbms/admin/dbmslmd.sql 使用前步骤: 设定系统参数 utl_file_dir用于存储数据字典文件 alter system set utl_file_dir='/home/oracle/halee' scope=spfile; 生成所分析数据库对应的数据字典文件,保证分析时,在线日志或者

Oracle redo 日志切换时间频率

DB: 11.2.0.3.0 查看Oracle的redo日志切换频率 两条SQL,原理是一样的,第二个用到了统计函数 时间单位:分钟 方法一. select * from v$log a where a.THREAD# = 1 ; set line 200select b.SEQUENCE#, b.FIRST_TIME,a.SEQUENCE#,a.FIRST_TIME,round(((a.FIRST_TIME-b.FIRST_TIME)*24)*60,2) from v$log_history

Oracle Logminer 分析重做日志RedoLog和归档日志ArchiveLog

在实际开发过程中,有时我们很有可能需要某个表的操作痕迹,或通过记录的SQL语句进行有目的性的数据恢复(此时POINT-IN-TIME恢复已经满足不了更细的粒度).或仅仅是查看: 据说Oracle8i之后,就提供了Logminer日志分析工具,虽然没有GUI图形化的界面,但也阻挡不了使用他的决心. Oracle11g下使用的情况: (1).数据库开启归档模式 在安装Logminer之前,我们先讲数据库设置为归档模式: 注意:如果开启日志分析功能,仅仅是分析系统默认的Redo01.log.Redo0

oracle 11g 之LogMiner分析重做日志实践

1.安装LogMiner 以DBA用户身份运行下面2个脚本: dbmslm.sql用来创建DBMS_LOGMNR包,该包用来分析日志文件. SQL> @$ORACLE_HOME/rdbms/admin/dbmslm.sql; Package created. Grant succeeded. Synonym created. dbmslmd.sql用来创建DBMS_LOGMNR_D包,该包用来创建数据字典文件. SQL> @$ORACLE_HOME/rdbms/admin/dbmslmd.sq

Oracle在线调整redo日志组数及组成员

Oracle在线调整redo日志组数及组成员 一.调整redo日志组大小 操作原因: redo日志一般设置让日志转换时间为10-20分钟,转换太频繁会影响性能.通常情况下每小时不要超过6次!如果AWR(Automated Workload Repository 自动负载信息库) report中log file switch checkpoint incomplete) 比较大,说明redo log之间的切换过于频繁.可以通过增加redo log size来降低切换的频率.但如果redo log

oracle redo日志维护

环境 OS:Red Hat Linux As 5 DB:10.2.0.1 1.添加日志组 alter database add logfile group 4 ('/u01/app/oracle/oradata/oracl/redo04.log') size 50m; 2.添加日志组(指定日志已经存在) alter database add logfile group 4 ('/u01/app/oracle/oradata/oracl/redo04.log') size 50m reuse; 3

oracle联机重做日志文件(online redo log file)

oracle联机重做日志文件(online redo log file几乎所有的发生在oracle的内部变化都记录在online  redo log file中,oracle使用 这些 redo log groups 去恢复数据库,因此它们是非常的重要. 联机重做日志文件的主要工作是:备份数据,1:记录所有的数据改变2:提供了一种恢复机制3:一定是被组织成组的4:至少有两组联机重做日志文件 每一个redo  log 是被分配到 组中, oralce 一次值写一个 online redo log

VC客户端无法登陆都是REDO日志惹的祸

环境:VSPHERE5.5+独立oracle 11G数据库 现象:打开vcenter服务器控制台,输入密码后卡在欢迎界面无响应,客户端也无法正常登陆. 正常重启也不行.由于VC所在虚机为独立磁盘无法做快照,不能备当时状态. 查看所在WINDOWS系统日志发现硬件可能有问题. 这是偏移量,并不能代表硬件有问题,怀疑VC连接的数据库有问题,逐登陆排查.1.登陆11.15.146.2 首先查看数据库进程,正常. 2.查看数据库的告警日志,发现一个问题. 这个实际上是个比较常见的错误.通常来说是因为在日