oracle rac到非oracle数据库异构迁移必须用goldengate,因data guard仅支持oracle-to-oracle;rac环境配置更复杂,因其多节点、共享存储、gcs、asm及scan机制导致extract进程绑定、日志捕获和trandata同步困难,须在所有节点执行add trandata、统一asm归档路径、使用scan连接,并启用rac感知参数。
oracle rac 到非 oracle 数据库(如 postgresql、mysql)的异构迁移,必须用 goldengate,不能靠 data guard 或逻辑备库——后者只支持 oracle-to-oracle。
为什么 RAC 环境下 GoldenGate 配置比单实例更复杂
RAC 的多节点、共享存储、全局队列(GCS)、ASM 和 SCAN 地址机制,会让 GoldenGate 的日志捕获和进程绑定出问题。Extract 进程默认只连一个实例,若该实例宕机或负载切换,就会中断捕获;同时 RAC 的归档日志分散在各节点本地(除非用 ASM+统一归档路径),add trandata 操作若只在某节点执行,其他节点不会自动同步附加日志配置。
- 必须在所有 RAC 节点上分别执行
add trandata,且确保使用同一数据库用户(如goldengate)连接到各自实例 - Extract 进程需显式指定连接方式:推荐用 SCAN 名 + 服务名(如
rac-scan.yang.com:1521/rac.yang.com),而非直连某个 VIP 或节点 IP - 归档日志路径必须统一指向 ASM(如
+FRA/rac/archivelog/),否则 Pump 进程可能因找不到归档而报错OGG-01163: Failed to open archive log - Manager 进程建议部署在独立节点(非 RAC 节点),避免资源争抢;若必须放 RAC 上,应绑定到固定节点并设为
autostart,防止 CRS 重启时遗漏
Extract 进程在 RAC 中启动失败的典型现象与修复
常见错误是 OGG-01224: TCP/IP error 113 (No route to host) 或 OGG-01091: Unable to open checkpoint file,本质是 Extract 尝试连错实例或无法访问共享日志位置。
- 检查
GGSCI中info extract e_rac显示的连接字符串是否含真实 SCAN 地址,而不是localhost或某节点私网 IP - 确认
extract.prm中已启用 RAC 感知:添加TRANLOGOPTIONS EXCLUDEUSER ggadmin(避免捕获 GoldenGate 自身操作)和DBOPTIONS ENABLE_INSTANTIATION_FILTERING(启用实例级过滤) - 若使用 Oracle 12c 及以上,必须开启强制日志模式:
ALTER DATABASE FORCE LOGGING;,否则 RAC 节点间 DML 可能不写重做,导致数据丢失 - Extract 启动前,先手工运行
logdump打开一个归档日志验证可读性:open /u01/app/oracle/fast_recovery_area/RAC/ARCHIVELOG/2026_04_19/o1_mf_1_123456_xyz789ab_.arc
目标端为 PostgreSQL 时,Replicat 参数关键差异
GoldenGate 对 PostgreSQL 不支持直接 DDL 同步(如建表、加字段),也不支持序列(sequence)自动映射,Replicat 必须严格按目标结构预建表,并禁用冲突检测逻辑。
- Replicat 参数中必须关闭
ASSUMETARGETDEFS,改用SOURCEISCHAR+ 显式MAP映射,例如:MAP MW_APP.DYT_DATALOSTRECORD, TARGET public.dyt_datalostrecord, COLMAP (id = id, create_time = TO_TIMESTAMP(create_time, 'YYYY-MM-DD HH24:MI:SS')); - PostgreSQL 的
timestamp类型精度为微秒,而 OracleDATE只有秒级,若源端用SYSDATE,需在COLMAP中补零或截断,否则插入失败报ERROR: invalid input syntax for type timestamp - 避免使用
SEQUENCE字段作为主键同步目标:GoldenGate 不会自动生成或递增 PG 序列,应在 Replicat 中用GETVAL函数或改为主键由应用层生成 - 目标端连接串格式为:
USERIDALIAS pg_target, PASSWORD pgpass,其中pg_target是提前在dirprm/下用dblogin创建的别名,不能直接写明文密码
最容易被忽略的兼容性雷区
不是所有 GoldenGate 版本都真正支持你手上的 RAC + 目标库组合。比如 OGG 19.1 Microservices 在 Oracle Linux 7.5 上支持 11.2.0.4 RAC,但对 PostgreSQL 14 的 JDBC 驱动仅支持到 postgresql-42.3.1.jar;若你用了 42.6.x,Replicat 会静默退出,日志里只有 OGG-01223: Failed to load Java class。
- 查清三者兼容矩阵:OGG 版本、源端 Oracle RAC 版本(含 PSU 补丁号)、目标数据库版本及驱动版本,以 MOS 文档
Doc ID 2455031.1为准,不要只看官网大版本列表 - RAC 环境下必须关闭
ENABLE_GOLDENGATE_REPLICATION参数(12.1+ 默认为 FALSE),否则 Extract 无法读取在线重做日志 - 若目标库是 MySQL,注意 GoldenGate 19c 不支持 MySQL 8.0.30+ 的默认认证插件
caching_sha2_password,需降级为mysql_native_password并重置用户密码











