OGG技术原理

OGG架构

在一个典型的OGG环境中,会有两个数据库存在,同时也会有两个GG实例运行,主要包括四个核心对象:源数据库、目标数据库、源GG、目标GG。
数据复制运行流程大概如下:
源数据库在运行过程中,LGWR进程会源源不断地把日志记录到联机日志中(online log)。源GG的工作起点或者整个GG数据库流的起点也就是从源数据库的联机日志开始。
在源GG端:
1) Extract进程从联机日志挖掘数据,记录到本地的Source Trail文件中。
2) Data Pump进程从Source Trail文件把数据出来,然后通过网络,丢给目标GG上的Collector进程。
在目标端:

Collector进程从接收数据到一个本地文件(Remote Trail)中。
2)另一个Replicate进程从这些文件中挖取数据,然后在目标数据库上更新数据。
注:可以把源GG端步骤1,2合并成一个,直接把数据挖掘出来发送给目标端。
Capture(Local Extract)Process
捕获进程就是源GG把源数据库中变化(插入、更新、删除)数据抓出来的过程。通常指Local Extract进程,抽取进度还包括Data Pump Extract ,Inital-Load Extact和Discard File。
Inital-Load:主要用于目标数据库的初始化,这个过程类似Oracle EXP/IMP,数据泵。

Local Extract进程特点
可以直接把挖掘的数据发给目标GG或者缓存本地Source Trail
只会记录已经提交的变化,而把其他的活动(如回滚)过滤掉。
可以捕获DML,也可以捕获DDL
支持多进程或者单进程处理全部表或多个表
支持Schema级别、表级别、列级别不同粒度的抓取
Source Trail
Source Trail作为一个中间文件,保存抓取进程捕获的数据,以大块方式进行存储,等待下一个环节(Data Pump Extract)处理。Trail文件是一种GG特有的文件,具有自己的元数据。在每个文件或者每条记录上,都一个“头”记录。为了跟踪事物和保证数据一致性,采用CSN(Commit Sequece Number)这个概念,把CSN写到检查点文件(checpoint)和Trail文件中。CSN类似Oracle SCN,在SQLserver复制中用虚拟日志文件号,虚拟日志段号和虚拟日志记录号的拼接形成。

Source Trail进程特点
可以控制Source Trail文件大小,保证写满后,创建新的Trail文件。
支持Trail文件自动清理,按照保留时间或者Trail文件的总数量限制
Data Pump
Data Pump主要功能是用于抓取Source Trail,然后发送给目标GG。
主要特点:
1.支持多级Data Pump:可以通过Data Pump将数据引入一个中间区,这个中间区可以部署多个DataPump对数据进行过滤,再导向多个目标系统。
2.对于不能处理的记录,同Extact进程一样写入discard文件。
3.支持数据压缩和加解密

Collector
Collector进程主要用于接收源数据库发送数据的。

Remote Trail
Remote Trail文件和SourceTrail 类似,具有相同的特点,区分在于存放的位置不同,命名格式为xxnnnnn.

发布(Delivery,Repalicate)
所谓发布(复制),就是把抓到变化数据应用到目标数据库的过程。
其特点:

支持DDL,DML
支持多进程、多表、多列灵活组合。
对于不能处理的记录,同Extact进程一样写入discard文件。
管理器和组
管理器进程(Manager)管理所有GG进程和资源。通过GGSCI发送来的命令执行。
组将抽取到应用整个流程的进程和文件,组成一个组。

进程检查点(checkpoint)
GG的各组进程都是独立工作的,都可以独立启动和关闭。为了解决断点和续传的问题,这些进程会记录各自的读写位置信息,从而防止进程因系统、网络崩溃而导致的数据丢失,这个记录动作就是“检查点”。检查点对GG保证数据一致性非常重要。
GG的检查点由一个内部进程自动控制,与数据库检查点的概念类似。提取进程的检查点记录它在数据源中的读取位置和队列的写出位置,复制进程的检查点记录它读取队列的位置。每个提取进程和复制进程都由自己对应的检查点信息。当GoldenGate的进程重启时,由它记所记录的检查点决定需求读取的队列位置。
GG的检查点信息由两种存放方式:
1.文件形式:放在一个目录下,一个进程(或者一个组)对一个文件。源端GG的Extract进程只能使用这个模式。
2.数据库表:目标GG推荐使用这种形式,记录量比较小,基本上是更新行,少量插入行。

环境要求
源数据库需求
如果是Oracle

附加日志(Supplemental Logging)。一般在逻辑Standby和stream这两个Oracle特性中用到。附加日志对修改记录精确定位起了非常关键的作用,对后续的表级、列级的抽取复制提供详细信息。
日志设置
归档日志:避免日志生产过快,未来得及抓取就被覆盖了。
强制日志模式:避免有些操作(直接路径加载)会跳过redo,导致数据无法同步。
开启附加日志(结合实际情况进行,详细配置)。
目标数据库需求
配置检查表信息(采用数据库形式)

GG实战
单向复制实践概述
流程概述:
1.CDC(Change Data Caputure):开启源端GG的Extract、Data Pump进程,记录初始加载过程数据变化。
2.数据初始加载:将源数据库的历史数据一次性复制到目标数据库去。
3.Change Delivery:启动Replicat进程,读取数据应用到目标端。

GG配置
GG配置注意点:

可配置多用户针用于不同单复制流程
配置附加日志
配置目标数据库:关闭和禁用触发器和级联约束;配置检查表
# GG高级用法

典型拓扑结构
单向(查询分流)
双向(主用/备用或者主动-主动,实现高可用性)
对等(负载平衡、多住)
广播(数据分发)
集成/整合(数据仓库)
级联式(数据集市)
RAC的特殊说明
ASM文件的访问
net8:基于TCP网络访问,需要配置TNS和账号密码
BEQ方式:IPC机制(进程间直接通信),需要配置TNS
DBLOGERADER:ASM API接口
RAC节点部署
可以放在任何一个节点上,可利用GRID实现节点间的Failover;通过ACFS,实现GG的共享安装。

定义日志线程数
GG与rac日志线程数统一

数据过滤
支持表、列、行过滤

数据来源过滤
在双向复制模式下,对两端抽取和应用进行针对性过滤,避免形成死循环。

数据映射
能够在目标端和源端不同表和不同列之间进行映射,实现同步复制。

##值的处理
1.简单的赋值:对目标端某一列进行固定值赋值
2.利用SQL语句和存储过程进行赋值

Trail文件和清理
数据压缩
目前10.4不支持对压缩表的数据复制

原文地址:https://www.cnblogs.com/zhulimin/p/12642984.html