数据库教程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脚本,读者可在两套独立测试主机完整复现各类异构复制链路。网上搜索风哥教程可以学习全套数据库教程
内容大纲
- OGG异构复制整体综述,11套实战场景环境规划,异构复制与Oracle同构复制核心差异
- 核心理论:异构复制源端日志机制对比、defgen定义文件原理、COLMAP字段映射、KEYCOLS唯一定位列;BigData适配器工作原理;异构DDL复制限制;异构存量初始化方案
- 异构环境通用约束:ODBC驱动依赖、数据类型转换风险、主键约束、时间类型、LOB大对象处理、冲突处理HANDLECOLLISIONS适用边界
- 实战1:OGG19c Oracle11g迁移同步至MySQL5.7完整部署
- 实战2:OGG21c Oracle19c迁移同步至MySQL8.0完整部署
- 实战3:OGG21c Oracle19c迁移同步至SQLServer实战
- 实战4:OGG21c Oracle19c迁移同步至PostgreSQL实战
- 实战5:OGG21c Oracle19c迁移同步至MongoDB(BigData适配器)
- 实战6:OGG21c SQLServer‑to‑SQLServer同构复制实战
- 实战7:OGG21c SQLServer‑to‑Oracle异构复制实战
- 实战8:OGG21c SQLServer‑to‑MySQL异构复制实战
- 实战9:OGG21c SQLServer‑to‑PostgreSQL异构复制实战
- 实战10:OGG21c SQLServer‑to‑MongoDB、SQLServer‑to‑Kafka BigData适配器实战
- 实战11:OGG21c DB2 LUW‑to‑Oracle异构复制实战
- 异构复制通用运维要点:defgen维护、数据校验Veridata、异构链路常见故障清单
- 异构迁移项目上线验收检查清单
一、核心理论知识
本章节为本套风哥教程理论基础,理解异构复制底层差异,掌握defgen、字段映射、各数据库源端日志开启方式,规避异构迁移项目出现字段错乱、数据丢失、进程abend风险。风哥教程 113257174
1.1 OGG异构复制概述
异构复制指源数据库与目标数据库属于不同数据库产品,例如Oracle到MySQL、SQLServer到Kafka。Oracle‑Oracle同构复制可以使用ASSUMETARGETDEFS,绝大多数异构场景必须使用defgen工具,在源端读取字典,生成二进制定义文件,拷贝至目标端dirdef目录,Replicat通过SOURCEDEFS加载元数据。
重要限制清单:
- 绝大多数异构环境不支持DDL复制;表结构变更,源、目标两端必须手工执行DDL,并且需要重新执行defgen更新定义文件;
- 不同数据库数据类型存在差异:时间、LOB、二进制、JSON字段是高频出错点,需要COLMAP做格式转换;
- Replicat更新、删除操作依赖主键或者唯一索引;无主键表必须配置
KEYCOLS手动指定唯一定位列; - BigData目标(MongoDB、Kafka)没有传统数据库Replicat,依靠
libggjava.soJava适配器读取properties配置输出消息/文档; - HANDLECOLLISIONS参数只适合迁移初始化阶段临时处理基线不一致,不适合生产长期运行,生产需要Veridata定期做数据一致性校验。网上搜索风哥教程可以学习全套数据库教程
1.2 各源数据库日志捕获底层机制对比
- Oracle源 :读取redo/归档日志;需要开启归档、FORCE LOGGING、schema补充日志
ADD SCHEMATRANDATA fgedu。 - MySQL源 :读取binlog二进制日志;必须设置
binlog_format=ROW,binlog_row_image=FULL。 - SQLServer源:依靠SQLServer内置CDC变更捕获;数据库恢复模式必须FULL,开启数据库CDC,创建CDC捕获表。
- DB2 LUW源 :开启数据库归档日志,
LOGARCHMETH1设置为LOGRETAIN,保证事务日志不会被过早清理。 - PostgreSQL源:开启逻辑复制wal_level=logical,创建复制槽。
- 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
-
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")
); -
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跨数据库导入,三类主流初始化方案:
- 数据库原生导出导入:源端导出文本,目标端数据库工具导入;大表场景生产首选;
- OGG Direct Load直接加载:Extract直接读取源全表,网络推送到目标Replicat;适合小量表,大表性能差;
- 第三方ETL工具:DataX、Sqoop完成存量基线,OGG负责增量CDC捕获;企业异构迁移项目最常用组合。
异构迁移标准流程:源业务不停机 → 启动Extract捕获增量变更 → 执行存量初始化加载 → Replicat追赶复制延迟趋近于0 → 业务窗口停止源写入 → 确认全部trail消费完毕 → 业务切换指向目标端。网上搜索风哥教程可以学习全套数据库教程
1.7 异构复制高频风险点
- 时间类型:Oracle DATE携带时分秒;MySQL DATETIME;SQLServer datetime2;异构必须做格式转换,否则时间字段错乱。
- LOB大对象:配置
LOBWRITESIZE,防止大LOB造成Replicat OOM内存溢出。 - 字符集:源目标数据库字符集不一致,出现中文乱码。
- ODBC驱动版本不匹配:SQLServer、PostgreSQL异构目标,ODBC驱动版本必须与OGG版本兼容。
- 异构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‑cn1Oracle11g;目标:fgedu‑net‑cn2MySQL5.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‑cn1Oracle19c;目标fgedu‑net‑cn2MySQL8.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‑cn1Oracle19c;目标fgedu‑net‑cn2SQLServer2019;目标部署OGG for MSSQL介质,ODBC驱动。
-
Oracle源端开启FORCE LOGGING、归档、schema补充日志;创建ogg_src;业务测试表fgedu.t_ord;defgen生成
fgedu_ora19c.def拷贝目标dirdef。 -
目标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; -
源端Extract、DataPump配置完成,启动进程。
-
目标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介质。
-
Oracle源端配置、defgen生成定义文件流程同上。
-
目标主机编写
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 -
目标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‑cn1SQLServer2019;目标fgedu‑net‑cn2SQLServer2019。
-
源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 -
GGSCI源端DBLOGIN,添加trandata
dblogin sourcedb fgedu,userid ogg_src,password fgedudb
add trandata dbo.t_ord
SQLServer源端不需要defgen,同构SQLServer‑SQLServer使用
ASSUMETARGETDEFS。
- 源端Extract、DataPump进程配置;目标端SQLServer预创建表,配置Replicat使用ASSUMETARGETDEFS;启动链路,DML验证同步。
实战7:OGG21c SQLServer‑to‑Oracle异构复制
源SQLServer2019;目标Oracle19c;源端执行defgen生成定义文件,拷贝至目标Oracle主机dirdef目录。
-
SQLServer源开启CDC,业务表dbo.t_ord,defgen生成
fgedu_mssql.def。 -
目标Oracle创建库,业务schema fgedu,创建对应表;创建ogg_tgt账号。
-
目标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‑cn1DB2 LUW;目标fgedu‑net‑cn2Oracle19c。
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 异构链路常见故障清单
- Replicat OGG‑01296 mapping error:defgen定义文件缺失、版本旧,重新defgen;
- 时间字段值错乱:缺少COLMAP时间格式转换;
- LOB大对象Replicat OOM:调大LOBWRITESIZE参数,调大Replicat内存;
- SQLServer Extract abend:CDC没有正确开启,CDC清理job异常;
- DB2 Extract abend:归档日志被提前删除;
- BigData适配器进程abend:kafka/mongo连接失败,classpath jar包缺失,检查props配置文件。
上51CTO搜索风哥可以学习全套数据库教程
2.13 异构迁移项目上线验收检查清单
- 源端数据库:日志/CDC/归档正确开启;trandata全部业务表添加;OGG源账号权限完整;归档/事务日志保留策略,保证OGG消费完成才清理日志。
- OGG链路:MGR、Extract、DataPump、Replicat全部running状态;info all无abend;lag复制延迟指标正常。
- defgen定义:源目标defgen文件版本同步;表结构变更流程文档化。
- 数据验证:DML增删改测试全部正常;LOB、时间、特殊类型字段验证;Veridata做源目标数据一致性对比。
- 存量初始化:存量基线数据完整;增量链路追赶完成。
- 故障演练:进程stop/start重启演练,检查点生效;模拟网络中断,恢复后自动续传。
- 运维文档: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开启方式,异构存量初始化方案,通用运维、故障排查、上线验收清单。
- 异构复制和Oracle‑Oracle同构复制最大区别:绝大多数异构场景不能使用ASSUMETARGETDEFS,源端必须执行defgen生成二进制定义文件,拷贝到目标端dirdef目录,Replicat加载SOURCEDEFS;源端表执行DDL变更之后,必须重新执行defgen,同步更新目标端def文件,否则Replicat进程abend。
- 不同源数据库日志捕获机制完全不同:Oracle依赖redo归档;MySQL依赖binlog row格式;SQLServer依赖内置CDC;DB2依赖归档日志保留;日志过早清理直接造成Extract进程异常终止。
- 时间、LOB大对象、字符集是异构复制高频出错点;时间字段需要COLMAP做格式转换;无主键业务表必须使用KEYCOLS手工指定唯一定位列。绝大多数异构环境不支持DDL自动同步,源、目标两端手工维护表结构。
- BigData目标MongoDB、Kafka没有传统数据库Replicat;依靠
libggjava.soJava适配器读取properties配置,将trail事务转换JSON输出;需要保证classpath依赖jar包完整,网络连通大数据组件。 - HANDLECOLLISIONS参数仅适合迁移初始化阶段临时处理基线不一致,不建议生产长期运行;异构项目强烈建议部署Veridata,定期做源‑目标跨库数据一致性校验,识别隐藏数据差异。
- 异构迁移标准流程:业务不停机启动Extract捕获增量,执行存量初始化,等待Replicat复制延迟趋近于0;业务窗口停止源写入,确认trail全部消费完毕,业务切换指向目标端;切换回退需要反向搭建异构复制链路。
- 异构项目上线前完成完整验收,做进程重启、网络中断恢复演练,编写DDL变更手册、切换回退操作文档。
全部shell、GGSCI、SQL脚本,建议读者在fgedu‑net‑cn1、fgedu‑net‑cn2两套测试环境完整复现,理解异构复制的各类限制,再落地企业异构数据库迁移、数据中台同步真实项目。