1. 首页 > Oracle教程 > 正文

数据库教程FGMT26‑3‑GoldenGate数据库容灾迁移03(OGG同构异构、数据库迁移、数据同步、容灾复制)

数据库教程FGMT26‑3‑GoldenGate数据库容灾迁移03(OGG同构异构、数据库迁移、数据同步、容灾复制)

## 前言

风哥教程FGMT26‑1、FGMT26‑2已经完成Oracle、SQLServer、DB2源端的OGG复制实战。风哥教程本文继续扩展更多异构源端与大数据目标端场景,覆盖PostgreSQL、MySQL系列作为源端,目标包含Oracle、MySQL、SQLServer、MongoDB、Kafka、HDFS、HBase,完整对应OGG21c多套异构迁移同步案例。PostgreSQL依靠WAL逻辑复制槽完成CDC捕获,MySQL依靠binlog行格式日志;大数据目标端依赖OGG BigData Java适配器,输出至消息队列、分布式存储、NoSQL数据库。异构场景下日志开启、补充日志、ODBC驱动、defgen定义文件、数据类型映射、存量初始化、DDL限制、故障处理与Oracle源端存在明显差异,如果配置疏漏,会出现进程abend、字段错乱、数据丢失、重复等问题。风哥 itpux‑com

本套风哥教程面向DBA、数据集成工程师、数据中台实施人员;实验主机源端`fgedu‑net‑cn1`,目标端`fgedu‑net‑cn2`,两台主机硬件规格均为**64G内存,8颗CPU**;OGG软件根目录统一`/fgedudb/ogg`;业务schema用户名`fgedu`,业务测试表`t_ord(id bigint primary key,ord_name varchar(200),create_dt timestamp)`。源端包含PostgreSQL14、MySQL5.7、MySQL8.0;目标端覆盖Oracle19c、MySQL、SQLServer、MongoDB、Kafka、HDFS、HBase;使用OGG21c经典GGSCI架构,BigData适配器部署于目标主机。风哥教程本文分为前言大纲、核心理论知识、实战操作演练、风哥针对本文总结四大模块;实战提供大量可直接复制shell、GGSCI、SQL脚本,读者可在两套独立测试主机完整复现全部异构链路。网上搜索风哥教程可以学习全套数据库教程

### 内容大纲

1. OGG21c新增异构场景综述,PostgreSQL、MySQL源端,关系型与大数据目标环境整体规划
2. 核心理论:PostgreSQL WAL逻辑复制机制、MySQL binlog行日志机制;BigData适配器工作原理;defgen、REPLICA IDENTITY、binlog_row_image;异构存量初始化、DDL复制限制、主键约束、LOB与时间类型风险点
3. 异构环境通用约束:ODBC驱动版本匹配、checkpoint表、KEYCOLS、HANDLECOLLISIONS适用边界、Veridata异构校验
4. 实战1:OGG21c PostgreSQL to Oracle异构复制实战
5. 实战2:OGG21c PostgreSQL to MySQL异构复制实战
6. 实战3:OGG21c PostgreSQL to SQLServer异构复制实战
7. 实战4:OGG21c PostgreSQL to MongoDB(BigData适配器)
8. 实战5:OGG21c PostgreSQL to Kafka(BigData适配器)
9. 实战6:OGG21c MySQL5.7 to Oracle19c异构复制实战
10. 实战7:OGG21c MySQL8.0 to MySQL8.0同构复制实战
11. 实战8:OGG21c MySQL8.0 to SQLServer异构复制实战
12. 实战9:OGG21c MySQL8.0 to PostgreSQL异构复制实战
13. 实战10:OGG21c MySQL to MongoDB BigData适配器实战
14. 实战11:OGG21c MySQL5.7 to Kafka BigData适配器实战
15. 实战12:OGG21c Oracle19c to Kafka BigData适配器实战
16. 实战13:OGG21c Oracle19c to Hadoop‑HDFS BigData适配器实战
17. 实战14:OGG21c Oracle19c to Hadoop‑HBase BigData适配器实战
18. 异构链路通用运维要点,defgen维护、无主键表处理、logdump排错、高频故障清单
19. 异构迁移项目上线验收检查清单

## 一、核心理论知识

本章节为本套风哥教程理论基础,理解PostgreSQL、MySQL源端CDC捕获底层机制,掌握大数据适配器的工作模式,识别异构复制各类风险,规避迁移项目中数据不一致、进程异常终止问题。风哥教程 113257174

### 1.1 PostgreSQL源端CDC捕获原理

PostgreSQL源端依靠**WAL预写日志+逻辑复制槽**实现CDC抽取。

1. 数据库参数必须设置`wal_level=logical`,开启逻辑复制;配置`max_replication_slots`、`max_wal_senders`,分配复制槽数量;`track_commit_timestamp=on`用于事务时间戳追踪。
2. `REPLICA IDENTITY`控制WAL记录旧镜像:
– `DEFAULT`:记录主键字段,有主键表默认使用;
– `FULL`:记录整行全部字段,适合无主键表、双向复制场景,会增大WAL日志量;
– `NOTHING`:不记录旧镜像,update、delete复制直接失败。
3. GGSCI执行`ADD TRANDATA`,底层修改表的`REPLICA IDENTITY`属性,OGG会自动创建逻辑复制槽;复制槽不可随意删除,删除后会造成WAL日志被数据库自动回收,Extract进程abend。
4. PostgreSQL异构复制,源端必须执行defgen生成二进制定义文件,拷贝目标端dirdef目录,除PG‑PG同构外,不支持`ASSUMETARGETDEFS`。网上搜索风哥教程可以学习全套数据库教程

### 1.2 MySQL源端CDC捕获原理

MySQL源端读取binlog二进制日志,**必须`binlog_format=ROW`、`binlog_row_image=FULL`**,STATEMENT/MIXED格式OGG无法正确捕获行变更。

1. `binlog_row_image=FULL`保证update、delete事件记录修改前后完整行镜像;
2. server‑id必须大于0;
3. MySQL源端GGSCI执行`ADD TRANDATA`开启表级补充日志;
4. binlog日志不能过早清理,否则Extract进程abend;
5. MySQL异构复制,跨数据库类型场景,源端执行defgen,目标端使用`SOURCEDEFS`加载元数据。

### 1.3 OGG BigData适配器通用原理

MongoDB、Kafka、HDFS、HBase不属于传统关系型数据库,没有原生数据库Replicat进程。

1. Replicat进程加载`TARGETDB LIBFILE libggjava.so`Java适配器;
2. 读取`dirprm/*.properties`配置文件,定义连接信息、输出格式、映射模板;
3. 将trail内部事务记录转换JSON或者结构化格式输出到大数据组件;
4. BigData适配器**只支持作为目标,不能作为源端进行抽取捕获**;
5. classpath必须配置完整jar包,缺少依赖会直接造成Replicat进程abend。风哥数据库教程 itpux‑com

### 1.4 defgen、COLMAP、KEYCOLS异构通用规则

1. defgen:源端读取数据字典生成二进制`.def`定义文件,异构跨库必须使用;表结构DDL变更,**必须源端重新defgen,拷贝覆盖目标dirdef,重启Replicat**,禁止手工修改def二进制文件。
2. COLMAP:列名不一致、时间格式转换、字段表达式转换,使用COLMAP完成映射。
3. KEYCOLS:源表无主键、无唯一索引,Extract与Replicat两端同时指定KEYCOLS,作为update/delete定位行的依据。
4. HANDLECOLLISIONS:只用于迁移初始化基线不一致临时处理,禁止生产长期运行;生产异构项目搭配GoldenGate Veridata定期做跨库数据一致性校验。

### 1.5 异构复制DDL限制

1. PostgreSQL、MySQL作为源端,**绝大多数异构目标不支持DDL自动同步**;源端执行alter table,目标端必须手工执行DDL,并且重新生成defgen定义文件。
2. Oracle源向大数据目标可以支持有限DDL事件输出JSON,但不会自动在目标组件执行DDL。

### 1.6 异构存量初始化方案

1. 小表:OGG Direct Load直接加载;
2. 中大表:数据库原生导出导入,pg_dump、mysqldump;
3. 超大规模业务表:DataX、Sqoop等第三方ETL完成存量基线,OGG负责增量CDC捕获。

>
> 异构迁移标准流程:源业务不停机 → 启动Extract捕获增量 → 存量初始化加载 → Replicat追赶复制延迟趋近0 → 业务窗口停止源写入 → trail全部消费完毕 → 业务切换指向目标端。网上搜索风哥教程可以学习全套数据库教程

### 1.7 高频风险点汇总

1. 时间类型:PostgreSQL timestamp、MySQL datetime、Oracle timestamp类型格式差异,必须COLMAP做格式转换;
2. LOB大对象:配置`LOBWRITESIZE`,防止Replicat内存溢出OOM;
3. 字符集:源目标字符集不一致出现中文乱码;PostgreSQL需要设置环境变量`PGCLIENTENCODING`;
4. ODBC驱动:PostgreSQL、SQLServer目标端ODBC驱动版本必须和OGG版本严格兼容;
5. 复制槽/binlog过早回收:源端日志被清理直接导致Extract进程异常终止。

### 1.8 Veridata异构校验

GoldenGate Veridata支持跨异构数据库做数据对比,识别数据差异,生成修复脚本;异构割接、故障恢复后强烈建议执行对比校验。
上51CTO搜索风哥可以学习全套数据库教程

## 二、实战操作演练

>
> 环境说明:
> 源主机`fgedu‑net‑cn1`,目标主机`fgedu‑net‑cn2`,硬件64G内存8CPU;OGG根目录`/fgedudb/ogg`;OGG21c经典架构;BigData适配器部署目标主机;操作系统用户oracle;所有主机GGSCI执行`create subdirs`;MGR端口7809,防火墙放行7809‑7900端口;
> 统一业务测试表`t_ord(id bigint primary key,ord_name varchar(200),create_dt timestamp)`。

### 实战1:OGG21c PostgreSQL to Oracle异构复制实战

>
> 源端`fgedu‑net‑cn1` PostgreSQL14;目标`fgedu‑net‑cn2` Oracle19c。

#### 2.1.1 源PostgreSQL数据库预配置

修改postgresql.conf参数,修改后重启数据库实例

“`
wal_level = logical
max_replication_slots = 10
max_wal_senders = 10
track_commit_timestamp = on
listen_addresses = ‘*’
“`

pg_hba.conf增加访问策略

“`
host all all 0.0.0.0/0 md5
“`

登录psql执行:

“`
create database fgedudb;
\c fgedudb
create schema fgedu;
create user ogg_src with password ‘fgedudb’;
grant all privileges on database fgedudb to ogg_src;
create table fgedu.t_ord(id bigint primary key,ord_name varchar(200),create_dt timestamp);
insert into fgedu.t_ord values(1,’PGORD001′,now());
commit;
“`

#### 2.1.2 GGSCI源端操作,添加trandata,defgen生成定义文件

“`
dblogin sourcedb fgedudb,userid ogg_src,password fgedudb
add trandata fgedu.t_ord
info trandata fgedu.t_ord
“`

编写defgen参数文件

“`
cd /fgedudb/ogg
cat > def_fgedu_pg.prm <<EOF
DEFSFILE ./dirdef/fgedu_pg.def
SOURCEDB fgedudb,USERID ogg_src,PASSWORD fgedudb
TABLE fgedu.t_ord;
EOF
./defgen paramfile ./def_fgedu_pg.prm
#拷贝def文件到目标主机dirdef
scp ./dirdef/fgedu_pg.def oracle@fgedu‑net‑cn2:/fgedudb/ogg/dirdef/
“`

#### 2.1.3 源端MGR、Extract、DataPump进程配置

“`
edit params mgr
“`

mgr参数

“`
PORT 7809
DYNAMICPORTLIST 7810‑7900
AUTOSTART EXTRACT *
AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 2
PURGEOLDEXTRACTS ./dirdat/*,USECHECKPOINTS,MINKEEPDAYS 7
“`

“`
start mgr
add extract ext_pg,tranlog,begin now
add exttrail ./dirdat/pg,extract ext_pg,megabytes 200
edit params ext_pg
“`

ext_pg.prm

“`
EXTRACT ext_pg
SETENV(PGCLIENTENCODING=”UTF8″)
SOURCEDB fgedudb,USERID ogg_src,PASSWORD fgedudb
EXTTRAIL ./dirdat/pg
TABLE fgedu.t_ord;
“`

“`
add extract dp_pg,exttrailsource ./dirdat/pg
add rmttrail ./dirdat/pg,extract dp_pg,megabytes 200
edit params dp_pg
“`

dp_pg.prm

“`
EXTRACT dp_pg
SOURCEDB fgedudb,USERID ogg_src,PASSWORD fgedudb
RMTHOST fgedu‑net‑cn2,MGRPORT 7809
RMTTRAIL ./dirdat/pg
TABLE fgedu.t_ord;
“`

“`
start extract ext_pg
start extract dp_pg
info all
“`

#### 2.1.4 目标Oracle19c数据库预配置

“`
create user ogg_tgt identified by fgedudb default tablespace users temporary tablespace temp;
grant connect,resource to ogg_tgt;
create user fgedu identified by fgedudb default tablespace users;
grant connect,resource to fgedu;
create table fgedu.t_ord(id number primary key,ord_name varchar2(200),create_dt timestamp);
“`

GLOBALS配置checkpoint表

“`
vi /fgedudb/ogg/GLOBALS
“`

“`
CHECKPOINTTABLE ogg_tgt.gg_checkpoint
“`

“`
dblogin userid ogg_tgt,password fgedudb
add checkpointtable ogg_tgt.gg_checkpoint
add replicat rep_pg2ora,exttrail ./dirdat/pg,checkpointtable ogg_tgt.gg_checkpoint
edit params rep_pg2ora
“`

rep_pg2ora.prm

“`
REPLICAT rep_pg2ora
USERID ogg_tgt,PASSWORD fgedudb
SOURCEDEFS ./dirdef/fgedu_pg.def
HANDLECOLLISIONS
MAP fgedu.t_ord,TARGET fgedu.t_ord,
COLMAP(
id=id,
ord_name=ord_name,
create_dt=@DATETIME(create_dt,”YYYY‑MM‑DD HH24:MI:SS.FF”)
);
“`

“`
start replicat rep_pg2ora
info replicat rep_pg2ora
lag replicat rep_pg2ora
“`

#### 2.1.5 同步验证

源PostgreSQL执行DML:

“`
insert into fgedu.t_ord values(2,’PGORD002′,now());
commit;
“`

目标Oracle查询`select * from fgedu.t_ord;`验证数据同步。网上搜索风哥教程可以学习全套数据库教程

### 实战2:OGG21c PostgreSQL to MySQL异构复制实战

源PostgreSQL14;目标MySQL8.0。源端defgen、Extract、DataPump配置和实战1保持一致。
目标MySQL预创建库与表:

“`
create database fgedu;
use fgedu;
create table t_ord(id bigint primary key,ord_name varchar(200),create_dt datetime(6));
create user ogg_tgt@’%’ identified with caching_sha2_password by ‘fgedudb’;
grant all privileges on fgedu.* to ogg_tgt@’%’;
flush privileges;
“`

目标Replicat rep_pg2my.prm

“`
REPLICAT rep_pg2my
TARGETDB fgedu,USERID ogg_tgt,PASSWORD fgedudb
SOURCEDEFS ./dirdef/fgedu_pg.def
HANDLECOLLISIONS
SQLEXEC “SET FOREIGN_KEY_CHECKS=0″
MAP fgedu.t_ord, TARGET fgedu.t_ord,
COLMAP(
id=id,
ord_name=ord_name,
create_dt=@DATETIME(create_dt,”YYYY‑MM‑DD HH24:MI:SS.FF”)
);
“`

GGSCI添加、启动Replicat;源端DML,验证MySQL目标数据。风哥数据库教程 itpux‑com

### 实战3:OGG21c PostgreSQL to SQLServer异构复制实战

源PostgreSQL14;目标SQLServer2019;目标部署OGG‑MSSQL介质、兼容版本ODBC驱动。
源端流程同上,defgen生成定义文件拷贝目标。
目标SQLServer:

“`
CREATE DATABASE fgedu;
USE fgedu;
CREATE TABLE t_ord(id bigint primary key,ord_name varchar(200),create_dt datetime2);
CREATE LOGIN ogg_tgt WITH PASSWORD=’fgedudb’;
USE fgedu;
CREATE USER ogg_tgt FOR LOGIN ogg_tgt;
GRANT CONTROL ON DATABASE::fgedu TO ogg_tgt;
“`

目标Replicat rep_pg2mssql.prm

“`
REPLICAT rep_pg2mssql
TARGETDB fgedu,USERID ogg_tgt,PASSWORD fgedudb
SOURCEDEFS ./dirdef/fgedu_pg.def
HANDLECOLLISIONS
MAP fgedu.t_ord,TARGET dbo.t_ord,
COLMAP(
id=id,
ord_name=ord_name,
create_dt=@DATETIME(create_dt,”YYYY‑MM‑DD HH24:MI:SS.FF”)
);
“`

GGSCI启动Replicat,DML验证同步。

### 实战4:OGG21c PostgreSQL to MongoDB(BigData适配器)

目标主机部署OGG BigData适配器,不需要预建MongoDB集合。
编写`dirprm/pg_mongo.props`

“`
gg.handlerlist=mongohandler
gg.handler.mongohandler.type=mongodb
gg.handler.mongohandler.connection=mongodb://ogg_tgt:fgedudb@fgedu‑net‑cn2:27017
gg.handler.mongohandler.db=fgedu
gg.handler.mongohandler.collectionMappingTemplate={tableName}
goldengate.userexit.writers=javawriter
javawriter.bootoptions=-Xmx2G‑Xms512M
“`

目标GGSCI配置Replicat rep_pg2mongo

“`
add replicat rep_pg2mongo,exttrail ./dirdat/pg
edit params rep_pg2mongo
“`

rep_pg2mongo.prm

“`
REPLICAT rep_pg2mongo
TARGETDB LIBFILE libggjava.so SET property=dirprm/pg_mongo.props
SOURCEDEFS ./dirdef/fgedu_pg.def
REPORTCOUNT EVERY 1 MINUTES,RATE
MAP fgedu.t_ord,TARGET fgedu.t_ord;
“`

“`
start replicat rep_pg2mongo
info replicat rep_pg2mongo
“`

源PostgreSQL执行DML,登录MongoDB查看集合文档。网上搜索风哥教程可以学习全套数据库教程

### 实战5:OGG21c PostgreSQL to Kafka(BigData适配器)

目标编写kafka属性文件`dirprm/pg_kafka.props`

“`
gg.handlerlist=kafkahandler
gg.handler.kafkahandler.type=kafka
gg.handler.kafkahandler.kafkaProducerConfigFile=dirprm/custom_kafka_producer.properties
gg.handler.kafkahandler.topicMappingTemplate=fgedu_t_ord
gg.handler.kafkahandler.format=json
gg.handler.kafkahandler.mode=op
goldengate.userexit.writers=javawriter
javawriter.bootoptions=-Xmx2G‑Xms512M
“`

custom_kafka_producer.properties填写kafka broker连接信息

“`
bootstrap.servers=fgedu‑net‑cn2:9092
acks=1
reconnect.backoff.ms=1000
value.serializer=org.apache.kafka.common.serialization.ByteArraySerializer
key.serializer=org.apache.kafka.common.serialization.ByteArraySerializer
batch.size=16384
linger.ms=0
“`

Replicat rep_pg2kafka.prm

“`
REPLICAT rep_pg2kafka
TARGETDB LIBFILE libggjava.so SET property=dirprm/pg_kafka.props
SOURCEDEFS ./dirdef/fgedu_pg.def
REPORTCOUNT EVERY 1 MINUTES,RATE
MAP fgedu.t_ord,TARGET fgedu.t_ord;
“`

GGSCI启动Replicat;源端DML,消费kafka topic验证消息输出。

### 实战6:OGG21c MySQL5.7 to Oracle19c异构复制实战

>
> 源`fgedu‑net‑cn1` MySQL5.7;目标`fgedu‑net‑cn2` Oracle19c。
> 源MySQL5.7修改my.cnf配置,修改后重启服务

“`
log-bin=/fgedudb/mysql/binlog
binlog_format=ROW
binlog_row_image=FULL
server-id=1
“`

登录MySQL:

“`
create database fgedu;
use fgedu;
create user ogg_src@’%’ identified by ‘fgedudb’;
grant replication slave,replication client,select on *.* to ogg_src@’%’;
grant all on fgedu.* to ogg_src@’%’;
flush privileges;
create table fgedu.t_ord(id bigint primary key,ord_name varchar(200),create_dt datetime);
insert into fgedu.t_ord values(1,’MY57ORD001′,now());
commit;
“`

GGSCI源端操作

“`
dblogin sourcedb fgedu,userid ogg_src,password fgedudb
add trandata fgedu.t_ord
“`

defgen生成定义文件

“`
cd /fgedudb/ogg
cat > def_fgedu_my57.prm <<EOF
DEFSFILE ./dirdef/fgedu_my57.def
SOURCEDB fgedu,USERID ogg_src,PASSWORD fgedudb
TABLE fgedu.t_ord;
EOF
./defgen paramfile ./def_fgedu_my57.prm
scp ./dirdef/fgedu_my57.def oracle@fgedu‑net‑cn2:/fgedudb/ogg/dirdef/
“`

源端MGR、Extract、DataPump进程配置,启动进程。
目标Oracle预建用户与业务表;Replicat rep_my572ora.prm

“`
REPLICAT rep_my572ora
USERID ogg_tgt,PASSWORD fgedudb
SOURCEDEFS ./dirdef/fgedu_my57.def
HANDLECOLLISIONS
MAP fgedu.t_ord,TARGET fgedu.t_ord,
COLMAP(
id=id,
ord_name=ord_name,
create_dt=@DATETIME(create_dt,”YYYY‑MM‑DD HH24:MI:SS”)
);
“`

GGSCI启动Replicat;源MySQL DML,验证Oracle目标数据。风哥数据库教程 itpux‑com

### 实战7:OGG21c MySQL8.0 to MySQL8.0同构复制实战

>
> 同构MySQL‑MySQL,可以使用`ASSUMETARGETDEFS`,不需要defgen。
> 源MySQL8.0 my.cnf配置:

“`
log-bin=/fgedudb/mysql/binlog
binlog_format=ROW
binlog_row_image=FULL
server-id=1
“`

源端GGSCI:`add trandata fgedu.t_ord`;配置Extract、DataPump。
目标MySQL8.0预建库、业务表;Replicat rep_my80.prm

“`
REPLICAT rep_my80
TARGETDB fgedu,USERID ogg_tgt,PASSWORD fgedudb
ASSUMETARGETDEFS
HANDLECOLLISIONS
SQLEXEC “SET FOREIGN_KEY_CHECKS=0″
MAP fgedu.t_ord,TARGET fgedu.t_ord;
“`

启动Replicat,DML验证同步。网上搜索风哥教程可以学习全套数据库教程

### 实战8:OGG21c MySQL8.0 to SQLServer异构复制实战

源MySQL8.0,目标SQLServer2019。源端defgen生成def定义拷贝目标;目标SQLServer预创建对应业务表。
目标Replicat rep_my802mssql.prm

“`
REPLICAT rep_my802mssql
TARGETDB fgedu,USERID ogg_tgt,PASSWORD fgedudb
SOURCEDEFS ./dirdef/fgedu_my80.def
HANDLECOLLISIONS
MAP fgedu.t_ord,TARGET dbo.t_ord,
COLMAP(
id=id,
ord_name=ord_name,
create_dt=@DATETIME(create_dt,”YYYY‑MM‑DD HH24:MI:SS”)
);
“`

GGSCI启动Replicat,DML测试。

### 实战9:OGG21c MySQL8.0 to PostgreSQL异构复制实战

源MySQL8.0;目标PostgreSQL14;源defgen生成定义文件拷贝目标;目标预创建PostgreSQL业务表。
目标Replicat rep_my802pg.prm

“`
REPLICAT rep_my802pg
SETENV(PGCLIENTENCODING=”UTF8″)
TARGETDB fgedudb,USERID ogg_tgt,PASSWORD fgedudb
SOURCEDEFS ./dirdef/fgedu_my80.def
HANDLECOLLISIONS
MAP fgedu.t_ord,TARGET fgedu.t_ord,
COLMAP(
id=id,
ord_name=ord_name,
create_dt=@DATETIME(create_dt,”YYYY‑MM‑DD HH24:MI:SS”)
);
“`

启动Replicat,执行DML验证同步。

### 实战10:OGG21c MySQL to MongoDB BigData适配器

源MySQL,目标MongoDB;目标BigData适配器,mongo.props配置参考实战4;Replicat加载libggjava.so,SOURCEDEFS引用mysql的def文件;源端DML,验证MongoDB集合文档。

### 实战11:OGG21c MySQL5.7 to Kafka BigData适配器

源MySQL5.7;目标Kafka;kafka props配置参考实战5;Replicat使用BigData适配器,SOURCEDEFS加载mysql def定义;DML测试,消费kafka消息。

### 实战12:OGG21c Oracle19c to Kafka BigData适配器

源Oracle19c;目标Kafka。
编写dirprm/oracle_kafka.props

“`
gg.handlerlist=kafkahandler
gg.handler.kafkahandler.type=kafka
gg.handler.kafkahandler.kafkaProducerConfigFile=dirprm/custom_kafka_producer.properties
gg.handler.kafkahandler.topicMappingTemplate=fgedu_t_ord
gg.handler.kafkahandler.format=json
gg.handler.kafkahandler.mode=op
goldengate.userexit.writers=javawriter
javawriter.bootoptions=-Xmx2G‑Xms512M
“`

Replicat rep_ora2kafka.prm

“`
REPLICAT rep_ora2kafka
TARGETDB LIBFILE libggjava.so SET property=dirprm/oracle_kafka.props
ASSUMETARGETDEFS
REPORTCOUNT EVERY 1 MINUTES,RATE
MAP fgedu.t_ord,TARGET fgedu.t_ord;
“`

GGSCI添加、启动Replicat;Oracle源端DML,消费kafka topic验证JSON消息。上51CTO搜索风哥可以学习全套数据库教程

### 实战13:OGG21c Oracle19c to Hadoop‑HDFS BigData适配器

目标BigData适配器,编写`dirprm/hdfs.props`

“`
gg.handlerlist=hdfshandler
gg.handler.hdfshandler.type=hdfs
gg.handler.hdfshandler.mode=tx
gg.handler.hdfshandler.pathMappingTemplate=/ogg_data/${fullyQualifiedTableName}
gg.handler.hdfshandler.maxFileSize=1g
gg.handler.hdfshandler.fileRollInterval=0
gg.handler.hdfshandler.inactivityRollInterval=0
goldengate.userexit.writers=javawriter
javawriter.bootoptions=-Xmx2G‑Xms512M
“`

Replicat rep_ora2hdfs.prm

“`
REPLICAT rep_ora2hdfs
TARGETDB LIBFILE libggjava.so SET property=dirprm/hdfs.props
ASSUMETARGETDEFS
REPORTCOUNT EVERY 1 MINUTES,RATE
MAP fgedu.t_ord,TARGET fgedu.t_ord;
“`

GGSCI启动Replicat;源Oracle DML,查看HDFS目录生成数据文件。

### 实战14:OGG21c Oracle19c to Hadoop‑HBase BigData适配器

编写`dirprm/hbase.props`

“`
gg.handlerlist=hbasehandler
gg.handler.hbasehandler.type=hbase
gg.handler.hbasehandler.mode=tx
gg.handler.hbasehandler.hBaseZkQuorum=fgedu‑net‑cn2:2181
gg.handler.hbasehandler.hBaseColumnFamilyName=cf
goldengate.userexit.writers=javawriter
javawriter.bootoptions=-Xmx2G‑Xms512M
“`

Replicat rep_ora2hbase.prm

“`
REPLICAT rep_ora2hbase
TARGETDB LIBFILE libggjava.so SET property=dirprm/hbase.props
ASSUMETARGETDEFS
REPORTCOUNT EVERY 1 MINUTES,RATE
MAP fgedu.t_ord,TARGET fgedu.t_ord;
“`

GGSCI启动Replicat;源端DML,查询HBase表数据。

### 2.12 异构复制通用运维要点

#### 2.12.1 GGSCI常用命令

“`
info all
info extract ext_name
info replicat rep_name
lag extract ext_name
lag replicat rep_name
stats extract ext_name,total
stats replicat rep_name,total
view report ext_name
view report rep_name
view ggsevt
send extract ext_name,showtrans
“`

#### 2.12.2 defgen维护

源端DDL变更:源重新执行defgen,scp覆盖目标dirdef下def文件,重启Replicat;异构不自动同步DDL,源目标两端手工维护表结构。

#### 2.12.3 无主键表处理

Extract与Replicat参数同时配置`KEYCOLS(col1,col2)`指定唯一定位列。

#### 2.12.4 logdump排错

“`
cd /fgedudb/ogg
./logdump
open ./dirdat/xx00000000
gh on
n
“`

读取trail原始记录,定位字段映射异常。

#### 2.12.5 高频故障清单

1. PostgreSQL Extract abend:wal_level不是logical;复制槽被删除回收WAL日志;
2. MySQL Extract abend:binlog_format不是ROW;binlog被提前清理;
3. Replicat OGG‑01296 mapping error:defgen定义文件缺失或者版本旧;
4. 时间字段错乱:缺少COLMAP时间格式转换;
5. BigData Replicat abend:jar依赖缺失,kafka/mongo/hdfs网络不通,props配置错误;
6. 字符集乱码:PostgreSQL缺少`SETENV(PGCLIENTENCODING=”UTF8″)`。

### 2.13 异构迁移项目上线验收检查清单

1. 源端数据库:日志/WAL/binlog配置正确;trandata全部业务表开启;源账号权限完整;日志保留策略,保证OGG消费完成才清理日志文件。
2. OGG进程:MGR、Extract、DataPump、Replicat全部running状态;info all无abend;复制延迟指标正常。
3. defgen定义文件:源目标defgen版本同步;DDL变更操作流程文档化。
4. 数据验证:增删改DML全部验证;时间、LOB、特殊字段验证;Veridata跨异构库做一致性对比。
5. 存量初始化:存量基线数据完整,增量链路追赶延迟趋近0。
6. 故障演练:进程启停演练;模拟网络中断,恢复自动续传。
7. 运维文档:DDL变更手册,故障排查手册,业务切换回退操作步骤。

## 三、风哥针对本文总结

本套风哥教程完整覆盖OGG21c多套异构实战:PostgreSQL向Oracle、MySQL、SQLServer、MongoDB、Kafka;MySQL5.7/8.0向Oracle、MySQL、SQLServer、PostgreSQL、MongoDB、Kafka;Oracle19c向Kafka、HDFS、HBase大数据目标;讲解PostgreSQL WAL逻辑复制槽、MySQL binlog行日志机制,BigData Java适配器工作原理,defgen定义文件、COLMAP字段映射、KEYCOLS唯一定位列,异构存量初始化方案、运维排错、上线验收清单。

1. PostgreSQL源端必须设置`wal_level=logical`,分配足够复制槽;复制槽不可随意删除,删除会造成WAL日志被数据库自动回收,Extract进程abend;表更新删除依赖`REPLICA IDENTITY`属性,无主键业务表建议设置为FULL模式。
2. MySQL源端binlog_format必须设置ROW,`binlog_row_image=FULL`;STATEMENT/MIXED格式OGG无法捕获行级变更;binlog日志不能过早清理,否则Extract异常终止。
3. 除PG‑PG、MySQL‑MySQL等同构场景,其余跨数据库异构复制,源端必须执行defgen生成二进制定义文件,拷贝目标端dirdef目录,Replicat使用`SOURCEDEFS`;源端DDL变更之后,**必须重新defgen更新目标def文件,异构环境不会自动同步DDL,源目标两端手工维护表结构**。
4. BigData目标MongoDB/Kafka/HDFS/HBase没有传统数据库Replicat;依靠`libggjava.so`Java适配器读取properties配置,将trail事务转换输出JSON/结构化数据;必须保证classpath依赖jar包完整,网络可以访问大数据组件;BigData适配器仅可做目标,不能作为抽取源端。
5. 时间、LOB、字符集是异构复制高频出错点;PostgreSQL需要设置`PGCLIENTENCODING`环境变量;时间字段通过COLMAP做格式转换;无主键表Extract、Replicat两端同时配置KEYCOLS指定业务唯一定位列。
6. `HANDLECOLLISIONS`参数仅用于迁移初始化基线不一致临时处理,禁止生产长期运行;异构项目强烈部署Veridata,定期做跨异构库数据一致性校验,识别隐藏数据差异。
7. 异构迁移标准流程:不停业务启动Extract捕获增量,执行存量初始化,等待Replicat复制延迟趋近于0;业务窗口停止源写入,确认trail全部消费完毕,业务切换指向目标端;回退需要反向搭建异构复制链路。
8. 异构项目上线前完成全套验收,做进程重启、网络中断恢复演练,编写DDL变更手册、切换回退操作文档。

全部shell、GGSCI、SQL脚本,建议读者在`fgedu‑net‑cn1`、`fgedu‑net‑cn2`两套测试环境完整复现,理解各类异构源、大数据目标的限制,再落地企业异构数据库迁移、数据中台同步真实项目。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息