使用oracle的logmnr分析工具

转载 2013年12月01日 21:43:22

1.安装logminer:

      要安装LogMiner工具,必须首先要运行下面这样两个脚本,

      @F:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\dbmslm.sql

      @F:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\dbmslmd.sql.

      这两个脚本必须均以SYS用户身份运行。

2 创建数据字典文件
首先在init.ora初始化参数文件中,添加参数UTL_FILE_DIR,该参数值为服务器中放置数据

字典文件的目录。如:
utl_file_dir=F:\hisrun

[SYS@orcl] SQL>execute dbms_logmnr_d.build('showdict.ora','F:\hisrun');
BEGIN dbms_logmnr_d.build('showdict.ora','F:\hisrun'); END;

*
第 1 行出现错误:
ORA-01308: 未设置初始化参数 utl_file_dir
ORA-06512: 在 "SYS.DBMS_LOGMNR_INTERNAL", line 3474
ORA-06512: 在 "SYS.DBMS_LOGMNR_INTERNAL", line 3552
ORA-06512: 在 "SYS.DBMS_LOGMNR_D", line 12
ORA-06512: 在 line 1


[SYS@orcl] SQL>show parameter utl_file;

NAME                                 TYPE
------------------------------------ ----------------------
VALUE
------------------------------
utl_file_dir                         string

[SYS@orcl] SQL>show parameter utl;

NAME                                 TYPE
------------------------------------ ----------------------
VALUE
------------------------------
create_stored_outlines               string

utl_file_dir                         string

[SYS@orcl] SQL>show user;
USER 为 "SYS"
[SYS@orcl] SQL>alter system set utl_file_dir='F:\hisrun' scope=spfile;

系统已更改。

[SYS@orcl] SQL>show parameter utl

NAME                                 TYPE
------------------------------------ ----------------------
VALUE
------------------------------
create_stored_outlines               string

utl_file_dir                         string

[SYS@orcl] SQL>shutdown abort
ORACLE 例程已经关闭。
[SYS@orcl] SQL>startup
ORACLE 例程已经启动。

Total System Global Area 612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             218106756 bytes
Database Buffers          385875968 bytes
Redo Buffers                7135232 bytes
数据库装载完毕。
数据库已经打开。

[SYS@orcl] SQL>show parameter utl;

NAME                                 TYPE
------------------------------------ ----------------------
VALUE
------------------------------
create_stored_outlines               string

utl_file_dir                         string
F:\hisrun
[SYS@orcl] SQL>execute dbms_logmnr_d.build('showdict.ora','F:\hisrun');

20100122补充:SQL> execute dbms_logmnr_d.build(dictionary_filename=>'showdict.ora',dictionary_l
ocation=>'F:\hisrun');

PL/SQL 过程已成功完成。

3 将要分析的日志文件加入要分析的log list中,察看有哪些日志文件可以用select * from v$logfile;查询已经加入那些可以用select * from v$logmnr_logs(注:查询必须在同一个会话中查询,单独开查询将查不到)语句如下:

execute dbms_logmnr.add_logfile('F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG
',dbms_logmnr.new);

[SYS@orcl] SQL>select member from v$logfile;

MEMBER
--------------------------------------------------------------------------------
F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG
F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG
F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG

[SYS@orcl] SQL>execute dbms_logmnr.add_logfile('F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG',dbms_logmnr.new);

PL/SQL 过程已成功完成。

再增加一个:

[SYS@orcl] SQL>execute dbms_logmnr.add_logfile('F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG',dbms_logmnr.addfile);

如果需要从分析列表里去掉一个文件用

('F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG',dbms_logmnr.removefile);

20100122补充:

   (1)分析在线重作日志文件

        如上所示

     (2)分析离线日志文件

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

4 更改会话时间表达方式(注一定要在本会话下修改,我开始发生错误就是因为在别的会话里修改的,如果允许,可以将数据库默认的时间表达方式修改掉)会话内修改为alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'; 系统设置在注册表。

5 查询分析的日志文件包含的scn范围和日期范围。

  select low_time,high_time,low_scn,next_scn from v$logmnr_logs;会列出你加入的日志文件的以上信息。

6 使用LogMiner进行日志分析
     
      SQL>execute dbms_logmnr.start_logmnr(DictFileName=>'F:\hisrun\showdict.ora',options=>dbms_logmnr.committed_data_only,startscn=>116295629,endscn=>116685026);

20100122补充:

(1)无限制条件

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

(2)有限制条件

通过对过程DBMS_ LOGMNR.START_LOGMNR中几个不同参数的设置(参数含义见表1),可以缩小要分析日志文件的范围。通过设置起始时间和终止时间参数我们可以限制只分析某一时间范围的日志。如下面的例子,我们仅仅分析2001年9月18日的日志,:

SQL> EXECUTE dbms_logmnr.start_logmnr( 
DictFileName => ' e:\oracle\logs\ v816dict.ora ', 
StartTime => to_date('2001-9-18 00:00:00','YYYY-MM-DD HH24:MI:SS') 
EndTime => to_date(''2001-9-18 23:59:59','YYYY-MM-DD HH24:MI:SS '));

  也可以通过设置起始SCN和截至SCN来限制要分析日志的范围:

SQL> EXECUTE dbms_logmnr.start_logmnr( 
DictFileName => ' e:\oracle\logs\ v816dict.ora ', 
StartScn => 20, 
EndScn => 50);

7 观察分析结果(LogMiner的分析结果是放在v$logmnr_contents中)

       A.SQL> select sql_redo from v$logmnr_contents where upper(sql_redo) like '%DELETE%;

              在视图v$logmnr_contents中查找真实被删除的记录。
       
       B.SQL> SELECT timeseg_name,sql_redo FROM v$logmnr_contents WHERE seg_name='MS_CF01' and sql_redo like '%DELETE%';
              
              功能同A。

       C.SQL> select sql_undo from v$logmnr_contents where seg_name='MS_CF01' and sql_redo like '%delete%' and rownum<10;

       D.SQL> select sql_undo from v$logmnr_contents where seg_name='MS_CF01' and upper(OPERATION)='DELETE';

              针对SQL_REDO重做记录重做指定行变化的SQL语句,所对应的反操作就是重做记录回退或恢复指定行变化的SQL语句。
        select timestamp,sql_undo,sql_redo from v$logmnr_contents where seg_name='MS_CF01'

20100122补充:

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

8 结束分析,清空v$logmnr_contents

      SQL>execute dbms_logmnr.end_logmnr (结束会话,会自清除分析记录)

9 下面将就视图v$logmnr_contents的常用字段含义进行说明:

其中operation指的是操作,sql_redo指的是实际的操作,sql_undo指的是用于取消的相反的操作)

         名称                    含义
        ----------------------- -------- --------------------------------------------
         SCN                    特定数据变化的系统更改号
         TIMESTAMP              数据改变发生的时间
         COMMIT_TIMESTAMP       数据改变提交的时间
         SEG_OWNER              数据发生改变的段名称
         SEG_NAME               段的所有者名称
         SEG_TYPE               数据发生改变的段类型
         SEG_TYPE_NAME          数据发生改变的段类型名称
         TABLE_SPACE            变化段的表空间
         ROW_ID                 特定数据变化行的ID
         SESSION_INFO           数据发生变化时用户进程信息
         OPERATION              重做记录中记录的操作(如INSERT)
         SQL_REDO               可以为重做记录重做指定行变化的SQL语句(正向操作)
         SQL_UNDO               可以为重做记录回退或恢复指定行变化的SQL语句(反向操作)

      注:SQL_REDO 列显示的是所做的操作(SQL 语句),SQL_UNDO 列显示的是要恢复该操作所需要的SQL语句

          只要顺序执行SQL_UNDO的内容,就可以恢复到修改前的数据。

相关文章推荐

LOGMNR简单而强大的工具

在ORACLE数据库中,LGWR进程将数据库中进行的DML等操作信息记录在日志文件中,在归档模式下,日志文件还会写入到归档日志文件中。在数据库发生故障崩溃后,恢复时数据库可以根据日志信息来重演事务,完...
  • gltyi99
  • gltyi99
  • 2014年04月29日 17:03
  • 620

ORACLE 几种同步灾备手段(OGG,ADG,DSG,高级复制,流复制,logmnr)

目前所接触的Oracle 的灾备以及同步手段主要有ADG,OGG,DSG,高级复制,流复制以及自主开发的基于logmnr的数据同步软件,各有优劣。各自评价如下: 1. ADG,最常用的同城,异地灾备解...

oracle 查看日志 LOGMNR 资料

资料一:如果被人不小心删除了数据库的表对象里面的数据,而我们又不知道准确的操作时间,这时,就可以使用oracle的LOGMNR工具,分析查询数据库的归档日志,从而查询该误操作的内容和时间,有些直接调用...
  • xys_777
  • xys_777
  • 2011年07月15日 11:06
  • 3558

dbms_logmnr使用

  • 2014年05月17日 16:53
  • 37KB
  • 下载

logmnr 的使用详解

select  * from v$log select * from v$logfile exec dbms_logmnr.add_logfile('/u01/app/oracle/orada...

[Logmnr]使用logminer找回被误删的数据

LogMiner日志挖掘技术在有些时候可以被比作是命悬一线的救命稻草,比方说误删除数据(如delete执行不当),可以通过LogMiner挖掘日志文件将这些数据补插回来 使用LogMiner预览...

logmnr使用

SQL> @?/rdbms/admin/dbmslm.sql 程序包已创建。 授权成功。 SQL> @?/rdbms/admin/dbmslmd.sql ...

oracle sql_trace跟踪与使用tkprof工具分析

当执行某条sql语句,或者执行某个过程/包的时候性能出现问题,我们可以通过sql_trace来跟踪它们的执行情况,在跟踪文件中输出了,整个会话,或者整个数据库的执行情况。 首先,我们需要开启sq...

oracle 日志分析工具logminer的安装使用

测试环境: OS:redHat 5.5 DB:oracle11g logminer作为相关的日志分析工具集成与oracle中,我们可通过该工具清楚的分析重做相关日志和归档日志中的所有事物...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用oracle的logmnr分析工具
举报原因:
原因补充:

(最多只允许输入30个字)