您的当前位置:首页正文

OracleLogminer快速使用详解

来源:一二三四网
OracleLogminer快速使⽤详解

⽬录

⼀、Logminer是什么?⼆、Logminer快速使⽤三、Logminer的具体使⽤

1.配置Logminer2.使⽤Logminer3.Logminer字典4.指定Logminer重做⽇志⽂件5.启动LogMiner⼀、Logminer是什么?

LogMiner 是Oracle公司从产品8i以后提供的⼀个实际⾮常有⽤的分析⼯具,使⽤该⼯具可以轻松获得Oracle 重做⽇志⽂件(归档⽇志⽂件)中的具体内容,LogMiner分析⼯具实际上是由⼀组PL/SQL包和⼀些动态视图组成,它作为Oracle数据库的⼀部分来发布,是oracle公司提供的⼀个完全免费的⼯具。

具体的说: 对⽤户数据或数据库字典所做的所有更改都记录在Oracle重做⽇志⽂件RedoLog中,Logminer就是⼀个解析RedoLog的⼯具,通过Logminer解析RedoLog可以得到对应的SQL数据。

Oracle 中的RedoLog写⼊流程: Oracle重做⽇志采⽤循环写⼊的⽅式,每⼀个Oracle实例⾄少拥有2组⽇志组。Oracle重做⽇志⼀般由Oracle⾃动切换,重做⽇志⽂件在当LGWR进程停⽌写⼊并开始写⼊下⼀个⽇志组时发⽣切换,或在⽤户收到发出ALTER SYSTEM SWITCH LOGFILE时发⽣切换。如果Oracle数据库开启了归档功能,则在⽇志组发⽣切换的时候,上⼀个⽇志组的⽇志⽂件会被归档到归档⽬录⾥。从上⾯可知 Oracle⾥的RedoLog⽂件分为两种:

当前写的⽇志组的⽂件,可通过v$log 和 v$logfile得到归档的redoLog⽂件,可通过 v$archived_log 得到

通过循环查找到最新符合要求的RedoLog并让Logminer加载分析,分析的数据在视图 v$logmnr_contents ⾥,通过读取 v$logmnr_contents 就可以得到 Oracle的实时数据。

⼆、Logminer快速使⽤

配置Logminer请参考Oracle配置LogMiner⽂档。

#1、准备测试数据(test⽤户)SQL> conn test/123456

SQL> CREATE TABLE test(id varchar2(100)); INSERT INTO test (id) values ('000001'); INSERT INTO test (id) values ('000011');commit;

说明:⼀下步骤皆在logminer_test⽤户下执⾏#2、查看数据库当前联机⽇志⽂件

SQL>SELECT group#, sequence#, status, first_change#, first_time FROM V$log ORDER BY first_change#;#发现只有redo001是当前状态。

#3、将需要解析的在线⽇志⽂件加⼊

SQL>exec dbms_logmnr.add_logfile('/home/oracle/app/oracle/oradata/orcl11g/redo01.log', dbms_logmnr.new);#4、启动LogminerSQL>begin

SYS.DBMS_LOGMNR.START_LOGMNR (

options => SYS.DBMS_LOGMNR.skip_corruption + SYS.DBMS_LOGMNR.no_sql_delimiter + SYS.DBMS_LOGMNR.no_rowid_in_stmt +

SYS.DBMS_LOGMNR.dict_from_online_catalog + SYS.DBMS_LOGMNR.string_literals_in_stmt );end;

#5、查询重做⽇志

SQL>select * from V$LOGMNR_CONTENTS;#6、停⽌Logminer

SQL>exec dbms_logmnr.end_logmnr;

三、Logminer的具体使⽤

1.配置Logminer

请参考Oracle配置LogMiner⽂档。

2.使⽤Logminer

1.指定LogMiner字典。

2.指定重做⽇志⽂件列表以进⾏分析。 使⽤ DBMS_LOGMNR.ADD_LOGFILE 过程,或指⽰LogMiner在启动LogMiner时⾃动创建要分析的⽇志⽂件列表(在步骤3中)。

3.启动LogMiner。 使⽤ DBMS_LOGMNR.START_LOGMNR 程序。

4.请求感兴趣的重做数据。 查询V$LOGMNR_CONTENTS视图。(您必须具有SELECT ANY TRANSACTION查询此视图的权限)5.结束LogMiner会话。 使⽤ DBMS_LOGMNR.END_LOGMNR程序。

3.Logminer字典

LogMiner字典作⽤

Oracle数据字典记录当前所有表的信息,字段的信息等等。LogMiner使⽤字典将内部对象标识符和数据类型转换为对象名称和外部数据格式。如果没有字典,LogMiner将

返回内部对象ID,并将数据显⽰为⼆进制数

INSERT INTO HR.JOBS(JOB_ID, JOB_TITLE, MIN_SALARY, MAX_SALARY) VALUES('IT_WT','Technical Writer', 4000, 11000);

没有字典,LogMiner将显⽰:

insert into \"UNKNOWN\".\"OBJ# 45522\"(\"COL 1\(HEXTORAW('45465f4748'),HEXTORAW('546563686e6963616c20577269746572'),HEXTORAW('c229'),HEXTORAW('c3020b'));

Logminer字典选项

4.指定Logminer重做⽇志⽂件

要启动新的重做⽇志⽂件列表,需要使⽤ DBMS_LOGMNR.NEW 以表明这是新列表的开始

EXECUTE DBMS_LOGMNR.ADD_LOGFILE( LOGFILENAME => '/oracle/logs/log1.dbf', OPTIONS => DBMS_LOGMNR.NEW);

可以使⽤下列语句额外再添加⽇志⽂件

EXECUTE DBMS_LOGMNR.ADD_LOGFILE( LOGFILENAME => '/oracle/logs/log2.dbf', OPTIONS => DBMS_LOGMNR.ADDFILE);

5.启动LogMiner

使⽤ DBMS_LOGMNR.START_LOGMN 启动Logminer。可以指定参数:指定LogMiner如何过滤返回的数据(例如,通过开始和结束时间或SCN值)指定⽤于格式化LogMiner返回的数据的选项指定要使⽤的LogMiner词典主要的参数有:

OPTIONS参数说明:

* DBMS_LOGMNR.SKIP_CORRUPTION - 跳过出错的redlog

* DBMS_LOGMNR.NO_SQL_DELIMITER - 不使⽤ ';'分割redo sql

* DBMS_LOGMNR.NO_ROWID_IN_STMT - 默认情况下,⽤于UPDATE和DELETE操作的SQL_REDO和SQL_UNDO语句在where⼦句中包含“ ROWID =”。 * 但是,这对于想要重新执⾏SQL语句的应⽤程序是不⽅便的。设置此选项后,“ ROWID”不会放置在重构语句的末尾 * DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG - 使⽤在线字典

* DBMS_LOGMNR.CONTINUOUS_MINE - 需要在⽣成重做⽇志的同⼀实例中使⽤⽇志

* DBMS_LOGMNR.COMMITTED_DATA_ONLY - 指定此选项时,LogMiner将属于同⼀事务的所有DML操作分组在⼀起。事务按提交顺序返回。

* DBMS_LOGMNR.STRING_LITERALS_IN_STMT - 默认情况下,格式化格式化的SQL语句时,SQL_REDO和SQL_UNDO语句会使⽤数据库会话的NLS设置 * 例如NLS_DATE_FORMAT,NLS_NUMERIC_CHARACTERS等)。使⽤此选项,将使⽤ANSI / ISO字符串⽂字格式

⽰例

EXECUTE DBMS_LOGMNR.START_LOGMNR( STARTTIME => '01-Jan-2003 08:30:00', ENDTIME => '01-Jan-2003 08:45:00',

OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG + DBMS_LOGMNR.CONTINUOUS_MINE);

6 在V$LOGMNR_CONTENTS中查询感兴趣的重做数据主要字段有:

列SCNOPERATION

数据类型NUMBERVARCHAR2(32)

描述

oracle为每个已提交的事务分配唯⼀的scn

INSERT UPDATE DELETE DDL COMMIT ROLLBACK…schema表名

数据库变动时间戳

SEG_OWNERVARCHAR2(32)TABLE_NAMEVARCHAR2(32)TIMESTAMPSQL_REDO⽰例

SELECT scn,

timestamp, operation, seg_owner, table_name, sql_redo, row_id, csfFROM

v$logmnr_contentsWHERE scn > ?

DATE

VARCHAR2(4000)重建的SQL语句,该语句等效于进⾏更改的原始SQL语句

查询出来的数据⽰例:

到此这篇关于Oracle Logminer使⽤的⽂章就介绍到这了,更多相关Oracle Logminer内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

因篇幅问题不能全部显示,请点此查看更多更全内容

Top