2020-11 Oracle LogMiner介绍

1.LogMiner是什么

如果要细致学习,推荐直接看官方文档:https://docs.oracle.com/cd/B12037_01/server.101/b10825/logminer.htm#BEGIN

Oracle LogMiner是Oracle公司从产品8i以后提供的一个实际非常有用的日志分析工具,使用该工具可以轻松获得Oracle在线/离线日志(或者叫做重做/归档日志)文件中的具体内容,比如操作数据库的DML和DDL语句。LogMiner本质上是集成在Oracle数据库的一个日志读取、分析工具,不仅可以分析自己数据库的重作日志文件,也可以用来分析其它Oracle数据库的重作日志文件(需要使用该数据库的字典文件)。在默认情况下,Oracle已经安装了LogMiner工具,用户可以建立Oracle数据库的连接后,通过执行sql使用LogMiner。

总的说来,LogMiner工具的主要用途有:

  • 1.跟踪数据库的变化:可以离线地跟踪数据库的变化,而不会影响在线系统的性能

  • 2.回退数据库的变化:回退特定的变化数据,减少Point-In-Time Recovery的执行

  • 3.优化和扩容计划:可通过分析日志文件中的数据以分析数据的增长模式

    ...

补充:重做日志和归档日志

重做日志(redo log)和归档日志(archive log)是Oracle用于做数据恢复的两种日志,都是物理文件,存放在不同的目录中。归档日志只有在数据库开启了归档模式后才生成(线上使用的数据库一般都会开启)。

重做日志也常称作在线日志(联机日志),是LGWR进程从redo log buffer写入的,是一个内存到磁盘的写入,由于只有在事务的请求被写到重做日志后,请求才能被完成,所以最大限度的提高重做日志的吞吐量是oracle性能优化首先考虑的因素。重做日志最大的特点是循环覆盖写入,重做日志分为多个group(默认3个,可以增加删除),每个group对应不同的文件,一个文件写满后会写入并覆盖下一个group的文件,正常情况下group对应的文件名是不变的。

归档日志是ACR进程从重做日志备份生成的,是一个磁盘到磁盘到写入,可以并发地执行,当一个重做日志的文件写满后,就会触发重做日志写入到归档日志,重做日志备份为归档日志后,系统就会把重做日志的内容清空,但文件依然存在,准备下一次使用;如果某个重做日志要被使用时,该重做日志备份为归档日志还没有完成,那么数据库就会挂起,直到归档日志写完。归档日志没有覆盖写入的情况,它的文件名是由系统自动生成的。

2.具体使用方式

在安装了LogMiner工具的Oracle数据库下使用LogMiner是非常简单的,如果没有安装LogMiner工具,需要联系DBA安装配置。LogMiner分析日志的过程是一个session级别的操作,大体上的流程上是添加日志->开始分析->查询结果->结束分析,LogMiner只提供了2个PL/SQL包和若干视图来完成整个日志分析过程,2个PL/SQL包是DBMS_LOGMNR_D包和DBMS_LOGMNR包,包含如下5个方法:

  • DBMS_LOGMNR_D.BUILD:用来构建数据字典,也就是表的元数据信息,如果没有数据字典,无法从日志中解析得到字段名称等信息;但是这一步构建也不是必须的,完全可以在不构建的数据字典的情况下直接使用在线的数据字典,当然在线数据字典在使用中也存在一些限制,比如缺少对表结构变化的感知
  • DBMS_LOGMNR_D.SET_TABLESPACE:修改LogMiner视图使用的表空间,默认是SYSTEM空间,最好修改到其他表空间中使用,这一步也不是必须的。
  • DBMS_LOGMNR.ADD_LOGFILE:用来添加或删除用于分析的日志文件,这一步是必须的,由于LogMiner本质上是一个日志分析工具,因此必须要指定分析哪些日志,提供这些日志的目录和文件名,获取日志的目录和文件名可以通过Oracle提供其他函数进行,比如 SELECT * FROM v$logfile;
  • DBMS_LOGMNR.START_LOGMNR:用来开启日志分析,调用时可以传入一系列配置参数和过滤条件,这一步也是必须的
  • DBMS_LOGMNR.END_LOGMNR:用来终止日志分析,它将回收LogMiner所占用的内存

上述提供的方法没有说明如何查询获取的结果,因为查询结果时通过提供的视图实现的,与LogMiner相关的视图:

  • V$LOGHIST:显示历史日志文件的一些信息

  • V$LOGMNR_DICTIONARY:因为LOGMINER可以有多个字典文件,所以该视图显示字典文件信息

  • V$LOGMNR_PARAMETERS:显示LOGMINER的参数

  • V$LOGMNR_LOGS:显示用于分析的日志列表信息

  • V$LOGMNR_CONTENTS:LOGMINER结果,在开启日志分析之后,结束日志分析之前,可以从这个视图中获取分析的结果,包括DML DDL等,其他时候查询会报错;另外需要说明的是,这里的SQL不一定是用户的原始DDL,比如

典型的LogMiner步骤

  • 1.进行初始化设置:开启附加日志,设置LogMiner的表空间等;

  • 2.提取一个字典:将字典文件提取为Flat File或Redo日志,或者跳过这一步,后续直接使用Online Catalog数据字典;

  • 3.指定需要分析的Redo日志文件:利用DBMS_LOGMNR.ADD_LOGFILE来添加日志;

  • 4.开始LogMiner:执行DBMS_LOGMNR.START_LOGMNR来启动LogMiner;

  • 5.查询V$LOGMNR_CONTENTS视图;

  • 6.结束LogMiner:通过执行EXECUTE DBMS_LOGMNR.END_LOGMNR来结束分析。

数据字典的设置

数据字典保存了表的元数据信息,如果不使用数据字典,LogMiner将使用16进制字符显示内部对象ID,不具有可读性。

LogMiner提供了3种提取字典文件的方式:

  • 1.将字典文件提取为一个Flat File(平面文件或中间接口文件)

  • 2.将字典文件提取为Redo Log

  • 3.使用Online Catalog(联机日志)

三种方式不在这里展开说明,可以直接参考https://blog.csdn.net/yes_is_ok/article/details/79296614等分享。

使用示例

/* 开启附加日志: 非必需*/
 ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

/* 使用过程 */
/* 1.设置字典:元数据 */

/* 2.添加需要分析的日志 */
/* 查看日志路径 */
 SELECT * FROM v$logfile;
EXECUTE dbms_logmnr.add_logfile(logfilename=>'E:\APP\WANGTAO3\ORADATA\DAPAOPAO\REDO01.LOG',options=>dbms_logmnr.NEW);
EXECUTE dbms_logmnr.add_logfile(logfilename=>'E:\APP\WANGTAO3\ORADATA\DAPAOPAO\REDO02.LOG',options=>dbms_logmnr.ADDFILE);
EXECUTE dbms_logmnr.add_logfile(logfilename=>'E:\APP\WANGTAO3\ORADATA\DAPAOPAO\REDO03.LOG',options=>dbms_logmnr.ADDFILE);

/* 查看添加的日志 */
select filename from V$LOGMNR_LOGS;

/* 3.开始分析 */
EXECUTE DBMS_LOGMNR.START_LOGMNR(OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);

/* 4.获取结果 */

SELECT TABLE_NAME,USERNAME, SCN,TO_CHAR(timestamp,'yyyy-mm-dd hh:mi:ss am'),SQL_REDO FROM V$LOGMNR_CONTENTS where SCN > 79164067 AND table_name = 'TEST' ORDER BY timestamp DESC;
SELECT TABLE_NAME,USERNAME, SCN,timestamp,SQL_REDO FROM V$LOGMNR_CONTENTS ORDER BY timestamp DESC;
select sql_redo,timestamp,username,session_info from v$logmnr_contents where table_name='TEST';
SELECT * FROM  V$LOGMNR_CONTENTS;

/* 5.结束 */
EXECUTE DBMS_LOGMNR.END_LOGMNR
/* 结束 */

/* DBA用户下操作 */
/* 执行:sqlplus/nolog */
/* 查看是否开启归档日志 */
ARCHIVE LOG LIST;

/* 数据操作 */
INSERT INTO "DTS"."TEST" (ID, NAME) VALUES ('13', 'logminer2');

DELETE FROM "DTS"."TEST";

结果展示:

image-20200816180537861

3.LogMiner用于数据同步

LogMiner用于数据同步是具有可行性的,但是还需要回答几个关键问题才能形成完善的解决方案:

3.1 分析哪些日志?

LogMiner既可以分析重做日志也可以分析归档日志,分析重做日志可以获取最新的变更,并且由于重做日志文件名是不变的,不需要为LogMiner重新配置需要解析的文件名;但是一旦涉及到历史变更的获取,就必须要分析归档日志,归档日志的问题在于:只有在重做日志组写满后才写入,因此具有延迟性,不可能只依赖归档日志做到实时的数据同步,另外归档日志不断增加,需要不断调整LogMiner的文件列表,关于LogMiner是否可以同时分析归档日志和重做日志(并做日志的链接和去重),以及自动追加归档日志的列表,还需要进一步探讨,目前没有看到这样的方案。

3.2 如何解决日志分析造成的延迟?

开启LogMiner日志分析后,从V$LOGMNR_CONTENTS视图中查询结果,具有一定的延迟(比如上述3个日志文件查询使用了3.5s),这个延迟会直接造成数据同步的延迟。延迟是如何造成的,是否会随着日志增大而增大,还需要进一步研究。

可以关注相关性能测试https://www.cnblogs.com/shishanyuan/p/3142674.html

3.3 如何支持DDL?

采用恰当的数据字典方案,可以保证在发生表结构变更时,LogMiner解析得到正确的DML,但是不同的数据字典方案还存在一些其他限制,比如是否需要重启数据库(这在很多时候是不能接受的),是否需要开启附加日志等,在方案的选择上还要做一些探讨和权衡。

3.4 是否支持LOB类型?

需要进行测试

3.5 如何进行异构数据库的同步?

LogMiner获取的数据变更是以SQL的形式展示的,异构数据库的传输必然需要进行SQL的解析和再拼接,对每一个DML进行解析引入的代价有多高,是否会成为瓶颈,以及是否需要引入并发的机制进行处理,还需要进行分析或测试。

参考资料

https://www.cnblogs.com/shishanyuan/p/3142713.html

https://www.cnblogs.com/shishanyuan/p/3142674.html

https://blog.csdn.net/yes_is_ok/article/details/79296614

https://docs.oracle.com/cd/E11882_01/server.112/e22490/logminer.htm#SUTIL019

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容