FlinkX-Oracle Logminer模块是FlinkX基于Logminer对Oracle重做日志进行实时采集分析,可对Oracle进行实时同步也可以通过指定SCN或者时间戳从某个节点进行同步,同时通过记录SCN号支持续跑功能。

一、Logminer介绍与使用

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

第三步:读取数据

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

二、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)进行过滤。

三、Logminer实战示例

Logminer->hive脚本

本文作者:杨槐(花名:渡劫)袋鼠云大数据开发工程师,负责FLinkx的开发与维护。

本文首发于:数栈研习社

我们在github上还有关于FlinkX的开源项目,欢迎大家给我们点个star~

想了解FlinkX-Oracle Logminer?那就不要错过这篇文章的更多相关文章

  1. 想让安卓app不再卡顿?看这篇文章就够了

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由likunhuang发表于云+社区专栏 实现背景 应用的使用流畅度,是衡量用户体验的重要标准之一.Android 由于机型配置和系统的 ...

  2. 想从事IT行业的你,一定看看这篇文章

    很多想从事IT行业的小伙伴都会问: 我该如何学习技术? 我应该选择什么样的方向来深入学习并以此来就业? 如何证明自己的技术很牛? 什么是程序员的核心竞争力? 如何成为一名优秀的工程师? 对于这些疑问, ...

  3. 1、图解Oracle Logminer配置使用

    LogMiner配置使用手册 1 Logminer简介 1.1 LogMiner介绍 Oracle LogMiner 是Oracle公司从产品8i以后提供的一个实际非常有用的分析工具,使用该工具可以轻 ...

  4. 总结:基于Oracle Logminer数据同步

    第 1 页 共 20 页 出自石山园主,博客地址:http://www.cnblogs.com/shishanyuan LogMiner 配置使用手册 1 Logminer 简介 1.1 LogMin ...

  5. 4、总结:基于Oracle Logminer数据同步

    最近开发Oracle数据同步功能,做了些调研和验证,这个工作过去有段时间,怕时间长了忘记,故用博客共享出来.在这系列中共写了三篇文章,第一篇是写LogMiner配置及使用,第二篇是测试了LogMine ...

  6. 3、使用Oracle Logminer同步Demo

    使用Oracle Logminer同步Demo 1 Demo介绍 1.1 Demo设想 前面介绍了Oracle LogMiner配置使用以及使用LogMiner进行解析日志文件性能,在这篇文章中将利用 ...

  7. 2、Oracle Logminer性能测试

    Oracle Logminer性能测试 1 测试介绍 1.1 测试目的 通过模拟不同环境下LogMiner解析联机/归档日志文件运行情况,通过测试所获取的数据分析,通过对以下两点的验证来确定通过Log ...

  8. Oracle logminer 分析redo log(TOAD与PLSQL)

    Oracle logminer 分析redo log Oracle 11g r2 RAC centos 6.5 设置时间格式 select to_char(sysdate,'yyyy-mm-dd hh ...

  9. 使用Oracle Logminer同步Demo

    使用Oracle Logminer同步Demo 1 Demo介绍 1.1 Demo设想 前面介绍了Oracle LogMiner配置使用以及使用LogMiner进行解析日志文件性能,在这篇文章中将利用 ...

随机推荐

  1. QUIC协议文档翻译——什么是QUIC

    原文地址https://docs.google.com/document/d/1gY9-YNDNAB1eip-RTPbqphgySwSNSDHLq9D5Bty4FSU/edit QUIC是一个谷歌提出 ...

  2. Vue3(四)从jQuery 转到 Vue工程化 的捷径

    不会 webpack 还想学 vue 工程化开发 的福音 熟悉jQuery开发的,学习vue的简单使用是没用啥问题的,但是学习vue的工程化开发方式,往往会遇到各种问题,比如: webpack.nod ...

  3. webpack OSS All In One

    webpack OSS All In One 阿里云 OSS 对象存储(Object Storage Service,简称OSS),是阿里云对外提供的海量.安全和高可靠的云存储服务 https://c ...

  4. react 异步的setState

    import React from "react"; class App extends React.Component { state = { a: 0 }; component ...

  5. AtCoder Beginner Contest 192 F - Potion

    题目链接 点我跳转 题目大意 给定 \(N\) 个物品和一个 \(X\) ,第 \(i\) 个物品的重量为 \(ai\),你可以从中选择任意个物品(不能不选) 假定选择了 \(S\) 个物品,物品的总 ...

  6. 18_MySQL之HAVING字句的使用

    本节涉及的sql语句: -- HAVING -- 错误示例 SELECT deptno FROM t_emp WHERE AVG(sal)>=2000 GROUP BY deptno; 因为wh ...

  7. 详解Go语言调度循环源码实现

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客: https://www.luozhiyun.com/archives/448 本文使用的go的源码15.7 概述 提到"调度&q ...

  8. Linux进程管理工具Supervisor的安装配置

    目录 Linux进程管理工具Supervisor的安装配置 简介 安装Python包管理工具 安装Supervisor 配置 配置文件参数说明 配置进程管理 启动supervisor 控制进程 交互终 ...

  9. 为什么ConcurrentHashMap,HashTable不支持key,value为null?

    ConcurrentHashmap.HashMap和Hashtable都是key-value存储结构,但他们有一个不同点是 ConcurrentHashmap.Hashtable不支持key或者val ...

  10. 在js中如何将字符串类型的日期("2020-11-30T02:21:42.000+0000")进行格式化

    1.引入方法 import { formatDateNew } from '@/utils' 2.在方法中使用,注意要先将字符串进行new Date(),否则报错date.getFullYear is ...