暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

FlinkX-Oracle Logminer模块介绍丨直播回顾

数栈研习社 2021-03-16
505


3月9日,袋鼠云数栈技术研发团队工程师杨槐(花名:渡劫)为大家直播分享《FlinkX-Oracle Logminer模块介绍》。错过直播的朋友可以钉钉扫描文末的二维码,加入钉钉群回看直播。


本次直播渡劫大佬主要从以下三个方面为大家介绍FlinkX-Oracle Logminer模块。


Part.1

Logminer介绍与使用




FlinkX-Oracle Logminer模块是FlinkX基于Logminer对Oracle重做日志进行实时采集分析,可对Oracle进行实时同步也可以
通过指定SCN或者时间戳从某个节点进行同步,同时通过记录SCN号支持续跑功能。
 
Logminer是Oracle公司从产品8i以后提供的一个实际非常有用的分析工具,使用该工具可以轻松获得Oracle重做日志文件归档日志文件)中的具体内容,Logminer分析工具实际上是由一组PL/SQL包和一些动态视图组成,它作为Oracle数据库的一部分来发布,是Oracle公司提供的一个完全免费的工具。
 
Logminer读取重做日志文件的内容并加载到视图v$logmnr_contents中,可通过SQL对视图v$logmnr_contents 读取获取到实时数据。

1、Oracle重做日志
Oracle的重做日志分为在线重做日志和归档重做日志。

Online Redo log files--在线重做日志,又称联机重做日志,指Oracle以SQL脚本的形式实时记录数据库的数据更新,换句话说,实时保存已执行的SQL脚本到在线日志文件中(按特定的格式)。

Archive Redo log files--归档重做日志,简称归档日志,指当条件满足时,Oracle将在线重做日志以文件形式保存到硬盘(持久化)。
 
2、补充日志
补充日志不是独立的一种日志,为了性能考虑,在Update时,重做日志默认只记录更改字段的前后值,而开启了补充日志后,会将更新前后的所有字段的值记录。
 
3、Oracle重做日志写入流程
Oracle重做日志采用循环写入的方式,每一个Oracle实例至少拥有2组日志组。
Oracle重做日志一般由Oracle自动切换,重做日志文件在当LGWR进程停止写入并开始写入下一个日志组时发生切换,或在用户收到发出ALTER SYSTEM SWITCH LOGFILE时发生切换。如果Oracle数据库开启了归档功能,则在日志组发生切换的时候,上一个日志组的日志文件会被归档到归档目录里。
 
4、Logminer字典
Oracle数据字典记录当前所有表的信息,字段的信息等等。Logminer使用字典将内部对象标识符和数据类型转换为对象名称和外部数据格式。如果没有字典,Logminer将返回内部对象ID,并将数据显示为二进制数。

对于下面的Insert语句


没有设置字典显示的内容为:


Logminer提供了三种字典选项:
  • Using the Online Catalog

  • Extracting a Logminer Dictionary to the Redo Log Files 

  • Extracting the Logminer Dictionary to a Flat File 

FlinkX使用的是Online Catalog

5、Logminer 使用步骤
第一步:为Logminer增加日志文件
第二步:开启Logminer
第三步:读取数据


查出的数据格式如下图所示:



Part.2

FlinkX和Logminer集成


1、Logminer模块流程解析
Logminer模块主要分为三部分
  • 日志文件查找:
    查询在线日志与归档日志

  • 日志文件加载及开启Logminer

    将日志文件加载到Logminer中,Logminer会将日志文件内容转化到v$logmnr_contents视图里

 
  • 数据查询与解析

    根据过滤条件,查询v$logmnr_contents数据,获得数据,并对sql_redo字段内容进行解析



2、日志文件的查找
Logminer通过加载重做日志文件,将其中的内容根据字典转化到v$logmnr_contents中,因此第一步为Logminer找到需要加载的重做日志文件      
 
Oracle 重做日志文件分为在线重做日志和归档重做日志,其中在线重做日志可以在v$log以及v$logfile中查询到,而归档重做日志可以在v$archived_log查找到,一般是通过scn号进行查询过滤。


3、日志文件的加载与开启
将日志文件加载到Logminer中,并开启Logminer

Logminer第一次添加日志
SYS.DBMS_LOGMNR.add_logfile(l_log_rec.name, SYS.DBMS_LOGMNR.new)
 
Logminer后续添加日志
SYS.DBMS_LOGMNR.add_logfile(l_log_rec.name)
 
开启Logminer

4、查找数据      
Logminer会将加载的日志文件内容输出到视图v$logmnr_contents里,只需要按照一定的过滤条件查找到自己想要监听的数据即可。目前仅支持表名以及对应的动作
(update/delete/insert)进行过滤。




Part.3

疑问解析

Q1

FlinkX-Oracle Logminer有测试过大数量数据么?时延大概多少呢?

测试过每秒3000条数据,时延秒级,任务配置如fetchSize,数据库资源的不同结果会有部分差异。日志频繁切换对logminer读取影响不大,但是日志切换频繁一般意味着数据变化很快或者日志组配置较小,在数据量变化很快的时候,会对logminer读取速度造成影响,目前测试发现同时加载的日志大小在5G甚至更多的时候 会出现较大的延迟。


Q2

Oracle采集还有基于xstream的,这个速度会很快,FlinkX有计划支持么?

短时间内暂不支持,后期会对其进行调研


更多技术交流方式





想面对面的进行技术交流吗?想及时参与直播活动吗?可扫码加入钉钉群“袋鼠云开源框架技术交流群”(群号:30537511)



想体验更多的数栈开源项目吗?可以在Github社区搜索“FlinkX”开源项目

FlinkX开源项目地址:

https://github.com/DTStack/flinkx



 

点击阅读原文,一键到达FlinkX开源项目!

文章转载自数栈研习社,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论