必须先完成全量初始化再启动增量同步,否则目标端将出现数据缺失或主键冲突;Oracle端Extract进程须启用Integrated Capture模式,OGG 12.3+要求使用Integrated Extract以解析DDL和LOB变更,Classic Extract在11gR2+已弃用,否则报OGG-02022错误。

必须先完成全量初始化,再启动增量同步;直接开增量会导致目标端数据缺失或主键冲突。
Oracle端Extract进程必须开启Integrated Capture模式
OGG 12.3+版本要求Oracle端使用Integrated Extract,否则无法解析redo log中的DDL和LOB变更。非集成模式(Classic Extract)在Oracle 11gR2+上已被弃用,启动会报OGG-02022 Logmining server does not exist错误。
- 确认数据库已启用:
ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION=TRUE SCOPE=BOTH; - 注册抽取进程:
REGISTER EXTRACT ext1 DATABASE;(必须在dblogin后执行) - Extract参数中禁用
TRANLOGOPTIONS MINEFROMACTIVEDG(该选项仅适用于Data Guard物理备库,且需额外授权) - 避免混用
GETUPDATEBEFORES和FETCHPKUPDATECOLS——后者已涵盖前者功能,重复启用会增大日志解析开销
MySQL端Replicat必须关闭外键与唯一约束校验
Oracle迁移MySQL时,目标端若保留FOREIGN_KEY_CHECKS=1或UNIQUE_CHECKS=1,Replicat执行INSERT/UPDATE会因顺序不一致或临时主键冲突而报OGG-01004 Duplicate entry或ERROR 150。
- 在Replicat参数文件开头显式添加:
SETENV (MYSQL_OPTS="-e \"SET FOREIGN_KEY_CHECKS=0; SET UNIQUE_CHECKS=0;\"") - 不要依赖MySQL配置文件全局关闭——OGG进程启动时读取的是会话级变量,不是全局配置
- 同步完成后如需恢复约束,须人工重建外键并校验数据一致性,OGG不自动处理约束状态回滚
defgen生成的mapping文件必须手动校验字段类型映射
defgen只做语法转换,不校验语义兼容性。例如Oracle的NUMBER(10,2)默认转成MySQL的DECIMAL(10,2)看似合理,但若源端实际存入超长小数位,MySQL会截断并静默报错WARN OGG-01163 Column xxx had data type conversion error。
- 检查
defgen输出的.prm文件中每个字段的col定义,确认datatype和length是否匹配目标端实际需求 - Oracle的
CLOB/BLOB必须手工改为LONGTEXT/LONGBLOB——Navicat等工具常误转为TEXT,导致大对象同步失败 - Oracle区分大小写的对象名(如双引号包裹的
"MyTable")在MySQL中会变成小写mytable,需在Replicat参数中用MAP显式指定:MAP "MyTable", TARGET mytable;
最易被忽略的是字符集隐式转换:Oracle端NLS_LANG=AMERICAN_AMERICA.AL32UTF8与MySQL端character_set_client=utf8mb4不一致时,中文字段会出现乱码或截断,且错误日志里只显示SQL error 1366,不会提示字符集问题。


















