
简介本资源是一份面向Oracle数据库管理员与数据同步工程师的OGG跨平台部署实战指南聚焦Windows源库到Linux目标库的实时数据同步场景解决异构环境间数据复制、灾备建设与业务连续性保障等核心问题。文档以Oracle GoldenGate 12.2.0.2版本为基础系统覆盖源/目标库归档配置、强制日志与附加日志启用、goldengate用户权限授予、enable_goldengate_replication参数设置、OGG子目录初始化、Manager/Extract/Replicat组件配置及基础监控要点内容实操性强适合作为生产部署前的技术验证与学习参考。资源为单文件PDF格式共1个文件大小496KB轻量易读便于快速查阅关键命令与配置逻辑。目前已有296人学习下载读者可直接获取完整配置清单、SQL与Shell命令示例、权限分配明细及典型故障应对提示特别适合需在有限环境中快速落地OGG同步方案的中级DBA与运维人员。1. Oracle OGG跨平台同步实战Windows源库到Linux目标库不是装完就能跑的“黑匣子”你手头有一套运行在 Windows Server 上的 Oracle 11g 生产库业务要求把核心表实时同步到 LinuxRHEL 7上的灾备库——别急着点下载链接先看清这个现实OGG 12.2 在 Windows 和 Linux 之间做异构同步不是解压、安装、启动三步走的傻瓜流程。我见过太多人卡在ADD EXTRACT后进程状态永远是STOPPED或START REPLICAT时日志里反复刷ORA-01017: invalid username/password结果发现是NLS_LANG编码没对齐、ORACLE_HOME路径写错斜杠方向、甚至 Windows 端用的是ogg.exe而 Linux 端必须用./ggsci——这些细节不抠死同步链路就是个摆设。本文聚焦真实生产级部署从 Windows 源端Oracle 11.2.0.4到 Linux 目标端Oracle 11.2.0.4 / 12.2.0.1覆盖 OGG 12.2.0.2 全流程重点拆解DDL 同步失效、SCN 初始化偏差、TRANDATA 添加失败、MGR 端口不通四类高频翻车点。适合已具备 Oracle DBA 基础、正被跨平台同步卡住进度的工程师新手请务必对照每条命令检查环境变量和路径分隔符。2. 源库与目标库底层配置归档、附加日志、权限三座大山必须推平OGG 同步不是“数据库连上就行”它依赖 Oracle 底层日志机制。Windows 和 Linux 的 Oracle 实例虽同源但文件路径、服务管理、字符集处理存在本质差异。这里不讲理论只列实操中必须亲手敲、亲手验的硬核步骤。2.1 源库Windows强制归档与日志增强配置注意Windows 下 Oracle 服务名为OracleServiceSID启动前需确认服务已运行。所有 SQL 命令在sqlplus / as sysdba中执行不要用 PL/SQL Developer 或 SQL Developer 图形界面连避免 NLS 设置干扰。-- 步骤1确认实例处于 MOUNT 状态非 OPEN SQL shutdown immediate; SQL startup mount; -- 步骤2开启归档模式关键OGG 抽取依赖归档日志 SQL alter database archivelog; SQL alter database open; -- 步骤3开启强制记录日志FORCE LOGGING确保所有操作写入重做日志 SQL alter database force logging; -- 步骤4开启最小补充日志SUPPLEMENTAL LOG DATA这是 OGG 解析 DML 的基础 SQL alter database add supplemental log data; -- 步骤5立即验证配置是否生效必须看到 YES YES SQL select SUPPLEMENTAL_LOG_DATA_MIN, FORCE_LOGGING from v$database; -- 正确输出 -- SUPPLEME FOR -- -------- --- -- YES YES -- 步骤6强制切换日志使补充日志配置立即生效否则新事务可能不记录 SQL alter system switch logfile;参数说明SUPPLEMENTAL_LOG_DATA_MIN YES表示最小补充日志已启用OGG 可解析 UPDATE/DELETE 的 WHERE 条件FORCE_LOGGING YES是硬性要求防止某些 NOLOGGING 操作绕过日志导致同步丢失数据alter system switch logfile不是可选操作它生成新的归档日志文件让 OGG Extract 进程能从最新位置开始读取。2.2 源库WindowsOGG 专用用户创建与权限授予OGG 不允许用SYS或SYSTEM用户运行 Extract必须创建独立 schema。Windows 路径使用反斜杠\但 OGG 内部参数仍需正斜杠/这点极易出错。-- 创建专用表空间路径按实际调整注意 Windows 反斜杠 SQL create tablespace goldengate datafile D:\app\oracle\oradata\ORCL\ogg01.dbf size 300m autoextend on next 100m maxsize 2g; -- 创建用户密码建议用字母数字组合避免特殊字符引发 ggsci 登录失败 SQL create user goldengate identified by GoldEng2024 default tablespace goldengate temporary tablespace temp quota unlimited on goldengate; -- 授予基础连接与会话权限 SQL grant connect, resource, create session, alter session to goldengate; -- 授予闪回查询权限用于初始化或修复数据不一致 SQL grant flashback any table to goldengate; -- 关键一步授予 OGG 管理员角色必须用 SYS 执行且用户名全大写 SQL exec dbms_goldengate_auth.grant_admin_privilege(GOLDENGATE); -- 启用 GoldenGate 复制功能11gR2 必须设置否则 Extract 启动报 ORA-26885 SQL alter system set enable_goldengate_replication true scopeboth;逻辑说明dbms_goldengate_auth.grant_admin_privilege是 OGG 12c 引入的强制授权方式替代旧版GRANT GGS_GGSUSER_ROLEenable_goldengate_replication true是隐藏开关不设置会导致 Extract 进程无法 attach 到日志流状态卡在INITIALIZINGWindows 下datafile路径必须用单引号包裹且反斜杠无需转义D:\path\file.dbf合法但若在 OGG 参数文件中引用该路径需统一为正斜杠。2.3 目标库Linux精简配置不需附加日志但权限更苛刻Linux 目标库配置比源库简单不需开归档、不需add supplemental log data但权限要求更高——Replicat 进程要执行 DML必须有INSERT ANY TABLE等系统级权限。-- 创建表空间Linux 路径用正斜杠注意磁盘空间充足 SQL create tablespace goldengate datafile /u01/app/oracle/oradata/TEST1/ogg01.dbf size 300m autoextend on next 100m maxsize 2g; -- 创建用户密码与源库保持一致便于维护 SQL create user goldengate identified by GoldEng2024 default tablespace goldengate temporary tablespace temp quota unlimited on goldengate; -- 基础权限同源库 SQL grant connect, resource, create session, alter session to goldengate; -- 闪回权限同源库 SQL grant flashback any table to goldengate; -- OGG 管理员权限必须 SQL exec dbms_goldengate_auth.grant_admin_privilege(GOLDENGATE); -- 关键权限Replicat 需要修改任意表注意不是 grant on specific table SQL grant insert any table, update any table, delete any table, drop any table to goldengate; -- 启用 GoldenGate 复制同源库 SQL alter system set enable_goldengate_replication true scopeboth;为什么目标库不需要add supplemental log data因为 Replicat 是“写入者”它从 Trail 文件中读取已解析好的 SQL 或 ROW 信息直接应用到目标库不依赖目标库自身的日志结构。而源库的 Extract 是“读取者”必须靠补充日志才能从重做日志中还原出完整的 UPDATE/DELETE 操作。2.4 避坑源库与目标库配置四大血泪问题排查以下问题均来自真实部署现场每一条都对应一个ggsci日志里的 ERROR 或 WARNING现象原因解决Extract 进程启动后立即 ABEND日志报ORA-01017: invalid username/passwordWindows 源库中NLS_LANG环境变量未设置或设置为AMERICAN_AMERICA.ZHS16GBK中文字符集导致密码传输乱码在 Windows 系统环境变量中添加NLS_LANGAMERICAN_AMERICA.AL32UTF8并重启 OGG 服务或在edit params extgsxf中显式写SETENV (NLS_LANGAMERICAN_AMERICA.AL32UTF8)ADD TRANDATA test.t1执行成功但后续同步时目标端出现Missing key column错误表test.t1无主键或唯一索引而ADD TRANDATA默认只对有主键的表生效OGG 无法定位 UPDATE/DELETE 的行方案一给表加主键ALTER TABLE test.t1 ADD CONSTRAINT pk_t1 PRIMARY KEY(object_id)方案二强制指定列ADD TRANDATA test.t1 COLUMNS(object_id)仅当确定该列能唯一标识行DBLOGIN成功但ADD CHECKPOINTTABLE报ORA-00942: table or view does not existCHECKPOINTTABLE名称写错如goldengate.ggschkpt写成goldengate.chkpt或用户goldengate对goldengate表空间无配额执行SELECT username, default_tablespace, temporary_tablespace FROM dba_users WHERE usernameGOLDENGATE;确认默认表空间执行SELECT tablespace_name, bytes/1024/1024 MB FROM dba_free_space WHERE tablespace_nameGOLDENGATE;确认有空闲空间START MGR后INFO ALL显示MANAGER STOPPEDggserr.log报Failed to bind port 7809Linux 目标库防火墙未放行 7809 端口或该端口被其他进程占用如netstat -tuln | grep 7809执行sudo firewall-cmd --permanent --add-port7809/tcp sudo firewall-cmd --reloadRHEL7或改用PORT 7810并同步修改RMTHOST参数3. OGG 核心进程配置Extract/Datapump/Replicat 三段式链路不能少OGG 同步不是 Extract 直连目标库而是经典的Extract → Datapump → Replicat三段式架构。Windows 源端负责抽取Extract、投递DatapumpLinux 目标端负责应用Replicat。每一段的参数文件都必须精准匹配环境尤其注意路径、端口、字符集。3.1 源端WindowsExtract 进程从归档日志中捕获变更Extract 是整个链路的源头它读取 Oracle 归档日志或在线日志将 DML/DDL 转换为 Trail 文件。Windows 下必须用ogg.exe启动ggsci且ORACLE_HOME路径中的反斜杠要小心处理。# 在 Windows 命令行中进入 OGG 安装目录假设为 D:\ogg C:\ cd D:\ogg C:\ ggsci # 创建子目录必须执行否则后续报错 GGSCI (WIN-SOURCE) 1 CREATE SUBDIRS # 连接数据库注意Windows 下密码含特殊字符需用双引号包裹 GGSCI (WIN-SOURCE) 2 DBLOGIN USERID goldengate PASSWORD GoldEng2024 # 编辑 Extract 参数文件文件名 extgsxf.prm存于 dirprm 子目录 GGSCI (WIN-SOURCE) 3 EDIT PARAMS extgsxf-- extgsxf.prm 内容关键参数已加注释 EXTRACT extgsxf -- Windows 环境变量ORACLE_HOME 必须用正斜杠且路径末尾不加 \ SETENV (ORACLE_HOMED:/app/oracle/product/11.2.0/db_1) SETENV (ORACLE_SIDORCL) -- 字符集必须与数据库一致AL32UTF8 是 Oracle 11g 推荐值 SETENV (NLS_LANGAMERICAN_AMERICA.AL32UTF8) -- OGG 用户登录凭证密码用双引号防特殊字符解析错误 USERID goldengate, PASSWORD GoldEng2024 -- 输出 Trail 文件路径Windows 下路径用正斜杠OGG 自动识别 EXTTRAIL ./dirdat/gs -- 关键禁用日志保留避免 Extract 卡在旧日志 TRANLOGOPTIONS LOGRETENTION DISABLED -- 提高日志读取性能BRINTERVAL 20M 表示每 20 分钟刷新一次缓冲区 TRANLOGOPTIONS BRINTERVAL 20M -- 加大缓冲区解决大事务日志解析慢 TRANLOGOPTIONS BUFSIZE 2048000 -- 启用获取复制进程支持双向同步扩展 GETREPLICATES -- 启用缓存管理大事务必备 CACHEMGR CACHESIZE 2GB -- 启用截断操作同步重要否则 TRUNCATE TABLE 不同步 GETTRUNCATES -- DDL 同步包含表和索引的 DDLCREATE/DROP/ALTER DDL INCLUDE MAPPED, OBJTYPE TABLE DDL INCLUDE MAPPED, OBJTYPE INDEX -- DDL 选项自动添加补充日志失败重试 DDLOPTIONS ADDTRANDATA RETRYOP RETRYDELAY 10 MAXRETRIES 10 -- 错误日志路径用正斜杠 DISCARDFILE ./dirrpt/extgsxf.dsc, APPEND, MEGABYTES 1000 REPORTROLLOVER AT 6:00 REPORTCOUNT EVERY 1 HOURS, RATE -- 长事务告警1 小时未提交即警告 FETCHWARNLONGTRANS 1H, CHECKINTERVAL 10m -- 同步所有 test 模式下的表 TABLE test.*;参数说明EXTTRAIL ./dirdat/gsTrail 文件前缀为gs存于dirdat目录OGG 自动生成gs000000000等文件TRANLOGOPTIONS LOGRETENTION DISABLED是 Windows 源端关键项防止 Extract 因日志被归档删除而中断GETTRUNCATES必须开启否则TRUNCATE TABLE操作不会被捕捉TABLE test.*;表示同步test用户下所有表若只需同步部分表可写TABLE test.t1; TABLE test.t2;。3.2 源端WindowsDataPump 进程解决网络不稳定导致的 Trail 丢失Datapump 是 Extract 和 Replicat 之间的“快递员”。它从本地 Trail 文件读取数据通过 TCP 发送给目标端 MGR。没有它Extract 生成的 Trail 文件只能存本地无法到达 Linux。# 在 ggsci 中编辑 DataPump 参数 GGSCI (WIN-SOURCE) 4 EDIT PARAMS dpgskf-- dpgskf.prm 内容 EXTRACT dpgskf PASSTHRU -- 不做任何转换原样投递 DYNAMICRESOLUTION -- 目标端 MGR 地址和端口Linux IP 7809 RMTHOST 10.0.100.141, MGRPORT 7809 -- 目标端 Trail 文件前缀必须与 Replicat 的 EXTTRAIL 一致 RMTTRAIL ./dirdat/gs -- 错误日志 DISCARDFILE ./dirrpt/dpgskf.dsc, APPEND, MEGABYTES 100 REPORTROLLOVER AT 6:00 REPORTCOUNT EVERY 1 HOURS, RATE -- 同步所有 test 模式下的表 TABLE test.*;逻辑说明PASSTHRU模式表示 Datapump 不解析数据只做二进制转发性能最高RMTHOST的 IP 必须是 Linux 目标机的真实 IP非localhost或127.0.0.1且 Linux 防火墙需放行7809RMTTRAIL ./dirdat/gs与 Extract 的EXTTRAIL前缀一致确保数据流连贯。3.3 目标端LinuxReplicat 进程把 Trail 文件变成真实 SQLReplicat 运行在 Linux它读取由 Datapump 发送来的 Trail 文件./dirdat/gs*解析成 SQL 并执行。Linux 下路径全部用正斜杠ORACLE_HOME必须指向真实的 Oracle 安装路径。# 在 Linux 终端进入 OGG 目录假设为 /u01/app/ogg [oracletest2 ~]$ cd /u01/app/ogg [oracletest2 ogg]$ ./ggsci GGSCI (test2) 1 CREATE SUBDIRS GGSCI (test2) 2 DBLOGIN USERID goldengate PASSWORD GoldEng2024 GGSCI (test2) 3 EDIT PARAMS repgs1-- repgs1.prm 内容 REPLICAT repgs1 -- Linux 环境变量路径用正斜杠 SETENV (ORACLE_HOME/u01/app/oracle/product/11.2.0/db_1) SETENV (ORACLE_SIDTEST1) SETENV (NLS_LANGAMERICAN_AMERICA.AL32UTF8) USERID goldengate, PASSWORD GoldEng2024 -- 假设目标表定义与源端一致省去 DEFGEN 步骤 ASSUMETARGETDEFS -- 关闭外键约束检查避免 INSERT 顺序错乱 DBOPTIONS DEFERREFCONST -- 关闭触发器防止触发器二次执行 DBOPTIONS SUPPRESSTRIGGERS -- 错误日志 DISCARDFILE ./dirrpt/repgs1.dsc, APPEND, MEGABYTES 1000 DISCARDROLLOVER AT 6:00 REPORTROLLOVER AT 6:00 REPORTCOUNT EVERY 30 MINUTES, RATE -- 遇到任何错误立即中止避免脏数据 REPERROR (DEFAULT, ABEND) -- DDL 同步映射表和索引 DDL INCLUDE MAPPED, OBJTYPE TABLE DDL INCLUDE MAPPED, OBJTYPE INDEX DDLOPTIONS REPORT -- 允许 TRUNCATE 操作与 Extract 的 GETTRUNCATES 对应 GETTRUNCATES -- 动态解析表结构应对新增表 DYNAMICRESOLUTION -- 每 1000 条事务提交一次平衡性能与一致性 GROUPTRANSOPS 1000 -- 表映射test.* → test.*同名同结构 MAP test.*, TARGET test.*;参数说明ASSUMETARGETDEFS表示不使用DEFGEN工具生成表定义文件要求源库和目标库表结构完全一致DBOPTIONS SUPPRESSTRIGGERS是必须项否则目标库触发器会被执行两次源端一次目标端一次GROUPTRANSOPS 1000控制事务粒度值太小如 10导致频繁 COMMIT性能差值太大如 10000导致单次事务过大可能 OOM。3.4 进程注册与启动三步缺一不可所有参数文件写完后必须在ggsci中注册进程并绑定 Trail 文件路径最后启动。顺序错误会导致START失败。# 源端Windows执行 GGSCI (WIN-SOURCE) 5 ADD EXTRACT extgsxf, TRANLOG, BEGIN NOW GGSCI (WIN-SOURCE) 6 ADD EXTTRAIL ./dirdat/gs, EXTRACT extgsxf, MEGABYTES 1024 GGSCI (WIN-SOURCE) 7 ADD EXTRACT dpgskf, EXTTRAILSOURCE ./dirdat/gs GGSCI (WIN-SOURCE) 8 ADD RMTTRAIL ./dirdat/gs, EXTRACT dpgskf, MEGABYTES 1024 # 目标端Linux执行 GGSCI (test2) 4 ADD REPLICAT repgs1, EXTTRAIL ./dirdat/gs, CHECKPOINTTABLE goldengate.ggschkpt # 启动按顺序先 MGR再 Extract再 Datapump最后 Replicat # 源端启动 MGR若未启动 GGSCI (WIN-SOURCE) 9 START MGR # 源端启动 Extract GGSCI (WIN-SOURCE) 10 START EXTRACT extgsxf # 源端启动 Datapump GGSCI (WIN-SOURCE) 11 START EXTRACT dpgskf # 目标端启动 Replicat GGSCI (test2) 5 START REPLICAT repgs1验证命令INFO ALL查看所有进程状态正常应为RUNNINGVIEW REPORT extgsxf查看 Extract 最后一页日志确认Successfully logged into database和Writing DML to trail fileSTATS EXTRACT extgsxf查看抽取统计Total inserts,Total updates应随源库 DML 增长。4. 数据初始化SCN 同步与全量加载避免“同步了但数据不对”同步链路跑起来只是第一步真正的挑战在于初始数据一致性。OGG 不提供自动全量同步必须手动保证源库和目标库在某个 SCN 时间点数据完全一致否则增量同步会从错误起点开始。4.1 SCN 初始化法最精准的冷初始化推荐此方法要求源库短暂停写获取精确 SCN导出导入后从该 SCN 开始同步。适用于可接受分钟级停机的场景。-- 源库Windows获取当前 SCN SQL SELECT TO_CHAR(CURRENT_SCN) FROM V$DATABASE; -- 输出类似1085057 -- 源库导出expdp 必须用与 OGG 同一用户且指定 FLASHBACK_SCN SQL EXIT C:\ expdp goldengate/GoldEng2024 DIRECTORYDATA_PUMP_DIR DUMPFILEt1_init.dmp TABLEStest.t1 FLASHBACK_SCN1085057 -- 将 dump 文件拷贝到 Linux 目标机如用 scp C:\ scp t1_init.dmp oracle10.0.100.141:/home/oracle/ -- 目标库Linux导入 [oracletest2 ~]$ impdp goldengate/GoldEng2024 DIRECTORYDATA_PUMP_DIR DUMPFILEt1_init.dmp TABLE_EXISTS_ACTIONREPLACE# 目标端启动 Replicat 时指定 SCN关键 GGSCI (test2) 6 START REPLICAT repgs1, AFTERCSN 1085057为什么必须AFTERCSN因为FLASHBACK_SCN1085057导出的数据是 SCN1085057 时刻的快照。Replicat 必须从 SCN1085057 之后的日志开始读取否则会重复应用 SCN≤1085057 的事务导致主键冲突或数据重复。4.2 OGG 初始化抽取法热初始化无停机当业务无法停写时用 OGG 自身的SOURCEISTABLE模式做初始化。它不依赖数据库导出而是用 Extract 进程直接读取表数据生成 Trail再由 Replicat 应用。# 源端Windows创建初始化 Extract GGSCI (WIN-SOURCE) 12 EDIT PARAMS init_t1-- init_t1.prm EXTRACT init_t1 USERID goldengate, PASSWORD GoldEng2024 -- 目标端 MGR 地址 RMTHOST 10.0.100.141, MGRPORT 7809 -- 初始化 Trail 文件前缀 i1最大 999 个文件每个 500MB RMTFILE ./dirdat/i1, MAXFILES 999, MEGABYTES 500 -- 指定表并用 AS OF SCN 保证一致性SCN 从源库查得 TABLE test.t1, SQLPREDICATE AS OF SCN 1085057;# 注册并启动初始化 Extract GGSCI (WIN-SOURCE) 13 ADD EXTRACT init_t1, SOURCEISTABLE GGSCI (WIN-SOURCE) 14 START EXTRACT init_t1 # 目标端创建 Special Run Replicat一次性运行 GGSCI (test2) 7 ADD REPLICAT ri1, SPECIALRUN GGSCI (test2) 8 EDIT PARAMS ri1-- ri1.prm SPECIALRUN END RUNTIME REPLICAT ri1 USERID goldengate, PASSWORD GoldEng2024 -- 读取初始化 Trail 文件 EXTFILE ./dirdat/i1 -- 表映射 MAP test.t1, TARGET test.t1;# 启动初始化 Replicat自动运行完退出 GGSCI (test2) 9 START REPLICAT ri1参数说明SOURCEISTABLE模式下 Extract 不读日志而是像SELECT * FROM test.t1一样全表扫描SQLPREDICATE AS OF SCN 1085057是 Oracle 闪回查询语法确保读取 SCN1085057 时刻的数据快照SPECIALRUNReplicat 是一次性进程启动后自动读取i1文件并应用完成后状态变为STOPPED。4.3 避坑初始化阶段三大玄学问题排查现象原因解决START REPLICAT repgs1, AFTERCSN 1085057后状态为ABENDED日志报Invalid SCN输入的 SCN 在目标库归档日志中不存在源库 SCN1085057 的日志未传到目标端执行GGSCI VIEW REPORT repgs1查看详细错误在源库执行SELECT NAME, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG WHERE FIRST_TIME SYSDATE-1 ORDER BY FIRST_TIME;确认该 SCN 日志已归档用SEND EXTRACT extgsxf, LOGSTAT查看 Extract 当前读取位置初始化抽取init_t1运行缓慢STATS init_t1显示Total reads: 0SQLPREDICATE语法错误或表test.t1在源库不存在检查SQLPREDICATE是否多写了分号或引号执行SELECT COUNT(*) FROM test.t1确认表存在且有数据在init_t1.prm中临时加REPORTCOUNT EVERY 1 MINUTES查看进度impdp导入后目标表数据为空但日志显示Completed successfullyTABLE_EXISTS_ACTIONREPLACE会先 DROP 表若表有外键约束DROP 失败导致导入跳过导入前在目标库执行ALTER TABLE test.t1 DISABLE CONSTRAINT constraint_name;导入完成后再ENABLE或改用TABLE_EXISTS_ACTIONTRUNCATE要求表结构完全一致5. DDL 同步深度配置不只是DDL INCLUDE还有脚本与权限陷阱OGG 的 DDL 同步常被低估但它决定了CREATE TABLE、ALTER INDEX等操作能否自动在目标库重建。单纯加DDL INCLUDE不够必须配合数据库脚本和权限否则 DDL 会静默失败。5.1 源库 DDL 支持脚本执行四步缺一不可OGG 12.2 的 DDL 同步依赖四个核心脚本必须按顺序、以SYS用户执行。Windows 下路径用反斜杠但脚本内路径为 Linux 风格OGG 会自动适配。-- 在源库 sqlplus / as sysdba 中执行Windows -- 步骤1Marker Setup标记 DDL 操作的起始点 SQL D:\ogg\marker_setup.sql -- 步骤2DDL Setup创建 DDL 捕获表 SQL D:\ogg\ddl_setup.sql -- 步骤3Role Setup创建 GGS_GGSUSER_ROLE 角色 SQL D:\ogg\role_setup.sql -- 步骤4授权角色给 OGG 用户 SQL GRANT GGS_GGSUSER_ROLE TO GOLDENGATE; -- 步骤5启用 DDL 捕获关键否则 DDL 不被记录 SQL D:\ogg\ddl_enable.sql执行后验证查询SELECT * FROM DBA_OBJECTS WHERE OBJECT_NAME LIKE GGS_%;应看到GGS_MARKER,GGS_SETUP,GGS_DDL_HIST等表查询SELECT STATUS FROM DBA_REGISTRY WHERE COMP_NAMEOracle GoldenGate;应返回VALID。5.2 性能优化ddl_pin与dbmspool脚本DDL 操作频繁时ddl_setup.sql创建的对象可能被 Oracle LRU 算法从共享池中挤出导致 DDL 解析变慢。需执行两个优化脚本-- 在源库执行Windows -- 步骤1固定共享池对象防止被挤出 SQL ?/rdbms/admin/dbmspool.sql -- 注意? 是 Oracle 内置变量指向 $ORACLE_HOME/rdbms/admin -- 步骤2Pin DDL 相关对象到共享池 SQL D:\ogg\ddl_pin.sql GOLDENGATE -- 参数为 OGG 用户名必须大写效果执行后SELECT NAME, TYPE, SHARABLE_MEM FROM V$DB_OBJECT_CACHE WHERE NAME LIKE GGS% AND TYPEPACKAGE;应显示SHARABLE_MEM 0表示已固定。5.3 DDL 同步参数详解从INCLUDE MAPPED到EXCLUDE UNMAPPEDDDL INCLUDE MAPPED是基础但生产环境需精细控制。以下参数组合可覆盖 95% 场景-- 在 Extract 和 Replicat 参数文件中统一配置 DDL INCLUDE MAPPED, OBJTYPE TABLE DDL INCLUDE MAPPED, OBJTYPE INDEX DDL INCLUDE MAPPED, OBJTYPE CONSTRAINT DDL INCLUDE MAPPED, OBJTYPE SEQUENCE -- 排除高风险 DDL如 DROP DATABASE DDL EXCLUDE UNMAPPED, OBJTYPE DATABASE -- 排除特定用户如不希望同步 DBA 用户的 DDL DDL EXCLUDE SCHEMA SYS, OBJTYPE TABLE -- 记录所有 DDL 到报告调试用 DDLOPTIONS REPORT -- 自动为新建表添加补充日志避免手动 ADD TRANDATA DDLOPTIONS ADDTRANDATA逻辑说明MAPPED表示只同步MAP语句中定义的表如MAP test.*, TARGET test.*未映射的表 DDL 被忽略UNMAPPED表示同步所有未在MAP中定义的 DDL慎用DDLOPTIONS ADDTRANDATA是“后悔药”当新表被CREATE TABLE后OGG 自动执行ADD TRANDATA无需人工干预。5.4 避坑DDL 同步失效的五个致命点现象原因解决源库执行CREATE TABLE test.t2 (...)目标库无反应ggserr.log无 DDL 相关日志ddl_enable.sql未执行或执行后未重启 Extract 进程执行GGSCI INFO EXTRACT extgsxf, DETAIL查看DDL replication是否为Enabled若为Disabled执行STOP EXTRACT extgsxf→START EXTRACT extgsxf重启ALTER TABLE test.t1 ADD COLUMN c2 VARCHAR2(10)同步到目标库后新列值全为 NULL源库ADD COLUMN未指定DEFAULTOGG 将新列视为NULLABLE但目标库表结构未更新在目标库本文还有配套的精品资源点击获取