在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一、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文件分为两种:
通过循环查找到最新符合要求的RedoLog并让Logminer加载分析,分析的数据在视图 二、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、启动Logminer SQL> 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.使用Logminer1.指定LogMiner字典。 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","COL 2","COL 3","COL 4") values (HEXTORAW('45465f4748'),HEXTORAW('546563686e6963616c20577269746572'), HEXTORAW('c229'),HEXTORAW('c3020b')); Logminer字典选项 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中查询感兴趣的重做数据 Logminer会解析redoLog里的日志加载到 v L O G M N R C O N T E N T S 视 图 里 , 我 们 只 需 要 使 用 s q l 查 询 即 可 获 取 对 应 数 据 v LOGMNR_CONTENTS 视图里,我们只需要使用 sql查询 即可获取对应数据 v LOGMNRCONTENTS视图里,我们只需要使用sql查询即可获取对应数据vLOGMNR_CONTENTS视图相关字段 https://docs.oracle.com/cd/B19306_01/server.102/b14237/dynviews_1154.htm 主要字段有:
示例 SELECT scn, timestamp, operation, seg_owner, table_name, sql_redo, row_id, csf FROM v$logmnr_contents WHERE scn > ? 查询出来的数据示例: 到此这篇关于Oracle Logminer使用的文章就介绍到这了,更多相关Oracle Logminer内容请搜索极客世界以前的文章或继续浏览下面的相关文章希望大家以后多多支持极客世界! |
请发表评论