Golden Gate

首先,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的工作特点

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

 

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

Golden Gate

 

 

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同步过来,在同步过程中可以抽取所需要的列,并且可以进行列名转换,将数据集中统一存放。

上一篇:浅析SQL查询语句未显式指定排序方式,无法保证同样的查询每次排序结果都一致的原因


下一篇:阿里云DTS VS MySQLdump