数据库教程FGMT26‑2-GoldenGate数据库容灾迁移02(OGG同构异构、数据库迁移、数据同步、容灾复制)
数据库教程FGMT26‑2-GoldenGate数据库容灾迁移02(OGG同构异构、数据库迁移、数据同步、容灾复制)
## 前言
Oracle GoldenGate(OGG)除Oracle‑Oracle同构复制场景之外,大量企业项目需要完成跨数据库类型异构数据复制,覆盖Oracle、MySQL、SQLServer、PostgreSQL、MongoDB、Kafka、DB2多数据源之间迁移与实时同步。异构复制相比Oracle同构场景存在诸多差异:源端数据库事务日志机制各不相同、数据类型映射差异、主键约束处理、defgen定义文件、ODBC驱动依赖、BigData适配器使用,很多在Oracle同构中可用的特性在异构环境会受到限制,例如DDL复制大部分异构场景不支持。风哥教程本文围绕11套异构实战案例展开:Oracle向MySQL、SQLServer、PostgreSQL、MongoDB;SQLServer双向及向Oracle、MySQL、PostgreSQL、MongoDB、Kafka;DB2向Oracle复制;完整覆盖源端数据库预配置、介质部署、defgen定义生成、Extract抽取、DataPump投递、Replicat应用、存量初始化、同步验证、故障排查,承接上一套风哥教程FGMT26‑1同构迁移内容,构成完整OGG容灾迁移知识体系。风哥 itpux‑com
本套风哥教程面向DBA、数据集成工程师、ETL开发、数据中台实施人员;实验主机:源端`fgedu‑net‑cn1`,目标端`fgedu‑net‑cn2`,两台主机硬件规格均为**64G内存,8颗CPU**;OGG软件根目录统一`/fgedudb/ogg`;业务schema用户名`fgedu`;数据库名`fgedudb`。源端包含Oracle11g、Oracle19c、SQLServer2019、DB2 LUW;目标端包含MySQL5.7、MySQL8.0、SQLServer、PostgreSQL、MongoDB、Kafka;OGG版本涵盖OGG19c经典GGSCI架构、OGG21c异构版本、OGG BigData大数据适配器。风哥教程本文分为前言大纲、核心理论知识、实战操作演练、风哥针对本文总结四大模块;实战提供大量可直接复制shell、GGSCI、SQL脚本,读者可在两套独立测试主机完整复现各类异构复制链路。网上搜索风哥教程可以学习全套数据库教程
### 内容大纲
1. OGG异构复制整体综述,11套实战场景环境规划,异构复制与Oracle同构复制核心差异
2. 核心理论:异构复制源端日志机制对比、defgen定义文件原理、COLMAP字段映射、KEYCOLS唯一定位列;BigData适配器工作原理;异构DDL复制限制;异构存量初始化方案
3. 异构环境通用约束:ODBC驱动依赖、数据类型转换风险、主键约束、时间类型、LOB大对象处理、冲突处理HANDLECOLLISIONS适用边界
4. 实战1:OGG19c Oracle11g迁移同步至MySQL5.7完整部署
5. 实战2:OGG21c Oracle19c迁移同步至MySQL8.0完整部署
6. 实战3:OGG21c Oracle19c迁移同步至SQLServer实战
7. 实战4:OGG21c Oracle19c迁移同步至PostgreSQL实战
8. 实战5:OGG21c Oracle19c迁移同步至MongoDB(BigData适配器)
9. 实战6:OGG21c SQLServer‑to‑SQLServer同构复制实战
10. 实战7:OGG21c SQLServer‑to‑Oracle异构复制实战
11. 实战8:OGG21c SQLServer‑to‑MySQL异构复制实战
12. 实战9:OGG21c SQLServer‑to‑PostgreSQL异构复制实战
13. 实战10:OGG21c SQLServer‑to‑MongoDB、SQLServer‑to‑Kafka BigData适配器实战
14. 实战11:OGG21c DB2 LUW‑to‑Oracle异构复制实战
15. 异构复制通用运维要点:defgen维护、数据校验Veridata、异构链路常见故障清单
16. 异构迁移项目上线验收检查清单
## 一、核心理论知识
本章节为本套风哥教程理论基础,理解异构复制底层差异,掌握defgen、字段映射、各数据库源端日志开启方式,规避异构迁移项目出现字段错乱、数据丢失、进程abend风险。风哥教程 113257174
### 1.1 OGG异构复制概述
异构复制指源数据库与目标数据库属于不同数据库产品,例如Oracle到MySQL、SQLServer到Kafka。Oracle‑Oracle同构复制可以使用`ASSUMETARGETDEFS`,**绝大多数异构场景必须使用defgen工具,在源端读取字典,生成二进制定义文件,拷贝至目标端dirdef目录,Replicat通过`SOURCEDEFS`加载元数据**。
>
> 重要限制清单:
1. 绝大多数异构环境**不支持DDL复制**;表结构变更,源、目标两端必须手工执行DDL,并且需要重新执行defgen更新定义文件;
2. 不同数据库数据类型存在差异:时间、LOB、二进制、JSON字段是高频出错点,需要COLMAP做格式转换;
3. Replicat更新、删除操作依赖主键或者唯一索引;无主键表必须配置`KEYCOLS`手动指定唯一定位列;
4. BigData目标(MongoDB、Kafka)没有传统数据库Replicat,依靠`libggjava.so` Java适配器读取properties配置输出消息/文档;
5. HANDLECOLLISIONS参数只适合迁移初始化阶段临时处理基线不一致,不适合生产长期运行,生产需要Veridata定期做数据一致性校验。网上搜索风哥教程可以学习全套数据库教程
### 1.2 各源数据库日志捕获底层机制对比
1. **Oracle源**:读取redo/归档日志;需要开启归档、FORCE LOGGING、schema补充日志`ADD SCHEMATRANDATA fgedu`。
2. **MySQL源**:读取binlog二进制日志;必须设置`binlog_format=ROW`,`binlog_row_image=FULL`。
3. **SQLServer源**:依靠SQLServer内置CDC变更捕获;数据库恢复模式必须FULL,开启数据库CDC,创建CDC捕获表。
4. **DB2 LUW源**:开启数据库归档日志,`LOGARCHMETH1`设置为LOGRETAIN,保证事务日志不会被过早清理。
5. **PostgreSQL源**:开启逻辑复制wal_level=logical,创建复制槽。
6. **MongoDB源**:依靠ReplicaSet副本集change‑stream变更流。
### 1.3 defgen定义文件原理
defgen为OGG自带工具,源端连接源数据库,读取表元数据,生成二进制`.def`定义文件,记录表名、列名、字段类型、精度、长度。
– 源端执行defgen;
– 将生成def文件scp拷贝到目标主机`$OGG_HOME/dirdef`;
– Replicat参数配置`SOURCEDEFS ./dirdef/xxx.def`;>
> 禁止手工修改defgen二进制文件;表结构发生变更之后,**必须重新执行defgen,同步更新目标端def文件**,否则Replicat直接abend。风哥数据库教程 itpux‑com
### 1.4 COLMAP字段映射与KEYCOLS
1. **COLMAP**:异构场景列名不一致、字段顺序不一致、时间格式转换、常量赋值,使用COLMAP完成映射转换。
“`
MAP fgedu.t_ord,TARGET fgedu.t_ord,
COLMAP(
id=id,
ord_name=order_name,
create_dt=@DATETIME(create_time,”YYYY‑MM‑DD HH24:MI:SS”)
);
“`
2. **KEYCOLS**:源表不存在主键、唯一索引,手工指定一组列作为DML更新删除定位键。
`KEYCOLS(id,org_code)`
### 1.5 BigData适配器原理(MongoDB / Kafka)
BigData目标不使用传统数据库Replicat;Replicat进程加载`TARGETDB LIBFILE libggjava.so`,读取`dirprm/*.properties`配置文件,把trail内部事务记录转换为JSON格式,输出到Kafka Topic或者MongoDB集合。
>
> 注意BigData适配器只做输出,**不能反向捕获Kafka/MongoDB变更作为源端**。
### 1.6 异构复制存量初始化方案
异构环境不能直接使用Oracle expdp/impdp跨数据库导入,三类主流初始化方案:
1. **数据库原生导出导入**:源端导出文本,目标端数据库工具导入;大表场景生产首选;
2. **OGG Direct Load直接加载**:Extract直接读取源全表,网络推送到目标Replicat;适合小量表,大表性能差;
3. **第三方ETL工具**:DataX、Sqoop完成存量基线,OGG负责增量CDC捕获;企业异构迁移项目最常用组合。
>
> 异构迁移标准流程:源业务不停机 → 启动Extract捕获增量变更 → 执行存量初始化加载 → Replicat追赶复制延迟趋近于0 → 业务窗口停止源写入 → 确认全部trail消费完毕 → 业务切换指向目标端。网上搜索风哥教程可以学习全套数据库教程
### 1.7 异构复制高频风险点
1. 时间类型:Oracle DATE携带时分秒;MySQL DATETIME;SQLServer datetime2;异构必须做格式转换,否则时间字段错乱。
2. LOB大对象:配置`LOBWRITESIZE`,防止大LOB造成Replicat OOM内存溢出。
3. 字符集:源目标数据库字符集不一致,出现中文乱码。
4. ODBC驱动版本不匹配:SQLServer、PostgreSQL异构目标,ODBC驱动版本必须与OGG版本兼容。
5. 异构DDL:源执行alter table,目标端不会同步,必须两端手工维护表结构,同步更新defgen文件。
### 1.8 Veridata异构数据校验
GoldenGate Veridata支持跨异构数据库做数据对比,低压力校验源目标数据差异,生成修复脚本;异构迁移割接前后强烈建议执行对比,验证数据一致性。
上51CTO搜索风哥可以学习全套数据库教程
## 二、实战操作演练
>
> 环境说明:
> 源主机`fgedu‑net‑cn1`;目标主机`fgedu‑net‑cn2`;硬件规格64G内存8CPU;OGG家目录`/fgedudb/ogg`;
> OGG19c用于Oracle11g‑MySQL5.7;OGG21c用于其余全部异构场景;BigData适配器部署在目标主机;
> 操作系统用户oracle;所有主机GGSCI执行`create subdirs`;MGR进程端口7809,防火墙放行7809‑7900端口;
> 业务测试表:`fgedu.t_ord(id number primary key,ord_name varchar2(120),create_dt date)`。
### 实战1:OGG19c Oracle11g迁移同步至MySQL5.7
>
> 源:`fgedu‑net‑cn1` Oracle11g;目标:`fgedu‑net‑cn2` MySQL5.7;OGG19c经典架构。
#### 2.1.1 源端Oracle11g数据库预配置
“`
alter database force logging;
alter database archivelog;
create user ogg_src identified by fgedudb default tablespace users temporary tablespace temp;
grant connect,resource,select any dictionary,execute on dbms_logmnr to ogg_src;
exec dbms_goldengate_auth.grant_admin_privilege(‘ogg_src’);
add schematrandata fgedu;
–业务测试schema与表
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(120),create_dt date);
insert into fgedu.t_ord values(1,’ORD001′,sysdate);
commit;
“`
#### 2.1.2 源端defgen生成表定义文件
编写`def_fgedu.prm`参数文件
“`
cd /fgedudb/ogg
cat > def_fgedu.prm <<EOF
DEFSFILE ./dirdef/fgedu_ora11g.def
USERID ogg_src,PASSWORD fgedudb
TABLE fgedu.t_ord;
EOF
./defgen paramfile ./def_fgedu.prm
#拷贝def文件至目标主机dirdef目录
scp ./dirdef/fgedu_ora11g.def oracle@fgedu‑net‑cn2:/fgedudb/ogg/dirdef/
“`
#### 2.1.3 源端MGR、Extract、DataPump配置(GGSCI)
“`
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_o11g,tranlog,begin now
add exttrail ./dirdat/o11,extract ext_o11g,megabytes 200
edit params ext_o11g
“`
ext_o11g.prm
“`
EXTRACT ext_o11g
USERID ogg_src,PASSWORD fgedudb
EXTTRAIL ./dirdat/o11
TABLE fgedu.t_ord;
“`
“`
add extract dp_o11g,exttrailsource ./dirdat/o11
add rmttrail ./dirdat/o11,extract dp_o11g,megabytes 200
edit params dp_o11g
“`
dp_o11g.prm
“`
EXTRACT dp_o11g
USERID ogg_src,PASSWORD fgedudb
RMTHOST fgedu‑net‑cn2,MGRPORT 7809
RMTTRAIL ./dirdat/o11
TABLE fgedu.t_ord;
“`
“`
start extract ext_o11g
start extract dp_o11g
info all
“`
#### 2.1.4 目标端MySQL5.7数据库预配置
登录MySQL执行:
“`
create database fgedu;
use fgedu;
create table t_ord(id bigint primary key,ord_name varchar(120),create_dt datetime);
create user ogg_tgt@’%’ identified by ‘fgedudb’;
grant all privileges on fgedu.* to ogg_tgt@’%’;
flush privileges;
“`
>
> 确认MySQL开启binlog_format=ROW,目标端OGG for MySQL介质、ODBC驱动部署完成。
#### 2.1.5 目标端Replicat配置
“`
add replicat rep_m57,exttrail ./dirdat/o11
edit params rep_m57
“`
rep_m57.prm
“`
REPLICAT rep_m57
TARGETDB fgedu,USERID ogg_tgt,PASSWORD fgedudb
SOURCEDEFS ./dirdef/fgedu_ora11g.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”)
);
“`
“`
start replicat rep_m57
info replicat rep_m57
lag replicat rep_m57
“`
#### 2.1.6 同步验证
源Oracle11g执行DML:
“`
insert into fgedu.t_ord values(2,’ORD002′,sysdate);
commit;
“`
目标MySQL查询`select * from fgedu.t_ord;`确认数据同步到达。网上搜索风哥教程可以学习全套数据库教程
### 实战2:OGG21c Oracle19c迁移同步至MySQL8.0
>
> 源`fgedu‑net‑cn1` Oracle19c;目标`fgedu‑net‑cn2` MySQL8.0;OGG21c。
> 源端Oracle19c操作:开启归档、FORCE LOGGING、schema补充日志;创建ogg_src、业务fgedu表;执行defgen生成`fgedu_ora19c.def`,scp拷贝目标主机。
> 注意MySQL8.0默认认证插件为`caching_sha2_password`,OGG for MySQL介质驱动必须适配该认证方式。
> 目标MySQL8.0执行:
“`
create database fgedu;
use fgedu;
create table t_ord(id bigint primary key,ord_name varchar(120),create_dt datetime);
create user ogg_tgt@’%’ identified with caching_sha2_password by ‘fgedudb’;
grant all privileges on fgedu.* to ogg_tgt@’%’;
flush privileges;
“`
源端Extract、DataPump参数逻辑同实战1。
目标Replicat rep_m80.prm
“`
REPLICAT rep_m80
TARGETDB fgedu,USERID ogg_tgt,PASSWORD fgedudb
SOURCEDEFS ./dirdef/fgedu_ora19c.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”)
);
“`
GGSCI操作:
“`
add replicat rep_m80,exttrail ./dirdat/o19
start replicat rep_m80
info all
lag replicat rep_m80
“`
源端执行DML,验证MySQL8.0数据同步。风哥数据库教程 itpux‑com
### 实战3:OGG21c Oracle19c迁移同步至SQLServer2019
>
> 源`fgedu‑net‑cn1` Oracle19c;目标`fgedu‑net‑cn2` SQLServer2019;目标部署OGG for MSSQL介质,ODBC驱动。
1. Oracle源端开启FORCE LOGGING、归档、schema补充日志;创建ogg_src;业务测试表fgedu.t_ord;defgen生成`fgedu_ora19c.def`拷贝目标dirdef。
2. 目标SQLServer执行:
“`
CREATE DATABASE fgedu;
USE fgedu;
CREATE TABLE t_ord(id bigint primary key,ord_name varchar(120),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;
“`
3. 源端Extract、DataPump配置完成,启动进程。
4. 目标GGSCI配置Replicat rep_mssql
“`
add replicat rep_mssql,exttrail ./dirdat/o19
edit params rep_mssql
“`
rep_mssql.prm
“`
REPLICAT rep_mssql
TARGETDB fgedu,USERID ogg_tgt,PASSWORD fgedudb
SOURCEDEFS ./dirdef/fgedu_ora19c.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”)
);
“`
“`
start replicat rep_mssql
info replicat rep_mssql
“`
源Oracle执行insert,验证SQLServer目标库接收变更。
### 实战4:OGG21c Oracle19c迁移同步至PostgreSQL12
>
> 源Oracle19c;目标PostgreSQL12;目标部署OGG for PostgreSQL介质、PostgreSQL ODBC驱动。
> 目标端PostgreSQL操作:
“`
CREATE DATABASE fgedu;
\c fgedu
CREATE TABLE t_ord(id bigint primary key,ord_name varchar(120),create_dt timestamp);
CREATE USER ogg_tgt WITH PASSWORD ‘fgedudb’;
GRANT ALL PRIVILEGES ON DATABASE fgedu TO ogg_tgt;
“`
目标Replicat rep_pg.prm
“`
REPLICAT rep_pg
TARGETDB fgedu,USERID ogg_tgt,PASSWORD fgedudb
SOURCEDEFS ./dirdef/fgedu_ora19c.def
HANDLECOLLISIONS
MAP fgedu.t_ord, TARGET public.t_ord,
COLMAP (
id=id,
ord_name=ord_name,
create_dt=@DATETIME(create_dt,”YYYY‑MM‑DD HH24:MI:SS”)
);
“`
GGSCI添加并启动Replicat;源端DML,验证PostgreSQL数据。网上搜索风哥教程可以学习全套数据库教程
### 实战5:OGG21c Oracle19c迁移同步至MongoDB(BigData适配器)
>
> BigData适配器,无传统数据库Replicat,输出JSON文档写入MongoDB集合;目标主机部署OGG‑BigData介质。
1. Oracle源端配置、defgen生成定义文件流程同上。
2. 目标主机编写`dirprm/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
“`
3. 目标GGSCI配置Replicat rep_mongo
“`
add replicat rep_mongo,exttrail ./dirdat/o19
edit params rep_mongo
“`
rep_mongo.prm
“`
REPLICAT rep_mongo
TARGETDB LIBFILE libggjava.so SET property=dirprm/mongo.props
SOURCEDEFS ./dirdef/fgedu_ora19c.def
REPORTCOUNT EVERY 1 MINUTES,RATE
MAP fgedu.t_ord,TARGET fgedu.t_ord;
“`
“`
start replicat rep_mongo
info replicat rep_mongo
“`
源Oracle执行DML,登录MongoDB查看集合文档。
### 实战6:OGG21c SQLServer‑to‑SQLServer同构复制
>
> 源端`fgedu‑net‑cn1` SQLServer2019;目标`fgedu‑net‑cn2` SQLServer2019。
1. **源SQLServer预配置**:数据库恢复模式FULL,开启CDC;创建ogg_src登录账号,业务库fgedu,业务测试表dbo.t_ord。
“`
ALTER DATABASE fgedu SET RECOVERY FULL;
USE fgedu;
EXEC sys.sp_cdc_enable_db;
CREATE LOGIN ogg_src WITH PASSWORD=’fgedudb’;
USE fgedu;
CREATE USER ogg_src FOR LOGIN ogg_src;
GRANT CONTROL ON DATABASE::fgedu TO ogg_src;
CREATE TABLE dbo.t_ord(id bigint primary key,ord_name varchar(120),create_dt datetime2);
INSERT INTO dbo.t_ord values(1,’SRC001′,getdate());
GO
“`
2. GGSCI源端DBLOGIN,添加trandata
“`
dblogin sourcedb fgedu,userid ogg_src,password fgedudb
add trandata dbo.t_ord
“`
>
> SQLServer源端不需要defgen,同构SQLServer‑SQLServer使用`ASSUMETARGETDEFS`。
>
>
> 3. 源端Extract、DataPump进程配置;目标端SQLServer预创建表,配置Replicat使用ASSUMETARGETDEFS;启动链路,DML验证同步。
### 实战7:OGG21c SQLServer‑to‑Oracle异构复制
源SQLServer2019;目标Oracle19c;**源端执行defgen生成定义文件,拷贝至目标Oracle主机dirdef目录**。
1. SQLServer源开启CDC,业务表dbo.t_ord,defgen生成`fgedu_mssql.def`。
2. 目标Oracle创建库,业务schema fgedu,创建对应表;创建ogg_tgt账号。
3. 目标Replicat rep_sqlo.prm
“`
REPLICAT rep_sqlo
USERID ogg_tgt,PASSWORD fgedudb
SOURCEDEFS ./dirdef/fgedu_mssql.def
HANDLECOLLISIONS
MAP dbo.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;源SQLServer执行DML,验证Oracle目标数据。风哥数据库教程 itpux‑com
### 实战8:OGG21c SQLServer‑to‑MySQL异构复制
源SQLServer2019,目标MySQL8.0;源defgen生成def定义拷贝目标;目标MySQL预建表,OGG for MySQL介质。
目标Replicat rep_sqlmy.prm
“`
REPLICAT rep_sqlmy
TARGETDB fgedu,USERID ogg_tgt,PASSWORD fgedudb
SOURCEDEFS ./dirdef/fgedu_mssql.def
HANDLECOLLISIONS
SQLEXEC “SET FOREIGN_KEY_CHECKS=0″
MAP dbo.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测试同步。
### 实战9:OGG21c SQLServer‑to‑PostgreSQL异构复制
源SQLServer2019,目标PostgreSQL;源defgen生成定义文件;目标预创建PostgreSQL表;Replicat使用SOURCEDEFS,COLMAP时间字段转换;启动链路,执行DML验证。
### 实战10:OGG21c SQLServer‑to‑MongoDB、SQLServer‑to‑Kafka BigData适配器
>
> SQLServer作为源端,BigData作为目标;源端Extract/DataPump流程不变;目标端使用libggjava.so适配器。
#### SQLServer‑to‑Kafka示例
目标dirprm/kafka.props配置
“`
gg.handlerlist=kafkahandler
gg.handler.kafkahandler.type=kafka
gg.handler.kafkahandler.kafkaProducerConfigFile=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地址、序列化配置。
Replicat rep_kafka.prm
“`
REPLICAT rep_kafka
TARGETDB LIBFILE libggjava.so SET property=dirprm/kafka.props
SOURCEDEFS ./dirdef/fgedu_mssql.def
REPORTCOUNT EVERY 1 MINUTES,RATE
MAP dbo.t_ord,TARGET fgedu.t_ord;
“`
GGSCI启动Replicat;源SQLServer执行DML,消费Kafka topic消息验证。网上搜索风哥教程可以学习全套数据库教程
### 实战11:OGG21c DB2 LUW‑to‑Oracle异构复制
>
> 源端`fgedu‑net‑cn1` DB2 LUW;目标`fgedu‑net‑cn2` Oracle19c。
#### 2.11.1 DB2源端数据库预配置
开启归档日志,设置LOGARCHMETH1参数,执行数据库全备份激活日志保留机制。
“`
db2 connect to fgedudb
db2 update db cfg for fgedudb using LOGARCHMETH1 LOGRETAIN
db2 force applications all
db2 backup database fgedudb to /dev/null
“`
创建OGG源账号ogg_src,业务schema fgedu,业务测试表`t_ord`;GGSCI DBLOGIN,`add trandata fgedu.t_ord`;执行defgen生成def定义文件,scp拷贝目标Oracle主机dirdef目录。
#### 2.11.2 目标Oracle预配置
创建ogg_tgt账号,业务用户fgedu,预创建对应业务表。
#### 2.11.3 目标端Replicat rep_db2o.prm
“`
REPLICAT rep_db2o
USERID ogg_tgt,PASSWORD fgedudb
SOURCEDEFS ./dirdef/fgedu_db2.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;源DB2执行DML,验证目标Oracle数据同步。
### 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变更:1)源端执行alter;2)**源端重新执行defgen**;3)scp新def文件覆盖目标主机dirdef;4)重启Replicat进程。>异构环境不会自动同步DDL,漏掉该步骤直接Replicat abend。
#### 2.12.3 无主键表处理
源表无主键,Extract与Replicat同时配置`KEYCOLS(col1,col2)`指定唯一定位列。
#### 2.12.4 logdump解析trail排错
“`
cd /fgedudb/ogg
./logdump
open ./dirdat/xx00000000
gh on
n
“`
读取trail原始记录,定位字段映射异常、捕获异常事务。
#### 2.12.5 Veridata异构数据校验
Veridata支持跨异构库做数据对比;迁移割接、故障恢复之后执行对比,识别源目标数据差异,生成修复SQL脚本。
#### 2.12.6 异构链路常见故障清单
1. Replicat OGG‑01296 mapping error:defgen定义文件缺失、版本旧,重新defgen;
2. 时间字段值错乱:缺少COLMAP时间格式转换;
3. LOB大对象Replicat OOM:调大LOBWRITESIZE参数,调大Replicat内存;
4. SQLServer Extract abend:CDC没有正确开启,CDC清理job异常;
5. DB2 Extract abend:归档日志被提前删除;
6. BigData适配器进程abend:kafka/mongo连接失败,classpath jar包缺失,检查props配置文件。
上51CTO搜索风哥可以学习全套数据库教程
### 2.13 异构迁移项目上线验收检查清单
1. 源端数据库:日志/CDC/归档正确开启;trandata全部业务表添加;OGG源账号权限完整;归档/事务日志保留策略,保证OGG消费完成才清理日志。
2. OGG链路:MGR、Extract、DataPump、Replicat全部running状态;info all无abend;lag复制延迟指标正常。
3. defgen定义:源目标defgen文件版本同步;表结构变更流程文档化。
4. 数据验证:DML增删改测试全部正常;LOB、时间、特殊类型字段验证;Veridata做源目标数据一致性对比。
5. 存量初始化:存量基线数据完整;增量链路追赶完成。
6. 故障演练:进程stop/start重启演练,检查点生效;模拟网络中断,恢复后自动续传。
7. 运维文档:DDL变更操作手册,故障排查手册,业务切换与回退步骤。
## 三、风哥针对本文总结
本套风哥教程完整覆盖11套OGG异构复制实战:Oracle11g‑MySQL5.7、Oracle19c‑MySQL8.0、Oracle19c‑SQLServer、Oracle19c‑PostgreSQL、Oracle19c‑MongoDB;SQLServer‑SQLServer、SQLServer‑Oracle、SQLServer‑MySQL、SQLServer‑PostgreSQL、SQLServer‑MongoDB/Kafka;DB2 LUW‑Oracle;讲解异构复制底层原理,defgen定义文件、COLMAP字段映射、KEYCOLS唯一定位列,BigData适配器工作机制,各源数据库日志/CDC开启方式,异构存量初始化方案,通用运维、故障排查、上线验收清单。
1. 异构复制和Oracle‑Oracle同构复制最大区别:绝大多数异构场景**不能使用ASSUMETARGETDEFS,源端必须执行defgen生成二进制定义文件,拷贝到目标端dirdef目录,Replicat加载SOURCEDEFS**;源端表执行DDL变更之后,必须重新执行defgen,同步更新目标端def文件,否则Replicat进程abend。
2. 不同源数据库日志捕获机制完全不同:Oracle依赖redo归档;MySQL依赖binlog row格式;SQLServer依赖内置CDC;DB2依赖归档日志保留;日志过早清理直接造成Extract进程异常终止。
3. 时间、LOB大对象、字符集是异构复制高频出错点;时间字段需要COLMAP做格式转换;无主键业务表必须使用KEYCOLS手工指定唯一定位列。绝大多数异构环境**不支持DDL自动同步**,源、目标两端手工维护表结构。
4. BigData目标MongoDB、Kafka没有传统数据库Replicat;依靠`libggjava.so`Java适配器读取properties配置,将trail事务转换JSON输出;需要保证classpath依赖jar包完整,网络连通大数据组件。
5. HANDLECOLLISIONS参数仅适合迁移初始化阶段临时处理基线不一致,不建议生产长期运行;异构项目强烈建议部署Veridata,定期做源‑目标跨库数据一致性校验,识别隐藏数据差异。
6. 异构迁移标准流程:业务不停机启动Extract捕获增量,执行存量初始化,等待Replicat复制延迟趋近于0;业务窗口停止源写入,确认trail全部消费完毕,业务切换指向目标端;切换回退需要反向搭建异构复制链路。
7. 异构项目上线前完成完整验收,做进程重启、网络中断恢复演练,编写DDL变更手册、切换回退操作文档。
全部shell、GGSCI、SQL脚本,建议读者在`fgedu‑net‑cn1`、`fgedu‑net‑cn2`两套测试环境完整复现,理解异构复制的各类限制,再落地企业异构数据库迁移、数据中台同步真实项目。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
