LogMiner and supplemental logging

1.0 logminer 简介

  logminer是oracle自带的一种工具。其实它就是一系列的可以在SQLPLUS中运行的package。logminer可以挖掘oracle的redo log。简单的说,就是可以通过logminer阅读redo log。本节包括以下内容

1.1 logminer组成介绍

  logminer的使用环境中包含如下4个元素:

LogMiner使用环境中的4个元素
源数据库
源数据库就是生成redo log的数据库。这些redo log将被logminer挖掘读取。

redo log文件
这里的redo log文件就是源数据库生成的redo log。logminer将会读取这些文件

logminer字典
在redo log存储的信息都是以oracle内部标示方式标示的。比如说,order这个表,在redo log可能会被标记成002.那么用logminer读取出来的结果页是002.这给使用者造成了不便。 而logminer字典就是解决这个问题的。通过logminer字典可以把这些难以理解的标示转化成易懂的数据。
    
mining数据库
就是运行logminer的数据库。因为我们知道logminer是一系列的pl/sql package,所以需要有个数据库来运行它们。 源数据库也可以当做是mining数据库。

   所以,这4者的关系基本就是,源数据库生成redo log文件, redo log数据文件被传递给mining数据库。 logminer读取redo log文件并借助logminer字典把信息翻译成人类能理解的信息。

1.2 logminer使用简介

  这里主要介绍使用logminer的大概流程。

使用logminer的大概流程
1. 指定logminer字典
在这一步可以通过DBMS_LOGMNR_D.BUILD 这个存储过程来指定 logminer字典,也可以在第三步,启动logminer的时候指定

2. 指定需要读取的redo log
在这一步可以通过DBMS_LOGMNR.ADD_LOGFILE来指定redo log文件。也可以在第三步启动logminer的时候指定

3。启动logminer
使用这个存储过程DBMS_LOGMNR.START_LOGMNR

4. 查询v$logmnr_content视图
这个视图存储着刚刚logminer挖掘到的信息

2.0 logminer字典 

  logminer字典是用来把redo log的一些不易懂信息转化成人类可读信息的。 logminer字典有三种方式指定:

logminer字典的三种生成方式
1. 使用oracle的数据字典。
如果你的源数据库和mining数据库是同一个数据库。那么也许你就可以使用当前的oracle数据字典来做logminer字典。 但注意,这里说的是也许。也就是说,不是一定可以这么做的。 那么什么时候不可以呢?  如果表的列定义改变了,这种方式就不可取了。因为这时候oracle的数据字典信息也改变了,但是redo log中存储了表改变之前的信息。用现在的数据字典去翻译改变之前的表,很显然是不可能的。

2. 生成一个logminer 字典并放入redo log
如果你的mining数据库和源数据库不是同一个,很显然你不能用第一种方式。如果表的定义会改变,很显然你也不能用第一种方式。这两种情况你需要生成一个logminer字典并存入redo log。

3. 生成一个logminer字典存入文件
这只是为了向以前版本的oracle兼容

3.0 启动logminer

启动logminer要使用 DBMS_LOGMNR.START_LOGMN这个存储过程。在启动的时候可以使用如下option

4.0 查询V$LOGMNR_CONTENTS

  logminer查到的信息存储在v$logmnr_contents这个表中。本节包含以下内容:

4.1 logminer中可以查到什么内容

logminer中可以查到什么内容
    对数据库更改的类型 INSERT, UPDATE, DELETE, 或者 DDL (OPERATION column).

    发生更改时刻的SCN (SCN column).

    commit更改时刻的SCN (COMMIT_SCN column).

    Transcation (XIDUSN, XIDSLT, and XIDSQN columns).

    表名以及表的用户名 (SEG_NAME and SEG_OWNER columns).

    提交SQL语句的用户名 (USERNAME column).

    如果是一条DML生成的redo,这里会记载一条DML语句。该语句和真实提交的DML语句不完全相同,但运行的结果是一样的 (SQL_REDO column).

    如果是一条DDL生成的redo,这里会记载一条DDL语句。该语句和真实提交的DDL语句完全相同 (SQL_REDO column).

    如果是一条DML语句生成的redo,这里会记载着其对应的UNDO语句 (SQL_UNDO column).

    如果是一条DDL生成的redo,这里会是NULL(SQL_UNDO column).

4.2 v$logmnr_contents的内容是怎么来的

 v$logmnr_content这个视图与其他的系统视图不一样。其它的视图存储的数据是在oracle的表中存储的。而该视图的数据其实存储在redo log文件上。只有当你启动了logminer来挖掘redo log后,你才能查询这个视图。在你查询的时候,该视图才会包含数据。为了更有效率的查询该视图的内容,你可以考虑创建一个表,然后把该视图的内容存储进去。这样就可以采用oracle对于表的查询优化。

4.3 使用这个视图的一些窍门

原文地址:https://www.cnblogs.com/kramer/p/3069019.html