DBMS_LOGMNR 包

用户可以使用DBMS_LOGMNR包对归档日志进行挖掘,重构出DDL和DML等操作,并通过获取的信息进行更深入的分析。

目前DBMS_LOGMNR只支持对归档日志进行分析,配置归档后,还需要将dm.ini中的RLOG_APPEND_LOGIC选项置为1或2。

DM MPP环境下不支持DBMS_LOGMNR包。

9.1 相关方法

  1. PROCEDURE ADD_LOGFILE

增加日志文件。

语法如下:

PROCEDURE ADD_LOGFILE (

   LogFileName IN VARCHAR,

   Options IN INT default ADDFILE

);

参数详解

  • LogFileName

增加的文件的全路径。

  • Options

可选配置参数,具体的可选配置包括:

  • NEW结束当前LOGMNR(调用LOGMNR_END),并增加指定文件
  • ADDFILE在当前LOGMNR中增加日志文件
  • REMOVE从当前LOGMNR中去除一个日志文件(如果已经START,则不可移除)
  1. COLUMN_PRESENT

判断某列是否被包含在指定的一行逻辑记录中。

语法如下:

FUNCTION COLUMN_PRESENT (

sql_redo_undo IN BIGINT,

column_name IN VARCHAR default ''

) RETURN INT;

参数详解

  • sql_redo_undo

REDO或UNDO记录的唯一标识,对应V$LOGMNR_CONTENTS中的REDO_VALUE或UNDO_VALUE字段。

  • column_name

由模式名.表名.列名组成的字符串。

返回值

0或1,0表示该值不可以挖掘,1表示可以挖掘

  1. END_LOGMNR

语法如下:

PROCEDURE END_LOGMNR();

功能说明:

结束LOGMNR。

  1. MINE_VALUE

以字符串的格式来获取某一条日志中包含的指定列的值。

语法如下:

FUNCTION MINE_VALUE(

   sql_redo_undo IN BIGINT,

column_name IN VARCHAR default '') RETURN VARCHAR;

);

参数详解

  • sql_redo_undo

REDO或UNDO记录的唯一标识,对应V$LOGMNR_CONTENTS中的REDO_VALUE或UNDO_VALUE字段。

  • column_name

由模式名.表名.列名组成的字符串。

返回值

以字符串的格式返回某一条日志中包含的指定列的值。

  1. REMOVE_LOGFILE

从日志列表中移除某个日志文件。

语法如下:

PROCEDURE REMOVE_LOGFILE (

   LogFileName IN VARCHAR

);

参数详解

  • LogFileName

待移除的日志文件名。

  1. START_LOGMNR

根据指定的模式和条件来开始某个会话上的LOGMNR,一个会话上仅能START一个LOGMNR。

语法如下:

PROCEDURE START_LOGMNR (

   startScn IN BIGINT default 0,

   endScn IN BIGINT default 0,

   startTime IN DATETIME default '1988/1/1',

   endTime IN DATETIME default '2110/12/31',

   DictFileName IN VARCHAR default '',

   Options IN INTdefault 0

);

参数详解

  • startScn

分析时或者加载时的过滤条件,日志起始序列号,默认0,表示无限制。

  • endScn

分析时或者加载时的过滤条件,日志结束序列号,默认0,表示无限制。

  • startTime

分析时或者加载时的过滤条件,日志起始时间,默认1988/1/1。

  • endTime

分析时或者加载时的过滤条件,日志结束时间,默认2110/12/31。

  • DictFileName

离线字典的全路径名,默认为空。如果选用离线字典模式,则需要指定该选项,根据此项提供的全路径来加载离线字典文件。如果已经配置了其他模式(在线字典或者REDO日志抽取字典信息),此项不会生效。

  • Options

提供如下表所列的可选模式,各模式可以通过 +或者按位或来进行组合。其它位的值如1、4、8等目前不支持,配置后不会报错,但是没有效果。例如,组合全部模式,则取值计算方法为2+16+64+2048=2130,那么Options值取就是2130。

Options 对应值 说明
COMMITTED_DATA_ONLY 2 仅从已交的事务的日志中挖掘信息
DICT_FROM_ONLINE_CATALOG 16 使用在线字典
NO_SQL_DELIMITER 64 拼写的SQL语句最后不添加分隔符
NO_ROWID_IN_STMT 2048 拼写的SQL语句中不包含ROWID

9.2 举例说明

使用包内的过程和函数之前,如果还未创建过系统包。请先调用系统过程创建系统包。

SP_CREATE_SYSTEM_PACKAGES (1,'DBMS_LOGMNR');

一下示例展示日志分析工具使用流程。

  1. 配置环境

(1)修改dm.ini中的参数,如下:

ARCH_INI = 1

RLOG_APPEND_LOGIC = 1

(2)dmarch.ini需要配置本地归档,举例如下:

[ARCHIVE_LOCAL1]

   ARCH_TYPE = LOCAL

   ARCH_DEST = d:\dmdata\arch

   ARCH_FILE_SIZE = 128 ##单位Mb

   ARCH_SPACE_LIMIT = 0 ##单位Mb,0表示无限制,范围1024~4294967294M
  1. 添加归档日志文件

(1) 查询有哪些归档日志

select name , first_time , next_time , first_change## , next_change## from
v$archived_log;

设查询结果如下:

d:\DMdata\arch\ARCHIVE_LOCAL1_20140505155106577.log

2014-05-05 15:51:06.000000 2014-05-05 15:51:07.000000

1                     23303

(2) 添加一个或多个需要分析的归档日志文件

dbms_logmnr.add_logfile('d:\DMdata\arch\ARCHIVE_LOCAL1_20140505155106577.log')

如要查看通过ADD_LOGFILE添加的归档日志文件,可以通过动态视图V$LOGMNR_LOGS进行查询,如下:

select low_scn, next_scn, low_time, high_time, log_id, filename from v$logmnr_logs;

查询结果如下:

1                          23303

2014-05-05 15:51:06.000000 2014-05-05 15:51:07.000000 0

d:\DMdata\arch\ARCHIVE_LOCAL1_20140505155106577.log
  1. 启动归档日志文件分析
dbms_logmnr.start_logmnr(Options=>2128 , Starttime=>to_date('2014-03-04
17:36:00','YYYY-MM-DD HH24:MI:SS') , Endtime=>to_date('2014-06-04
17:36:02','YYYY-MM-DD HH24:MI:SS'));

如要查看归档日志文件的分析结果,可以通过动态视图V$LOGMNR_CONTENTS进行查询,如下:

select operation_code , scn, sql_redo , timestamp ,seg_owner, table_name from
V$LOGMNR_CONTENTS where seg_owner = 'SYSDBA' and operation_code in (3,1,2);
  1. 终止归档日志文件分析

dbms_logmnr.end_logmnr();

微信扫码
分享文档
扫一扫
联系客服