转自 http://blog.itpub.net/26613085/viewspace-1064008/

1、安装logminer以及生成logminer数据字典所需要的包(需使用sys用户 
[oracle@rac1 ~]$ echo $ORACLE_HOME
/u01/app/oracle/product/10.2.0/db_1

SQL> show user 
USER is "SYS"
SQL> @/u01/app/oracle/product/10.2.0/db_1/rdbms/admin/dbmslm.sql

Package created.

Grant succeeded.

SQL> @/u01/app/oracle/product/10.2.0/db_1/rdbms/admin/dbmslmd.sql

Package created.

2、生成数据字典文件
创建logminer存放的目录
[oracle@rac1 logmine_dir]$ mkdir /u01/logminer_dir

修改oracle的utl_file_dir参数

SQL> alter system set utl_file_dir='/u01/logminer_dir' scope=both;
alter system set utl_file_dir='/u01/logminer_dir' scope=both
                 *
ERROR at line 1:
ORA-02095: specified initialization parameter cannot be modified

SQL> alter system set utl_file_dir='/u01/logminer_dir/' scope=spfile;

System altered.

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area  285212672 bytes
Fixed Size                  1218992 bytes
Variable Size              67110480 bytes
Database Buffers          213909504 bytes
Redo Buffers                2973696 bytes
Database mounted.
Database opened.
SQL> show parameter utl_file_dir

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
utl_file_dir                         string      /u01/logminer_dir/

SQL> begin
  2  sys.dbms_logmnr_d.build(dictionary_filename =>'logminerdcit.ora',
  3                          dictionary_location =>'/u01/logminer_dir',
  4                                       options=>dbms_logmnr_d.store_in_flat_file);
  5  end;
  6  /
begin
*
ERROR at line 1:
ORA-01336: specified dictionary file cannot be opened
ORA-29280: invalid directory path
ORA-06512: at "SYS.DBMS_LOGMNR_INTERNAL", line 3474
ORA-06512: at "SYS.DBMS_LOGMNR_INTERNAL", line 3552
ORA-06512: at "SYS.DBMS_LOGMNR_D", line 12
ORA-06512: at line 2

SQL> begin
  2  sys.dbms_logmnr_d.build(dictionary_filename =>'logminerdcit.ora',
  3                          dictionary_location =>'/u01/logminer_dir/',
  4                                       options=>dbms_logmnr_d.store_in_flat_file);
  5  end;
  6  /

PL/SQL procedure successfully completed.

看来这个路径后面的斜杠不能省略。
[oracle@rac1 ~]$ cd /u01/logminer_dir/
[oracle@rac1 logminer_dir]$ ll
total 22852
-rw-r--r--  1 oracle oinstall 23368495 Dec 22 17:05 logminerdcit.ora
在指定的目录下面已经可以看到刚才生成的数据字典文件了。
3、下面我们在数据库里面创建一个表,然后插入几条记录,归档日志,然后再把该表drop掉,看看logminer能不能查到相关的信息

SQL> create table dcits_test(id number);

Table created.

SQL> insert into dcits_test values(1);

1 row created.

SQL> insert into dcits_test values(2);

1 row created.

SQL> insert into dcits_test values(3);

1 row created.

SQL> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /u01/app/oracle/oradata/dcits/archive/
Oldest online log sequence     4
Next log sequence to archive   6
Current log sequence           6
目前数据库已经是归档模式,并且归档位置在/u01/app/oracle/oradata/dcits/archive/

先查看下该目录
[oracle@rac1 ~]$ cd /u01/app/oracle/oradata/dcits/archive
[oracle@rac1 archive]$ ll
total 0
新修改的归档模式,还没有进行归档操作
下面对当前的在线日志进行归档

SQL> alter system archive log current;

System altered.

再查看下刚才的归档目录,可见已经产生了一个归档日志
[oracle@rac1 archive]$ pwd
/u01/app/oracle/oradata/dcits/archive
[oracle@rac1 archive]$ ll
total 16080
-rw-r-----  1 oracle oinstall 16441856 Dec 22 17:17 1_6_834506858.dbf
下面我们把这个表drop掉

SQL> drop table dcits_test;

Table dropped.
然后我们把刚才归档的日志和当前在线日志都进行分析下,看看能不能查看到这些操作信息
看下当前哪个日志在线
SQL> select * from v$log;
    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIM
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------
         1          1          5   52428800          1 YES INACTIVE                508835 20-DEC-13
         2          1          6   52428800          1 YES INACTIVE                537485 22-DEC-13
         3          1          7   52428800          1 NO  CURRENT                 545026 22-DEC-13
查看日志组3的文件位置

SQL> select * from v$logfile where group#=3;

GROUP# STATUS  TYPE    MEMBER                                             IS_
---------- ------- ------- -------------------------------------------------- ---
         3         ONLINE  /u01/app/oracle/oradata/dcits/redo03.log           NO

SQL> begin
  2    sys.dbms_logmnr.add_logfile(LogFileName => '/u01/app/oracle/oradata/dcits/archive/1_6_834506858.dbf',
  3                                     Options=> dbms_logmnr.new);
  4    sys.dbms_logmnr.add_logfile(LogFileName => '/u01/app/oracle/oradata/dcits/redo03.log',
  5                                     Options=> dbms_logmnr.new);
  6  end;
  7  /

PL/SQL procedure successfully completed.
开始使用LogMiner进行日志分析

SQL> begin
  2    sys.dbms_logmnr.start_logmnr(DictFileName =>'/u01/logminer_dir/logminerdcit.ora');
  3  end;
  4  /

PL/SQL procedure successfully completed.

SQL> select sql_redo from V$LOGMNR_CONTENTS where upper(sql_redo) like '%DCITS_TEST%';

SQL_REDO
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
drop table dcits_test;
delete from "SYS"."OBJ$" where "OBJ#" = '51383' and "DATAOBJ#" = '51383' and "OWNER#" = '0' and "NAME" = 'DCITS_TEST' and "NAMESPACE" = '1' and "SUBNAME" IS NULL and "TYPE#" = '2' and "CTIME" = TO_DAT
E('22-DEC-13', 'DD-MON-RR') and "MTIME" = TO_DATE('22-DEC-13', 'DD-MON-RR') and "STIME" = TO_DATE('22-DEC-13', 'DD-MON-RR') and "STATUS" = '1' and "REMOTEOWNER" IS NULL and "LINKNAME" IS NULL and "FLA
GS" = '0' and "OID$" IS NULL and "SPARE1" = '6' and "SPARE2" = '1' and "SPARE3" IS NULL and "SPARE4" IS NULL and "SPARE5" IS NULL and "SPARE6" IS NULL and ROWID = 'AAAAASAABAAAMRjAAO';
(为什么只看到个drop语句呢?)
结束分析,释放内存

SQL> begin
  2    sys.dbms_logmnr.end_logmnr;
  3  end;
  4  /

PL/SQL procedure successfully completed.

上面的实验并没有显示create table语句,原因参考文档:
--  PROCEDURE INFORMATION:
  --  #1 dbms_logmnr.add_logfile():
  --     DESCRIPTION:
  --       Registers a redo log file with LogMiner. Multiple redo logs can be
  --       registered by calling the procedure repeatedly. The redo logs
  --       do not need to be registered in any particular order.
  --       Both archived and online redo logs can be mined.  If a successful
  --       call to the procedure is made a call to start_logmnr() must be
  --       made before selecting from v$logmnr_contents.
  --
  --     CONSTANTS:
  --       dbms_logmnr.NEW:  Starts a new list. Any file registered prior to
  --         this call is discarded.

--       dbms_logmnr.ADDFILE:  Adds the redo log to the existing
  --         list. LogMiner checks to make sure that the redo log is from
  --         the same database (DB_ID and RESETLOGS_SCN) incarnation as the
  --         ones previously added.

SQL> begin
  2    sys.dbms_logmnr.add_logfile(LogFileName => '/u01/app/oracle/oradata/dcits/archive/1_6_834506858.dbf',
  3                                     Options=> dbms_logmnr.new);
  4    sys.dbms_logmnr.add_logfile(LogFileName => '/u01/app/oracle/oradata/dcits/redo03.log',
  5                                     Options=> dbms_logmnr.new);
  6  end;
  7  /
添加日志文件的时候两个都用到了dbms_logmnr.new,第二条添加在线日志的时候相当于又重新开始一个文件列表,所以'/u01/app/oracle/oradata/dcits/archive/1_6_834506858.dbf'归档日志并没有添加被分析,所以没有看到那个create table dcits_test(id number);
至于为什么没有看到insert语句,等有时间再做下实验,需要alter database add supplemental log data;

 
 

logminer系列文章一(logminer的使用)的更多相关文章

  1. 基于DDD的现代ASP.NET开发框架--ABP系列文章总目录

    ABP相关岗位招聘:给热爱.NET新技术和ABP框架的朋友带来一个高薪的工作机会 ABP交流会录像视频:ABP架构设计交流群-7月18日上海线下交流会的内容分享(有高清录像视频的链接) 代码自动生成: ...

  2. 【NLP】蓦然回首:谈谈学习模型的评估系列文章(一)

    统计角度窥视模型概念 作者:白宁超 2016年7月18日17:18:43 摘要:写本文的初衷源于基于HMM模型序列标注的一个实验,实验完成之后,迫切想知道采用的序列标注模型的好坏,有哪些指标可以度量. ...

  3. 【微信小程序开发•系列文章六】生命周期和路由

    这篇文章理论的知识比较多一些,都是个人观点,描述有失妥当的地方希望读者指出. [微信小程序开发•系列文章一]入门 [微信小程序开发•系列文章二]视图层 [微信小程序开发•系列文章三]数据层 [微信小程 ...

  4. SQL Server 系列文章快速导航(SWF版)

    一.前言 在博客园写博客不自不觉已经有5个年头了,一开始只是为了记录工作中遇到的问题和解决办法,后来写的文章不自不觉的侧重在SQL Server方面的技术文章,在2014年1月终于鼓起勇气申请了微软S ...

  5. Geotrellis系列文章链接

    本文存放了我在博客园中撰写的Geotrellis系列文章链接,方便查阅! 一.geotrellis使用初探 二.geotrellis使用(二)geotrellis-chatta-demo以及geotr ...

  6. 如何实现一个php框架系列文章【开篇】

    1.本系列文章的目的 实现一个小而美的产品级别php框架 自己动手实现一个新框架仅用于学习交流,不打算替代市面上现有的其他主流框架. 2. 我要一个怎样的PHP框架 简单实用,安全优雅,博采众长 安装 ...

  7. EF和MVC系列文章导航:EF Code First、DbContext、MVC

    对于之前一直使用webForm服务器控件.手写ado.net操作数据库的同学,突然来了EF和MVC,好多新概念泉涌而出,的确犹如当头一棒不知所措.本系列文章可以帮助新手入门并熟练使用EF和MVC,有了 ...

  8. java nio系列文章

    java nio系列教程 基于NIO的Client/Server程序实践 (推荐) java nio与并发编程相关电子书籍   (访问密码 48dd) 理解NIO nio学习记录 图解ByteBuff ...

  9. Java 加解密技术系列文章

    Java 加解密技术系列之 总结 Java 加解密技术系列之 DH Java 加解密技术系列之 RSA Java 加解密技术系列之 PBE Java 加解密技术系列之 AES Java 加解密技术系列 ...

随机推荐

  1. 12、xamarin form中实现H5 网页唤醒微信支付的方法

    在微信的支付中有种支付叫微信H5支付.方便用户在网页中轻松唤起微信进行支付. 当然微信不推荐大家使用这样的方式唤起微信支付.建议app还是使用正常的微信支付sdk即可 服务端与其他的建议参考微信支付官 ...

  2. 获取设备信息——获取客户端ip地址和mac地址

    1.获取本地IP(有可能是 内网IP,192.168.xxx.xxx) /** * 获取本地IP * * @return */ public static String getLocalIpAddre ...

  3. 多表连接的三种方式详解 HASH JOIN MERGE JOIN NESTED LOOP

    在多表联合查询的时候,如果我们查看它的执行计划,就会发现里面有多表之间的连接方式. 之前打算在sqlplus中用执行计划的,但是格式看起来有点乱,就用Toad 做了3个截图. 从3张图里我们看到了几点 ...

  4. Beta阶段——Scrum 冲刺博客第二天

    一.当天站立式会议照片一张 二.每个人的工作 (有work item 的ID),并将其记录在码云项目管理中 昨天已完成的工作 实现对index界面的重新制作,变成了原来的main界面,直接在该界面输入 ...

  5. MyEclipse2014破解方法

    之前一直使用的MyEclipse2014过期了,无奈之下只能在网上搜怎么破解,结果很管用,在这里记录并和大家分享 https://jingyan.baidu.com/article/fdbd42771 ...

  6. 学习ThinkPHP笔记

    学习ThinkPHP笔记 TP的模块化设计 名称 描述 应用 基于同一个入口文件访问的项目我们称之为一个应用. 模块 一个应用下面可以包含多个模块,每个模块在应用目录下面都是一个独立的子目录. 控制器 ...

  7. 牛客网剑指offer java 全部题解

    经过数月的努力,终于更完了牛客网的66道剑指offer,以下的顺序和大家在牛客网的顺序是一样的(排序也花了不少时间),希望对大家找工作/提高算法能力能起到些许帮助. 每天一道剑指offer-二维数组中 ...

  8. ubuntu18---安装python3.6下的virtualenv15.1.0

    动态语言Python有着自己的虚拟环境,虚拟环境是程序执行时的独立执行环境,在同一台服务器中可以创建不同的虚拟环境供不同的系统使用,项目之间的运行环境保持独立性而相互不受影响.例如项目A可以在基于Py ...

  9. Socket编程 - 网络基础知识

    API编程部分:http://www.cnblogs.com/Jimmy1988/p/7895213.html 1. 协议简介 此处,我们主要介绍Linux编程常用的三种协议(TCP/UDP/IP), ...

  10. 详解REST架构风格

    编辑推荐: 本文来自于segmentfault.com,一起了解REST的内在,认识REST的优势,而不再将它当作是“理所当然” 引言 作为Web开发者,你可能或多或少了解一些REST的知识,甚至已经 ...