ITPub博客

首页 > 数据库 > Oracle > 数据库教程FGMT26‑3‑GoldenGate数据库容灾迁移03

数据库教程FGMT26‑3‑GoldenGate数据库容灾迁移03

原创 Oracle 作者:mfkqwyc86 时间:2026-09-16 11:00:52 0 删除 编辑

数据库教程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`两套测试环境完整复现,理解各类异构源、大数据目标的限制,再落地企业异构数据库迁移、数据中台同步真实项目。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9664900/viewspace-3182513/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
风哥Oracle,MySQL,PostgreSQL,Linux,大数据,国产数据库,中间件等教程

注册时间:2010-10-26

  • 博文量
    68
  • 访问量
    406002