ITPub博客

首页 > 数据库 > Oracle > LOGMNR的安装和使用

LOGMNR的安装和使用

原创 Oracle 作者:royevictory 时间:2015-12-13 21:30:00 0 删除 编辑

logmnr的安装和使用

SQL> conn sys/sys as sysdba

已连接。

SQL>  @C:\oracle\ora92\rdbms\admin\dbmslmd.sql

过程已创建。

没有错误。

授权成功。

PL/SQL 过程已成功完成。

程序包已创建。

SQL> @C:\oracle\ora92\rdbms\admin\dbmslms.sql

程序包已创建。

没有错误。

授权成功。

SQL> EXECUTE dbms_logmnr_d.build(dictionary_filename=>'v816dict.ora',dictionary_location=>'e:\oracle\logs');

SQL> EXECUTE dbms_logmnr.add_logfile(LogFileName=>'e:\Oracle\oradata\NCDBPX\redo01.log',Options=>dbms_logmnr.new);

PL/SQL procedure successfully completed.

SQL> EXECUTE dbms_logmnr.add_logfile(LogFileName=>'e:\Oracle\oradata\NCDBPX\redo02.log',Options=>dbms_logmnr.ADDFILE);

PL/SQL procedure successfully completed.

SQL> EXECUTE dbms_logmnr.add_logfile(LogFileName=>'e:\Oracle\oradata\NCDBPX\redo03.log',Options=>dbms_logmnr.ADDFILE);

PL/SQL procedure successfully completed.

SQL> EXECUTE dbms_logmnr.start_logmnr(DictFileName=>'e:\oracle\logs\v816dict.ora');

PL/SQL procedure successfully completed.

SQL> select sql_REDO  from v$logmnr_contents where upper(operation)='DELETE' and upper(sql_redo) like '%GPRS_SER%'
  2  /

no rows selected

SQL> ed
Wrote file afiedt.buf

  1* select sql_REDO  from v$logmnr_contents where upper(operation)='CREATE' and upper(sql_redo) like '%EMP%'
SQL> /

no rows selected

--------------------------------------------------------------------------------------

LogMiner的主要用途

LogMiner工具的主要用途有:

(1)跟踪数据库的变化:可以离线的跟踪数据库的变化,而不会影响在线系统的性能。

(2)回退数据库的变化:回退特定的变化数据,减少point-in-time recovery的执行。

(3)优化和扩容计划:可通过分析日志文件中的数据以分析数据增长模式。

Oracle9i LogMiner的增强功能

(1)支持更多数据/存储类型:链接/迁移行、CLUSTER表操作、DIRECT PATH插入以及DDL操作。

(2)提取和使用数据字典的选项:现在数据字典不仅可以提取到一个外部文件中,还可以直接提取到重做日志流中,它在日志流中提供了操作当时的数据字典快照,这样就可以实现离线

分析。

(3)允许对DML操作按事务进行分组:可以在START_LOGMNR()中设置COMMITTED_DATA_ONLY选项,实现对DML操作的分组,这样将按SCN的顺序返回已经提交的事务。

(4)支持SCHEMA的变化:在数据库打开的状态下,如果使用了LogMiner的DDL_DICT_TRACKING选项,Oracle9i的LogMiner将自动对比最初的日志流和当前系统的数据字典,并返回正确的

 DDL语句,并且会自动侦察并标记当前数据字典和最初日志流之间的差别,这样即使最初日志流中所涉及的表已经被更改或者根本已经不存在,LogMiner同样会返回正确的DDL语句。

(5)在日志中记录更多列信息的能力:例如对于UPDATE操作不仅会记录被更新行的情况,还可以捕捉更多已发生的更新操作信息。

(6)支持基于数值的查询:Oracle9i LogMiner在支持原有基于元数据(操作、对象等)查询的基础上,开始支持基于实际涉及到的数据的查询。例如涉及一个工资表,现在可以很容易

地查出员工工资由1000变成2000的原始更新语句,而在之前只能选出所有的更新语句。

LogMiner的安装      
   
要安装LogMiner工具,必须首先要以SYS用户身份运行下面两个脚本文件:

(l)$Oracle_HOME/rdbms/admin/dbmslmd.sql
 
    用来创建DBMS_LOGMNR包,该包用来分析日志文件

(2)$Oracle_HOME/rdbms/admin/dbmslms.sql
  
     用来创建DBMS_LOGMNR_D包,该包用来创建数据字典文件

LogMiner工具的使用    
  
(1)创建数据字典文件(data-dictionary)

创建数据字典的目的就是让LogMiner引用涉及到内部数据字典中的部分时为他们实际的名字,而不是系统内部的16进制。数据字典文件是一个文本文件,使用包DBMS_LOGMNR_D

来创建。 

首先在init.ora初始化参数文件中,指定数据字典文件的位置,也就是添加一个参数UTL_FILE_DIR,该参数值为服务器中放置数据字典文件的目录。如:

UTL_FILE_DIR=e:\Oracle\logs;

重新启动数据库,使新加的参数生效,然后创建数据字典文件:

CONNECT SYS

EXECUTE dbms_logmnr_d.build(dictionary_filename=>'v816dict.ora',dictionary_location=>'e:\oracle\logs');

(2)创建要分析的日志文件列表

Oracle的重作日志分为两种,在线(online)和离线(offline)归档日志文件,下面就分别来讨论这两种不同日志文件的列表创建。

①分析在线重作日志文件

●  创建列表

EXECUTE dbms_logmnr.add_logfile(LogFileName=>'e:\Oracle\oradata\sxf\redo01.log',Options=>dbms_logmnr.new);

●  添加其他日志文件到列表

EXECUTE dbms_logmnr.add_logfile(

LogFileName=>'e:\Oracle\oradata\sxf\redo02.log',

Options=>dbms_logmnr.addfile);

②分析离线日志文件

●  创建列表

EXECUTE dbms_logmnr.add_logfile(LogFileName=>'E:\Oracle\oradata\sxf\archive\ARCARC09108.001',Options=>dbms_logmnr.new);

●  添加另外的日志文件到列表

EXECUTE dbms_logmnr.add_logfile(

LogFileName=>'E:\Oracle\oradata\sxf\archive\ARCARC09109.001',Options=>dbms_logmnr.addfile);

(3)使用LogMiner进行日志分析

 ①无限制条件

EXECUTE dbms_logmnr.start_logmnr(DictFileName=>'e:\oracle\logs\v816dict.ora');
 
 ②有限制条件
   
通过对过程DBMS_ LOGMNR.START_LOGMNR中几个不同参数的设置,可以缩小要分析日志文件的范围。通过设置起始时间和终止时间参数可以限制只分析某一时间范围的日志。

(4)观察分析结果(v$logmnr_contents)

动态性能视图v$logmnr_contents包含LogMiner分析后得到的所有的信息。

与日志分析相关视图还有:

①V$LOGMNR_DICTIONARY:查询使用的数据字典文件。

②V$LOGMNR_PARAMETERS:查询当前LogMiner设定的参数。

③V$LOGMNR_FILES:查询分析的日志文件。

④V$LOGMNR_CONTENTS:日志文件的内容。

3.其他注意事项

(1)LogMiner必须使用被分析数据库实例产生的字典文件,而不是安装LogMiner的数据库产生的字典文件,另外必须保证安装LogMiner数据库的字符集和被分析数据库的字符集相同。

(2)被分析数据库平台必须和当前LogMiner所在数据库平台一样。

(3)LogMiner日志分析工具仅能够分析Oracle 8以后的产品。

 

 

附录:

一、安装LogMiner工具,以下两个脚本以SYSDBA身份运行

@$ORACLE_HOME\rdbms\admin\dbmslm.sql;

@ $ORACLE_HOME\rdbms\admin\dbmslmd.sql; 

第一个脚本用来创建DBMS_LOGMNR包,该包用来分析日志文件。

第二个脚本用来创建DBMS_LOGMNR_D包,该包用来创建数据字典文件。 

二、使用LogMiner工具 

下面将详细介绍如何使用LogMiner工具。 

1、创建数据字典文件(data-dictionary)  
   
1).首先在init.ora初始化参数文件中,指定数据字典文件的位置,也就是添加一个参数UTL_FILE_DIR,该参数值为服务器中放置数据字典文件的目录。如:UTL_FILE_DIR =

($ORACLE_HOME\logs) ,重新启动数据库,使新加的参数生效: 

2).然后创建数据字典文件

SQL> connect /as sysdba

SQL> execute dbms_logmnr_d.build(dictionary_filename => 'dict.ora',dictionary_location => 'G:\oracle\logs');

PL/SQL procedure successfully completed 
   
2、创建要分析的日志文件列表 

1).创建分析列表,即所要分析的日志
 
SQL> execute dbms_logmnr.add_logfile(LogFileName => 'G:\ORACLE\ORADATA\ORADBSP\REDO04.LOG',Options => dbms_logmnr.new);

PL/SQL procedure successfully completeds 
     
2).添加分析日志文件,一次添加1个为宜

SQL> execute dbms_logmnr.add_logfile(LogFileName => 'G:\ORACLE\ORADATA\ORADBSP\REDO05.LOG',Options => dbms_logmnr.ADDFILE);

PL/SQL procedure successfully completed

3、使用logMiner进行日志分析

1).无限制条件,即用数据字典文件对要分析的日志文件所有内容做分析

SQL> execute dbms_logmnr.start_logmnr(DictFileName => 'G:\oracle\logs\dict.ora');

PL/SQL procedure successfully completed 
      
2).带限制条件,可以用scn号或时间做限制条件,也可组合使用

--分析日志列表中时间从07.02.28从10:00到15:00的内容

SQL> execute dbms_logmnr.start_logmnr(startTime => to_date('20070228100000','yyyy-mm-dd hh24:mi:ss'),endTime => to_date('20070228150000','yyyy-mm-

ddhh24:mi:ss'),DictFileName => 'G:\oracle\logs\dict.ora'); 
     
PL/SQL procedure successfully completed

dbms_logmnr.start_logmnr函数的原型为:

PROCEDURE start_logmnr( 
       startScn           IN  NUMBER default 0 , 
       endScn  IN  NUMBER default 0, 
       startTime       IN  DATE default '', 
       endTime         IN  DATE default '', 
       DictFileName     IN  VARCHAR2 default '', 
       Options IN  BINARY_INTEGER default 0 ); 

4.分析后释放内存 
   
SQL> execute dbms_logmnr.end_logmnr;

PL/SQL procedure successfully completed

5.其它

1).删除日志分析文件

exec dbms_logmnr.add_logfile('G:\ORACLE\ORADATA\ORADBSP\REDO04.LOG',dbms_logmnr.removefile); 
    
三、查看LogMiner工具分析结果

SQL> select * from dict t where t.table_name like '%LOGMNR%';--看所有与logmnr相关的视图

TABLE_NAME                     COMMENTS 
------------------------------ -------------------------------------------------------------------------------- 
GV$LOGMNR_CALLBACK             Synonym for GV_$LOGMNR_CALLBACK 
GV$LOGMNR_CONTENTS             Synonym for GV_$LOGMNR_CONTENTS 
GV$LOGMNR_DICTIONARY           Synonym for GV_$LOGMNR_DICTIONARY 
GV$LOGMNR_LOGFILE              Synonym for GV_$LOGMNR_LOGFILE 
GV$LOGMNR_LOGS                 Synonym for GV_$LOGMNR_LOGS 
GV$LOGMNR_PARAMETERS           Synonym for GV_$LOGMNR_PARAMETERS 
GV$LOGMNR_PROCESS              Synonym for GV_$LOGMNR_PROCESS 
GV$LOGMNR_REGION               Synonym for GV_$LOGMNR_REGION 
GV$LOGMNR_SESSION              Synonym for GV_$LOGMNR_SESSION 
GV$LOGMNR_STATS                Synonym for GV_$LOGMNR_STATS 
GV$LOGMNR_TRANSACTION          Synonym for GV_$LOGMNR_TRANSACTION 
V$LOGMNR_CALLBACK              Synonym for V_$LOGMNR_CALLBACK 
V$LOGMNR_CONTENTS              Synonym for V_$LOGMNR_CONTENTS 
V$LOGMNR_DICTIONARY            Synonym for V_$LOGMNR_DICTIONARY 
V$LOGMNR_LOGFILE               Synonym for V_$LOGMNR_LOGFILE 
V$LOGMNR_LOGS                  Synonym for V_$LOGMNR_LOGS 
V$LOGMNR_PARAMETERS            Synonym for V_$LOGMNR_PARAMETERS 
V$LOGMNR_PROCESS               Synonym for V_$LOGMNR_PROCESS 
V$LOGMNR_REGION                Synonym for V_$LOGMNR_REGION 
V$LOGMNR_SESSION               Synonym for V_$LOGMNR_SESSION

TABLE_NAME                     COMMENTS 
------------------------------ -------------------------------------------------------------------------------- 
V$LOGMNR_STATS                 Synonym for V_$LOGMNR_STATS 
V$LOGMNR_TRANSACTION           Synonym for V_$LOGMNR_TRANSACTION

GV$LOGMNR_LOGS 是分析日志列表视图

分析结果在GV$LOGMNR_CONTENTS 视图中,可按以下语句查询:

select scn,timestamp,log_id,seg_owner,seg_type,table_space,data_blk#,data_obj#,data_objd#, 
       session#,serial#,username,session_info,sql_redo,sql_undo  
from logmnr3 t  
where t.sql_redo like 'create%';

如果不能正常查询GV$LOGMNR_CONTENTS视图,并报以下错误,ORA-01306: 在从 v$logmnr_contents 中选择之前必须调用 dbms_logmnr.start_logmnr() 。可采用如下方法:

create table logmnr3 as select * from GV$LOGMNR_CONTENTS;

FAQ:

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

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29302187/viewspace-1871551/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-08-06

  • 博文量
    195
  • 访问量
    527639