Golden Gate

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 首先OGG是一个软件将数据库从一个数据库容灾到另一个数据库中由于基于交易的复制通过读取生产端的日志文件来获取数据的变化然后在容灾端还原sql从而使生产端和容灾端的数据库数据一致。

首先,OGG是一个软件,将数据库从一个数据库容灾到另一个数据库中由于基于交易的复制通过读取生产端的日志文件来获取数据的变化然后在容灾端还原sql从而使生产端和容灾端的数据库数据一致

 

OGG很长,从他的进程开始说起。

 

Manager进程

OGG的控制进程,manager进程运行在源端和目标端,可以负责启动、监控、重启OGG的其他进程、报告错误等等。

 

Extract进程

日志捕获进程,源端进程。主动捕获redolog日志,不会依赖于主库LGWR,这样就完全不会影响主库的性能。这也就说明OGG是一个异步的工作方式。使用golden gate时,在备库应用的是sql语句。Extract基于事务抓取,当事务commit的时候,extract就会被触发,从redolog中抓出事务的变化日志。

抓取日志后,有两种传输方式:直接传输方式和本地队列。直接传输是指extract进程捕获到redolog中的数据后,立即传到备库。这种方式一般不会被使用,因为它对网络要求很高。当网络一旦断开,redolog被覆盖使用,extract也就无法被使用了。而本地队列就解决了这个问题。当extract抽取到日志的时候,就会存放于本地队列,然后由一个投递进程将日志投递到备库。

Extract经历两个过程,初始数据装载阶段,负责直接从源端数据表中抽取数据,然后进入同步变化捕获阶段,去捕获源端的DML和DDL。

 

Pump进程

日志捕获进程,实质也是extract进程的另一种形式,源端进程。如果源端启用了trail文件,pump进程就会把trail文件以数据块的形式通过TCP/IP协议发送到目标端。

 

Collector进程

日志收集进程,负责将源端输出过来的日志装载到本地队列,与pump对应。但是这个进程一般都不会去控制,也就不需要配置。

 

Trail文件

Extract进程抽取到日志后,goldengate就会把抽取到的事务转化为一种goldengate专有的格式文件,然后由pump投递给目标端。源端的trail文件叫本地trail文件,目标端的trail文件叫远程trail文件。

 

Replicat进程

应用进程,负责从目标端的trail文件中获取sql语句,在备库执行。Replicat对日志的应用可以设置延迟时间。因为日志只要到了备库,数据就是绝对安全的。

 

然后golden gate的工作特点


 

基于日志的实时数据复制

实现了亚秒级同步,当一个事务提交后的极短的时间内,extract进程将日志抽取到本地的trail文件里,这时我们就可以认为数据完全脱离了数据库。也就是说这个时候,及时源库完全崩溃,被提交的事务也不会丢失。因此ogg的工作关键在于extract进程。但是ogg非常怕长事务,当事务提交的时候extract进程需要抽取该事务的日志,对于一个超长的事务,他的日志可能在提交前已经被归档,这时候extract想要在短时间内抽取所有事务的日志几乎不可能了,因为它需要读取大量的archive log,而这种操作对golden gate是致命的。

 

异构环境任意组合

这极大的降低了成本,充分利用了现有的系统,而且系统可高低搭配。

 

断点续传

golden gate通过checkpoint检查点来支持断点续传。

extract有个checkpoint文件,记录extract工作时抽取日志的SCN,同样投递进程通过检查点文件记录传输日志的SCN,使用检查点机制是为了记录extract/pump的工作进度,当没有检查点文件时,extract进程的每次工作都要从第一个日志文件开始扫描。replicat进程的检查点信息可以放入检查点文件,也可以存放入检查点表,默认是本地文件,我们可以通过进程配置文件来控制存放方式。但是源端的检查点不能放入表中,因为extract依赖于这个检查点信息工作,一旦主库崩溃,其数据库的所有表均不能被访问,那么pump进程就无法知道当前传输到哪个日志,他的每一次工作将会扫描extract trail文件中的每个日志。

 

过滤

extract抽取日志时可以进行过滤,但这个过滤也必须是以事务为单位。抽取的粒度可以是用户、表或列,比如scott用户的数据修改每次被提交时进行抽取。当抽取过滤粒度为表时,所抽取的表必须要是完整的事务。投递进程也可以进行过滤,但一般我们不会使用。

replicat进程在工作时可以对数据进行过滤及转换,这个转换意味着将来备库和主库的表的列名可以不一样。

 

灵活拓扑结构实现用户的灵活方案


 

 

ogg支持异地的常见场景

1、带宽。golden gate的extract进程在抽取日志之后会对日志文件进行压缩加密,并按照指定格式存放,这种工作机制对网络带宽要求很低。

2、非Oracle。dataguard主要支持Oracle数据库的同步,非Oracle数据库的灾备最好的方案仍然是goldengate。

3、一主多备,DB2→Oracle。如银行前置机,核心应用使用DB2,但是golden gate可以使用Oracle数据库作为前置机,通过前置机分担查询负载。

4、10g Oracle。10g的dataguard性能的严重不足,而golden gate正为了最好的灾备解决方案

5、 多主一备,数据集中。如交通违章记录,每个地区独立维护数据库,使用各异的表结构,这些表结构的列名甚至采集信息均有差异,而国家要对违章信息进行收集,解决方案是建立一个中心数据库,对这些信息建立一个统一的表结构,然后各地区的数据通过golden gate同步过来,在同步过程中可以抽取所需要的列,并且可以进行列名转换,将数据集中统一存放。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
狗福
+关注
目录
打赏
0
0
0
0
32417
分享
相关文章
关于 Spring Integration 你知道多少,包含集成MQTT案例讲述及源码3
关于 Spring Integration 你知道多少,包含集成MQTT案例讲述及源码
1621 0
关于 Spring Integration 你知道多少,包含集成MQTT案例讲述及源码3
C++程序中的对象赋值和复制
C++程序中的对象赋值和复制
178 1
Flink--7、窗口(窗口的概念、分类、API、分配器、窗口函数)、触发器、移除器
Flink--7、窗口(窗口的概念、分类、API、分配器、窗口函数)、触发器、移除器
Nuxt.js run build 之后生成的 dist 文件夹在哪
Nuxt.js run build 之后生成的 dist 文件夹在哪
578 0
Idea+Jconsole实现线程监控
Idea+Jconsole实现线程监控
608 0
Jenkins 与 Kubernetes 的集成:实现高效的资源管理和自动化部署
【8月更文第31天】随着微服务架构的普及,Kubernetes 已经成为了容器编排的事实标准。Kubernetes 提供了一种强大的方式来管理容器化的应用程序,而 Jenkins 则是持续集成与持续部署(CI/CD)领域的一个重要工具。将 Jenkins 与 Kubernetes 集成,不仅可以充分利用 Kubernetes 的资源管理能力,还能通过 Jenkins 实现自动化构建、测试和部署,从而提高开发效率和部署速度。本文将详细介绍如何将 Jenkins 集成到 Kubernetes 环境中,并提供具体的代码示例。
983 0
电力系统的负荷损失和潮流计算matlab仿真,对比最高度数,最高介数以及最高关键度等节点攻击
本课题研究节点攻击对电力系统稳定性的影响,通过模拟最高度数、最高介数和最高关键度攻击,对比不同攻击方式下的停电规模。采用MATLAB 2022a 进行系统仿真,核心程序实现线路断开、潮流计算及优化。研究表明,节点攻击会导致负荷损失和系统瘫痪,对电力系统的安全构成严重威胁。通过分析负荷损失率和潮流计算,提出减少负荷损失的方法,以提升电力系统的稳定性和安全性。
SpringBoot整合es7.x启动报错:Rejecting mapping update to [AAA] as the final mapping would have more than 1
SpringBoot整合es7.x启动报错:Rejecting mapping update to [AAA] as the final mapping would have more than 1
288 1
【经验分享】关于RT-Thread studio gitee源下载软件包失败以及git拉取Gitee仓库报错
【经验分享】关于RT-Thread studio gitee源下载软件包失败以及git拉取Gitee仓库报错
791 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问