ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle 10g Logminer 研究及测试

Oracle 10g Logminer 研究及测试

原创 Linux操作系统 作者:tolywang 时间:2009-04-02 15:12:57 0 删除 编辑

         LogMiner 提供了一个处理重做日志文件并将其内容翻译成代表对数据库的逻辑操作的SQL 语句的过程。LogMiner 运行在Oracle 版本8.1 或者更高版本中。

 

 

一,如何使用Logminer:    

先要安装logminer的两个包;以SYS用户运行下面两个脚本, 其中第一个脚本dbmslm.sql用来创建DBMS_LOGMNR包,该包用来分析日志文件。第二个脚本dbmslmd.sql用来创建DBMS_LOGMNR_D包,该包用来创建数据字典文件  

D:\oracle\product\10.2.0\db_1\RDBMS\ADMIN>sqlplus /nolog

SQL*Plus: Release 10.2.0.4.0 - Production on 星期五 4 10 17:49:02 2009

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

SQL> conn  sys/oracle as sysdba

已连接。

SQL>

SQL> @dbmslm.sql

程序包已创建。

授权成功。

SQL>

SQL> @dbmslmd.sql

程序包已创建。

 

 

 

二, 创建数据字典文件 

     数据字典文件是一个文本文件,使用包DBMS_LOGMNR_D来创建,如果我们要分析的数据库中的表有变化(比如表结构有变化等),影响到库的数据字典也发生变化。另外一种情况是在分析另外一个数据库文件的重做日志时,也必须要重新生成一遍被分析数据库的数据字典文件。  

首先需要修改参数UTL_FILE_DIR , 该参数值为服务器中放置数据字典文件的目录,10g中我们通过动态修改参数的方式来修改,然后重新启动数据库生效。其中logs_utl_file目录先期建立好

SQL> alter system set UTL_FILE_DIR='d:\oracle\product\10.2.0\oradata\test\logs_utl_file'  scope=spfile;                                                                                                                                         系统已更改。                                                           

SQL> shutdown immediate

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL>

SQL> startup

ORACLE 例程已经启动。

Total System Global Area  167772160 bytes

Fixed Size                  1295608 bytes

Variable Size             125831944 bytes

Database Buffers           33554432 bytes

Redo Buffers                7090176 bytes

数据库装载完毕。

数据库已经打开。

SQL>

SQL> show parameter UTL_FILE

NAME                                 TYPE

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

VALUE

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

utl_file_dir                         string

d:\oracle\product\10.2.0\orada

ta\test\logs_utl_file

SQL>

 

 

然后创建数据字典文件:

BEGIN

dbms_logmnr_d.build(

dictionary_filename => ' logminer_dict.ora', 

dictionary_location => ' D:\oracle\product\10.2.0\oradata\test\logs_utl_file');

END;

/

OK , 可以看到在logs_ult_file 中已经生成了logminer_dict.ora 数据字典文件。数据字典文件是可以打开的文本文件。有兴趣可以打开看看。

创建数据字典是让logminer引用实际到内部数据字典中的部分是使用对象的名称,而不是系统内部的16进制的ID. 

 

 

 

三, 创建要分析的日志文件(在线日志或归档日志)的列表

1)分析在线的重做日志

A。建立列表

SQL> execute dbms_logmnr.add_logfile(LogFileName=>'d:\oracle\product\10.2.0\orad

ata\test\redo01.log', ptions=>dbms_logmnr.new);

PL/SQL 过程已成功完成。

B。添加其他日至文件到列表 

SQL> execute dbms_logmnr.add_logfile(LogFileName=>'d:\oracle\product\10.2.0\orad

ata\test\redo02.log', ptions=>dbms_logmnr.addfile);

PL/SQL 过程已成功完成。

 

SQL> execute dbms_logmnr.add_logfile(LogFileName=>'d:\oracle\product\10.2.0\orad

ata\test\redo03.log', ptions=>dbms_logmnr.addfile);

PL/SQL 过程已成功完成。

 

2)分析归档的重做日志 

A。建立列表

SQL> execute dbms_logmnr.add_logfile(LogFileName=>'d:\oracle\product\10.2.0\orad

ata\archive\ARC00052_0684166863.001', ptions=>dbms_logmnr.new);

PL/SQL 过程已成功完成。

B。添加其他日志文件到列表 

SQL> execute dbms_logmnr.add_logfile(LogFileName=>'d:\oracle\product\10.2.0\orad

ata\archive\ARC00053_0684166863.001', ptions=>dbms_logmnr.addfile);

PL/SQL 过程已成功完成。 

 

如果你觉得不需要分析已经在列表中的在线或归档日志,可以通过removefile命令删除:

SQL> execute dbms_logmnr.add_logfile(LogFileName=>'d:\oracle\product\10.2.0\orad

ata\archive\ARC00053_0684166863.001', ptions=>dbms_logmnr.removefile);

PL/SQL 过程已成功完成。

 

 

 

四, 使用Logminer进行日志分析

 

无限制条件:

SQL> execute dbms_logmnr.start_logmnr(DictFileName=> 'D:\oracle\product\10.2.0\o

radata\test\logs_utl_file\logminer_dict.ora') ;

PL/SQL 过程已成功完成。

 

有限制条件:

通过对过程DBMS_LOGMNR.START_LOGMNR中的时间或者SCN参数的设置,可以缩小分析日志文件的范围:

如我们仅仅分析2009223日到2005726日的日志:

SQL> execute  dbms_logmnr.start_logmnr(

DictFileName => ' D:\oracle\product\10.2.0\o

radata\test\logs_utl_file\logminer_dict.ora ',

StartTime => to_date('2009-2-23 00:00:00','YYYY-MM-DD HH24:MI:SS')

EndTime => to_date(''2009-2-26 23:59:59','YYYY-MM-DD HH24:MI:SS ')); 

 

相关的参数如下:

参数 参数类型 默认值 含义

StartScn 数字型 0 分析重作日志中SCNStartScn日志文件部分

EndScn 数字型 0 分析重作日志中SCNEndScn日志文件部分

StartTime 日期型 1998-01-01 分析重作日志中时间戳≥StartTime的日志文件部分

EndTime 日期型 2988-01-01 分析重作日志中时间戳≤EndTime的日志文件部分

DictFileName 字符型 字典文件该文件包含一个数据库目录的快照。

使用该文件可以使得到的分析结果是可以理解的文本形式,

而非系统内部的16进制

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

 

 

 

五, 得到分析结果:  

到现在为止,我们已经分析得到了重作日志文件中的内容。动态性能视图v$logmnr_contents包含LogMiner分析得到的所有的信息。

SELECT sql_redo FROM v$logmnr_contents;

 

如果我们仅仅想知道某个用户对于某张表的操作,可以通过下面的SQL查询得到,该查询可以得到用户TONY对表 R_WIP_TST 所作的一切工作。

SQL>; SELECT sql_redo FROM v$logmnr_contents WHERE username='TONY' AND tablename='R_WIP_TST';   

 

需要强调一点的是,视图v$logmnr_contents中的分析结果仅在我们运行过程'dbms_logmrn.start_logmnr'  这个会话的生命期中存在(如果执行了DBMS_LOGMNR.END_LOGMNR分析结果将消失)。这是因为所有的LogMiner存储都在PGA内存中,所有其他的进程是看不到它的,同时随着进程的结束,分析结果也随之消失。

 

如果需要,可以通过removefile命令删除日志分析文件

SQL> execute dbms_logmnr.add_logfile(LogFileName=>'d:\oracle\product\10.2.0\oradata\archive\ARC00052_0684166863.001', ptions=>dbms_logmnr.removefile);

 

 

六, 使用DBMS_LOGMNR.END_LOGMNR结束日志分析过程, 释放内存

最后,使用过程DBMS_LOGMNR.END_LOGMNR终止日志分析事务,此时PGA内存区域被清除,分析结果也随之不再存在。

SQL> execute dbms_logmnr.end_logmnr; 

 

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

请登录后发表评论 登录
全部评论
Oracle , MySQL, SAP IQ, SAP HANA, PostgreSQL, Tableau 技术讨论,希望在这里一起分享知识,讨论技术,畅谈人生 。

注册时间:2007-12-10

  • 博文量
    5595
  • 访问量
    13267785