OGG|Oracle GoldenGate 基础知识介绍(二)

ac7e518084c1215f1da6dad07c5c16d7.gif

作者 | JiekeXu

来源 |公众号 JiekeXu DBA之路(ID: JiekeXu_IT)

如需转载请联系授权 | (个人微信 ID:JiekeXu_DBA)

大家好,我是 JiekeXu,很高兴又和大家见面了,今天和大家一起来看看 Oracle GoldenGate 基础知识介绍(二),欢迎点击上方蓝字“JiekeXu DBA之路”关注我的公众号,标星或置顶,更多干货第一时间到达

目前,比较常用的数据同步软件有 CDC(Oracle Change Data Capture 变更数据捕获)、迪思杰(DSG)、九桥软件 DDS、OGG 、Debezium、Flink CDC、阿里 dataX 等等,今天在来聊聊 OGG 基础知识(注意:以下为两年前的旧文分享)。之前也有关于 OGG 基础知识的介绍文章,感兴趣的可点此链接查看

一、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 互为补充,共同为企业提供跨平台实时数据同步的解决方案。

448163c0727b591aa77ec9f45dc1d29f.png

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 几乎都支持,新版本也有计划支持国产数据库,主流操作系统也都支持,具体数据库和操作系统及 OGG 对应版本,可查看如下链接中的 excel 表格。

https://www.oracle.com/middleware/technologies/fusion-certification.html

3ce50cc952d71f5c464e86617c319044.png

3b5f2fb31a17c6f06766d1b9b59b376d.png

f35fb9574a585cfcf3530ee0809d9fda.png
382bbbf4898dc8d19e33d1728bb68d52.png

Oracle GoldenGate 拓扑结构

ogg 常见的结构有一对一,一对多,多对一,以及级联,还有双向的结构。ogg 最大的特点之一就是能够提供不停机的数据同步复制,并且支持跨数据库(版本,平台)。

01688122cc74debeb9ce55a5fe96b012.png

Oracle GoldenGate 建议版本

1badec2e2a1ac9a0d4306a0a1c0d2b93.png
Linux 环境下 OGG 19.1 是目前生命周期最长的版本,但官方链接中居然下载不到了,可以在公众号后台回复关键字【ogg19c】下载,也可以去墨天轮下载https://www.modb.pro/doc/90345 。

三、Oracle GoldenGate 基础架构

625b3a95f4cc0fba31d7c01bbab5e0e7.png

一般常用的进程包括在源端配置 MGR 进程、Extract(抽取)进程、Pump 进程,在目标端配置 MGR 管理进程、Replicat(复制)进程。从 19c 开始(Supports Local and Remote, Capture and Delivery for Standard and Enterprise editions)支持远程、本地部署捕获

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 。

b5a56b0d3f341073e817b58cd4e29609.png

Oracle GoldenGate 部署模式推荐

Oracle GoldenGate Extract
Classic Capture
Integrated Capture


Oracle GoldenGate Replicat
Classic Replicate
Coordinated(协调) Replicat
Integrated Replicat
Parallel Replicat

9919b7bdc3b9985b07d54b85a30b8bc7.png

Oracle GoldenGate  两种捕获模式

经典捕获 和 集成捕获

Classic Capture:在传统模式中, Oracle GoldenGate 从源数据库的 redo 或者 archive 日志中、 或者从备份数据库系统的复制归档日志进行捕获数据变化, 生成相应的变化 trail 文件。

7bd5ab69a5e1acb6a930670901215956.png

Integrated Capture:在集成模式下, Oracle GoldenGate 抽取进程可以直接使用数据库的日志挖掘工具服务器以 LCR(logical change records) 的形式来捕获数据变化。这种模式相对传统模式的数据变化捕获方式而言, 能够支持更多的数据类型,对事务的顺序也更加的严格。

3458643a211a8d29f6f547b516f778a7.png

值得一提的是:集成模式下,对于数据库版本 11.2.0.4 及更高版本的源数据库(源兼容性设置为 11.2.0.4 或更高版本),DDL 的捕获由日志挖掘服务器异步执行,不需要安装特殊的触发器、表或其他数据库对象。无需停止用户应用程序即可执行 Oracle GoldenGate升级。当 Extract 与早于版本  11.2.0.4 的 Oracle 11g 源数据库处于集成模式时,需要使用 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

0115bff7b7407cc3c9966c879397bd34.png

文件名为:213000_fbo_ggs_Linux_x64_Oracle_shiphome.zip

安装过程可查看此文:https://mp.weixin.qq.com/s/Px1TqoVCEgRMSllZ8Xm3yQ

Oracle 11.2.0.4 or Later Database Privileges

3d45578cab0714a2e34ad6e05a35e2fb.png

基于数据泵的数据库初始化步骤

d5c470cca1febf04ad1a5c8cf2287fe3.png

五、常用命令

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、附加日志

521337b5397c6119e312fa5dd4752c6f.png

要求:数据库开归档,补充日志,最小附加日志,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 (ps-OGG) 1> dblogin userid ogg@TEST, password ogg#1234
Successfully logged into database.


GGSCI (ps-OGG 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.

51d6063eef22baa7b65d9a71ff50f88c.png
fb98fa167dbfdca9384e07a7f46f02df.png

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)

7edbd08e6e71b7dcc02cf435516c9c67.png

3、内存优化管理
streams_pool

ad67b19f12e558c792679d0d0f6a83d3.png

CACHEMGR

 OGG会将允许使用的内存缺省:64位系统设置为8G,32位系统为2G。
 默认的虚拟内存空间为安装目录下的dirtmp
 CACHEMGR CACHESIZE 500MB, CACHEDIRECTORY /ggs/temp, CACHEDIRECTORY /ggs2/temp

捕获、传输、投递进程参数优化

6653225123d7222079c4d7ee568dbfb1.png

2d6ced46b3ae17bd45c710e95f1d4568.png

ec53f66877c45f37a47e4e442c88fcd3.png

V$LOGMNR_CONTENTS

46356a4138a4f8447f09bc3a91b18fec.png

4、常见错误

544a5f7bff4db5659e2dab5b5211a7b5.png

参考链接

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
————————————————————————————

a3c48b9cf2a9d91bf8c7cbce02074e74.gif

分享几个数据库备份脚本

Oracle 表碎片检查及整理方案

OGG|Oracle GoldenGate 基础2022 年公众号历史文章合集整理
 
  

Oracle 19c RAC 遇到的几个问题

OGG|Oracle 数据迁移后比对一致性

OGG|Oracle GoldenGate 微服务架构

Oracle 查询表空间使用率超慢问题一则

国产数据库|TiDB 5.4 单机快速安装初体验

Oracle ADG 备库停启维护流程及增量恢复

Linux 环境搭建 MySQL8.0.28 主从同步环境

从国产数据库调研报告中你都能了解哪些信息及我的总结建议

猜你喜欢

转载自blog.csdn.net/JiekeXu/article/details/132680413