目前,比较常用的数据同步软件有 CDC(Oracle Change Data Capture 变更数据捕获)、迪思杰(DSG)、九桥软件 DDS、OGG 、Debezium、Flink CDC、阿里 dataX 等等。注意:以下为两年前的旧文分享。
一、OGG 历史及成员
OGG 全称 Oracle Golden Gate。
Golden Gate 公司于 1995 年成立于美国加州旧金山,它的名称源自旧金山闻名于世的金门大桥。两位创始人 Eric Fish 和 Todd Davidson 最初旨在为 Tandem 计算机公司设计一个容错系统,由于 Golden Gate 的健壮性和出色的数据复制功能,银行用它来把 ATM 网络的交易数据发送到 IBM 大型机,后来广泛地应用到金融行业及要求数据复制高效、健壮的各个行业,全球 licences 数量超过 4000。该公司于 2009 年 9 月被 Oracle 公司收购,在此之前 Oracle 和 Golden Gate 公司就有了长达超过 10 年的合作关系。在 Oracle 收购 Golden Gate 以后,与 Oracle 原有的 Data Guard 互为补充,共同为企业提供跨平台实时数据同步的解决方案。
Oracle GoldenGate 最为常见的家族成员包括 GoldenGate 、GoldenGate Director(现更名为 GoldenGate Management Pack,但是绝大部分熟悉 GoldenGate 的人还是习惯性地称其 为GoldenGate Director,为了保证上下文的一致性,这里统一称其为 GoldenGate Director)、 GoldenGate Veridata 。另外,也有不太常见的GoldenGate for Mainframe 和 GoldenGate Adapters。
GoldenGate 产品是核心产品,GoldenGate Director 为 GoldenGate 提供友好的 GUI 配置管理界面,而GoldenGate Veridata 为 GoldenGate 源端和目标端提供数据比对和校验的功能。 注意这三者并不是一个打包的产品,比如如果您购买了 GoldenGate 软件,如果需要图形界面或需要数据校验的功能,就需要额外购买 GoldenGate Director 或者 GoldenGate Veridata。
二、OGG 支持的数据库和操作系统平台
现如今,市面上比较主流的数据库几乎都支持,主流操作系统也都支持,具体数据库和操作系统及 OGG 对应版本,可查看如下链接中的 excel 表格。
https://www.oracle.com/middleware/technologies/fusion-certification.html
Oracle GoldenGate 拓扑结构
ogg 常见的结构有一对一,一对多,多对一,以及级联,还有双向的结构。 ogg 最大的特点之一就是能够提供不停机的数据同步复制,并且支持跨数据库(版本,平台)。
Oracle GoldenGate 建议版本
Linux 环境下 OGG 19.1 是目前生命周期最长的版本,但官方链接中居然下载不到了,可以在公众号后台回复关键字【ogg19c】下载,也可以点此链接墨天轮下载。
三、Oracle GoldenGate 基础架构
一般常用的进程包括在源端配置 MGR 进程、Extract(抽取)进程、Pump 进程,在目标端配置 MGR 管理进程、Replicat(复制)进程。
Manager 进程
Manager 进程是 GoldenGate 的控制进程。如果把所有的 Oracle 进程比喻为军队,那么 Manager 就相当于司令。Manager 进程运行在源端和目标端上,它主要有以下几个方面的 作用:启动、监控、重启 GoldenGate 的其他进程,报告错误及事件,分配数据存储空间, 发布阈值报告等。
Extract 进程
Extract 运行在数据库源端,负责从源端数据表或者日志中捕获数据。在早期的 GoldenGate 版本中,它通常被称为 Collect 进程。按照其所处的阶段不同,Extract 的作用 可以按照时间来划分。
初始数据装载阶段:在初始数据装载阶段,Extract 进程直接从源端的数据表中抽取数据。 同步变化捕获阶段:初始数据同步完成以后,Extract 进程负责捕获源端数据的变化 (DML和DDL)。
Extract 进程利用其内在的checkpoint 机制,周期性地检查并记录其读写的位置,通常 是写入到一个本地的trail 文件。这种机制是为了保证如果Extract 进程终止或者操作系统 宕机,重新启动 Extract 进程后,GoldenGate 能够恢复到以前的状态,从上一个断点处继续 往下运行,而不会有任何数据损失。如果接收到的是rollback,那么Extract 会清除该事务之前的所有记录。如果接收到的是commit,Extract 会将之前存储的事务信息进行持久化,即将事务信息写入磁盘上的trail 文件,然后按队列传送到目标库。
Extract 进程的状态包括STOPPED(正常停止)、STARTING (正在启动)、RUNNING (正在运行)、ABENDED (Abnomal End 的缩写,表示异常结束)。
Pump 进程
Pump 进程运行在数据库源端,其作用非常简单。如果源端使用了本地的trail 文件, 那么Pump 进程就会把trail 以数据块的形式通过TCP/IP协议发送到目标端,这通常也是推 荐的方式。Pump 进程本质是Extract 进程的一种特殊形式,如果不使用trail 文件,那么就 是Extract 进程在抽取完数据以后,直接投递到目标端。
与Pump 进程相对应的叫做Server Collector 进程,这个进程不需要引起人们的关注, 因为在实际操作过程中无需对其进行任何配置,所以对人们来说它是透明的。它运行在目 标端,其任务就是把 Extract/Pump 投递过来的数据块重新组装成trail 文件,人们称之为远 程trail 文件。
Replicat 进程
Replicat 进程,通常也把它叫做应用进程。运行在目标端,是数据传递的最后一站, 负责读取目标端trail 文件中的内容,并将其解析为 DML或DDL语句,然后应用到目标数 据库中。
和 Extract 进程一样,Replicat也有其内部的 checkpoint 机制,保证进程重新启动后可 以从上次记录的位置开始恢复,而无数据损失的风险。 它的运行状态和 Extract 进程一致,包括 STOPPED、STARTING 、RUNNING 、 ABENDED 。
Oracle GoldenGate 部署模式推荐
Oracle GoldenGate Extract
Classic Capture
Integrated Capture
Oracle GoldenGate Replicat
Classic Replicate
Coordinated(协调) Replicat
Integrated Replicat
Parallel Replicat
Oracle GoldenGate 两种捕获模式
经典捕获 和 集成捕获
Classic Capture:在传统模式中, Oracle GoldenGate 从源数据库的 redo 或者 archive 日志中、 或者从备份数据库系统的复制归档日志进行捕获数据变化, 生成相应的变化 trail 文件。
Integrated Capture:在集成模式下, Oracle GoldenGate 抽取进程可以直接使用数据库的日志挖掘工具服务器以 LCR(logical change records) 的形式来捕获数据变化。 这种模式相对传统模式的数据变化捕获方式而言, 能够支持更多的数据类型,对事务的顺序也更加的严格。
值得一提的是:集成模式下,对于数据库版本 11.2.0.4 及更高版本的源数据库(****源兼容性设置为 11.2.0.4 或更高版本****),DDL 的捕获由日志挖掘服务器异步执行,不需要安装特殊的触发器、表或其他数据库对象。无需停止用户应用程序即可执行Oracle GoldenGate升级。当 Extract 与早于版本 11.2.0.4 的 Oracle 11 g 源数据库处于集成模式时,需要使用 DDL 触发器和支持对象。另外在经典模式下,*Oracle GoldenGate 18c (18.1.0) 和更高版本已弃用经典捕获。***
Oracle GoldenGate 两种捕获模式查看方法:
GGSCI 是 GoldenGate Software Command Interface 的缩写,它提供了十分丰富的命令来对 Goldengate 进行各种操作,如创建、修改、监控 GoldenGate 进程等等。
./ggsci
GGSCI (rac1) 1> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING DPEU01 00:00:00 00:00:04
EXTRACT RUNNING EXTU1 00:00:03 00:00:03
GGSCI (rac1) 2> info extu1
EXTRACT EXTU1 Last Started 2021-11-10 18:39 Status RUNNING
Checkpoint Lag 00:00:03 (updated 00:00:04 ago)
Process ID 5872
Log Read Checkpoint Oracle Integrated Redo Logs
2021-11-30 16:27:17
SCN 2.2213888750 (10803823342)
---------------------------------------------------------------------
GGSCI (test-11gOGG) 2> info extu1
EXTRACT EXTU1 Last Started 2021-11-27 11:01 Status RUNNING
Checkpoint Lag 00:00:00 (updated 00:00:00 ago)
Process ID 28978
Log Read Checkpoint Oracle Redo Logs
2021-11-30 16:27:10 Seqno 50, RBA 416907776
SCN 0.10446291 (10446291)
“Oracle Integrated Redo Logs” 则表示属于集成模式,“Oracle Redo Logs”则属于经典模式。
四、下载、安装 ogg
进入Oracle官方网址www.oracle.com ,找到中间件产品中,便可找到 OGG,目前最新的产品便是 21c Oracle GoldenGate 21.3.0.0,当然也可以使用下方链接直接进入。
http://www.oracle.com/technetwork/middleware/goldengate/downloads/index.html
文件名为:213000_fbo_ggs_Linux_x64_Oracle_shiphome.zip
安装过程:https://mp.weixin.qq.com/s/Px1TqoVCEgRMSllZ8Xm3yQ
Oracle 11.2.0.4 or Later Database Privileges
基于数据泵的数据库初始化步骤
五、常用命令
1、常用管理命令 info all、info extu1、stop extu1、start extu1、edit params extu1
2、查看统计信息 stats extract extu1 total 、stats rep02 total
3、查看延时情况 lag extract extu1、lag rep02
4、查看运行报告 view report extu1
5、查看长事务 send extract extu1,showtrans
GGSCI (db-rac1) 6> send extract extu1,showtrans
Sending SHOWTRANS request to EXTRACT EXTU1 ...
------------------------------------------------------------
XID: 0.62.27.697892
Items: 4
Extract: EXTU1
Redo Thread: 3
Start Time: 2021-12-01:11:06:13
SCN: 2.2226964399 (10816898991)
Redo Seq: 3875
Redo RBA: 121650704
Status: Running
------------------------------------------------------------
XID: 0.71.25.704593
Items: 3
Extract: EXTU1
Redo Thread: 4
Start Time: 2021-12-01:11:06:13
SCN: 2.2226964399 (10816898991)
Redo Seq: 3732
Redo RBA: 202361360
Status: Running
GGSCI (db-rac1) 7> send extract extu1,showtrans
Sending SHOWTRANS request to EXTRACT EXTU1 ...
No transactions found.
=============================================================================
XID:: 0.8.26.1359285
xidusn.xidslot.xidsqn
XIDUSN:回滚段Number
XIDSLOT:事务槽号
XIDSQN:事务序列号
select * from gv$transaction where xidusn=8 and xidslot=26 and xidsqn=1359285;
v$transaction的addr和v$session的taddr对应可以找到session,
v$session下面有sql_address,sql_hash_value可以找到对应v$sql或者v$sql_text里的sql语句。
select /*+ rule*/ c.SQL_TEXT
from v$transaction a, v$session b, v$sql c
where a.XIDUSN = &XIDUSN
and a.XIDSLOT = &XIDSLOT
and a.XIDSQN = &XIDSQN
and a.ADDR = b.TADDR
and b.SQL_ADDRESS = c.ADDRESS
and b.SQL_HASH_VALUE = c.HASH_VALUE;
Oracle GoldenGate Logdump 常用命令
./logdump
Logdump Command
Logdump 1> GHDR ON
Logdump 2> DETAIL ON
Logdump 3> DETAIL DATA
Logdump 4> USERTOKEN ON
Logdump 4> GGSTOKEN ON
六、Oracle GoldenGate 调优
1、附加日志
要求:数据库开归档,补充日志,最小附加日志,force 强制日志。
alter database add supplemental log data;
alter database force logging;
select log_mode,force_logging,SUPPLEMENTAL_LOG_DATA_MIN,SUPPLEMENTAL_LOG_DATA_PK,SUPPLEMENTAL_LOG_DATA_ALL from v$database;
LOG_MODE FORCE_LOGGING SUPPLEME SUP SUP
------------ --------------------------------------- -------- --- ---
ARCHIVELOG YES YES NO NO
2、心跳表
EDIT PARAMS ./GLOBALS
GGSCHEMA OGG
exit
ggsci
GGSCI (Ops-11gOGG) 1> dblogin userid ogg@TEST, password ogg#1234
Successfully logged into database.
GGSCI (Ops-11gOGG as ogg@test) 2> ADD HEARTBEATTABLE
2021-12-06 17:10:48 INFO OGG-14001 Successfully created heartbeat seed table ""OGG"."GG_HEARTBEAT_SEED"".
2021-12-06 17:10:48 INFO OGG-14089 Successfully tracking extract restart position with heartbeat table ""OGG"."GG_HEARTBEAT_SEED"".
2021-12-06 17:10:51 INFO OGG-14032 Successfully added supplemental logging for heartbeat seed table ""OGG"."GG_HEARTBEAT_SEED"".
2021-12-06 17:10:52 INFO OGG-14000 Successfully created heartbeat table ""OGG"."GG_HEARTBEAT"".
2021-12-06 17:10:52 INFO OGG-14089 Successfully tracking extract restart position with heartbeat table ""OGG"."GG_HEARTBEAT"".
2021-12-06 17:10:52 INFO OGG-14033 Successfully added supplemental logging for heartbeat table ""OGG"."GG_HEARTBEAT"".
2021-12-06 17:10:52 INFO OGG-14016 Successfully created heartbeat history table ""OGG"."GG_HEARTBEAT_HISTORY"".
2021-12-06 17:10:52 INFO OGG-14089 Successfully tracking extract restart position with heartbeat table ""OGG"."GG_HEARTBEAT_HISTORY"".
2021-12-06 17:10:52 INFO OGG-14086 Successfully disabled partitioning for heartbeat history table ""OGG"."GG_HEARTBEAT_HISTORY"".
2021-12-06 17:10:52 INFO OGG-14023 Successfully created heartbeat lag view ""OGG"."GG_LAG"".
2021-12-06 17:10:52 INFO OGG-14024 Successfully created heartbeat lag history view ""OGG"."GG_LAG_HISTORY"".
2021-12-06 17:10:52 INFO OGG-14003 Successfully populated heartbeat seed table with "TEST".
2021-12-06 17:10:53 INFO OGG-14004 Successfully created procedure ""OGG"."GG_UPDATE_HB_TAB"" to update the heartbeat tables.
2021-12-06 17:10:53 INFO OGG-14017 Successfully created procedure ""OGG"."GG_PURGE_HB_TAB"" to purge the heartbeat history table.
2021-12-06 17:10:54 INFO OGG-14005 Successfully created scheduler job ""OGG"."GG_UPDATE_HEARTBEATS"" to update the heartbeat tables.
2021-12-06 17:10:54 INFO OGG-14018 Successfully created scheduler job ""OGG"."GG_PURGE_HEARTBEATS"" to purge the heartbeat history table.
Oracle GoldenGate 心跳表 GG_LAG
SQL> desc ogg.GG_LAG;
Name Null? Type
----------------------------------------- -------- -------------------------------------
LOCAL_DATABASE VARCHAR2(512)
CURRENT_LOCAL_TS TIMESTAMP(6)
REMOTE_DATABASE VARCHAR2(512)
INCOMING_HEARTBEAT_AGE NUMBER --CURRENT_LOCAL_TS减去远程数据库最近的心跳时间戳
INCOMING_PATH VARCHAR2(4000)
INCOMING_LAG NUMBER --从远程数据库生成心跳到本地数据库接收心跳之间的时间间隔
OUTGOING_HEARTBEAT_AGE NUMBER --CURRENT_LOCAL_TS减去最近的心跳时间戳的本地数据库
OUTGOING_PATH VARCHAR2(4000)
OUTGOING_LAG NUMBER --从本地数据库生成心跳到远程数据库接收心跳之间的时间间隔
INCOMING_EXTRACT_RESTART_CSN VARCHAR2(128)
INCOMING_EXTRACT_RESTART_TS TIMESTAMP(6)
INCOMING_EXTRACT_RESTART_AGE INTERVAL DAY(9) TO SECOND(6)
INCOMING_EXTRACT_HEARTBEAT_CSN VARCHAR2(128)
INCOMING_REPLICAT_LW_CSN VARCHAR2(128)
3、内存优化管理
streams_pool
CACHEMGR
OGG会将允许使用的内存缺省:64位系统设置为8G,32位系统为2G。
默认的虚拟内存空间为安装目录下的dirtmp
CACHEMGR CACHESIZE 500MB, CACHEDIRECTORY /ggs/temp, CACHEDIRECTORY /ggs2/temp
捕获、传输、投递进程参数优化
V$LOGMNR_CONTENTS
4、常见错误
参考链接
Oracle 公益大讲堂
https://www.oracle.com/middleware/technologies/fusion-certification.html
https://docs.oracle.com/en/middleware/goldengate/core/19.1/index.html
https://docs.oracle.com/en/middleware/goldengate/core/19.1/oracle-db/index.html
全文完,希望可以帮到正在阅读的你,如果觉得此文对你有帮助,可以分享给你身边的朋友,同事,你关心谁就分享给谁,一起学习共同进步~~~
欢迎关注我的公众号【JiekeXu DBA之路】,第一时间一起学习新知识!
————————————————————————————
公众号:JiekeXu DBA之路
CSDN :https://blog.csdn.net/JiekeXu
墨天轮:https://www.modb.pro/u/4347
腾讯云:https://cloud.tencent.com/developer/user/5645107
————————————————————————————