数据库教程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=ROWbinlog_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

  1. 源端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.soJava适配器读取properties配置,将trail事务转换JSON输出;需要保证classpath依赖jar包完整,网络连通大数据组件。
  5. HANDLECOLLISIONS参数仅适合迁移初始化阶段临时处理基线不一致,不建议生产长期运行;异构项目强烈建议部署Veridata,定期做源‑目标跨库数据一致性校验,识别隐藏数据差异。
  6. 异构迁移标准流程:业务不停机启动Extract捕获增量,执行存量初始化,等待Replicat复制延迟趋近于0;业务窗口停止源写入,确认trail全部消费完毕,业务切换指向目标端;切换回退需要反向搭建异构复制链路。
  7. 异构项目上线前完成完整验收,做进程重启、网络中断恢复演练,编写DDL变更手册、切换回退操作文档。

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

相关推荐
牛油果子哥q1 小时前
向量数据库原理与工程选型:FAISS深度剖析、Milvus基础、检索优化、分片与持久化落地
数据库·milvus·faiss
海浪仙人掌1 小时前
流动比率有哪些分析陷阱?流动比率怎么避开这些陷阱?
大数据·数据库·人工智能
庆登登登2 小时前
MySQL Workbench 鸿蒙 PC 适配全记录:从 GTK_X11 桌面程序到 ArkUI 原生数据库工作台
数据库·mysql·harmonyos
2601_963282772 小时前
政企无线对讲系统落地:从设备采购到长期运维的完整工程实践
大数据·运维·数据库
熊文豪2 小时前
OceanBaseVS金仓:一条 SQL 的两条路——KingbaseES 的性能竞争力从哪来
数据库·sql·电科金仓
大模型码小白2 小时前
数据可视化:AI 生成 HTML5 动态交互式数据图表
前端·数据库·人工智能·深度学习·机器学习·信息可视化·html5
风哥2号2 小时前
数据库教程FGMT26‑1‑GoldenGate数据库容灾迁移01(OGG同构异构、数据库迁移、数据同步、容灾复制)
数据库·oracle
颜颜yan_3 小时前
Firebird 鸿蒙 PC 适配全记录:打通数据库内核、Qt 管理端与原生维护工具
数据库·qt·harmonyos
风哥2号3 小时前
数据库教程FGMT25‑Oracle多租户架构CDB与PDB运维管理
数据库·oracle