Oracle OGG异构同步实战:Windows到Linux安装部署与避坑指南

发布时间:2026/10/11 14:37:47
Oracle OGG异构同步实战:Windows到Linux安装部署与避坑指南 简介这份PDF资料聚焦Oracle GoldenGateOGG在异构环境下的部署实践面向需要完成Windows到Linux跨平台Oracle数据同步的DBA与运维工程师尤其适合已具备基础数据库知识、希望掌握OGG 12.2.0.2版本落地流程的中高级技术人员。资源包内含1个PDF文档压缩包约496KB以图文步骤形式系统梳理了源库与目标库的归档模式、强制日志、附加日志及goldengate用户赋权等前置配置并覆盖OGG解压安装、可视化runInstaller部署、Manager与抽取/应用进程配置、监控维护及故障排查等关键环节。目前已有295人学习下载读者可借助这份文档快速搭建OGG同步链路理解跨操作系统数据复制的配置要点与排错思路适合作为实际部署时的操作参考与知识补全材料。1. Oracle OGG安装部署细说Windows同步到Linux这条链路到底值不值得搭很多团队第一次接触 Oracle OGGOracle GoldenGate时场景都出奇地相似核心库跑在 Windows Server 上新采购的服务器清一色 Linux业务方要求做实时同步、做数据迁移、做双活验证。于是问题来了——Windows 到 Linux 的 OGG 链路到底能不能稳定跑起来我前后搭过七八套这种异构环境的 OGG有跑得稳的也有因为字符集和目录权限翻车的。这篇笔记就把 Oracle OGG 在 Windows 源端、Linux 目标端的安装部署完整拆一遍从环境准备、软件安装、参数配置到抽取复制进程的启动验证每一步都给出可复现的命令和参数。适合正在做 Oracle 数据同步、异构迁移、或者被 OGG 配置折磨过的 DBA 和运维工程师。如果你只是想了解 OGG 是什么那这篇可能偏重实操但如果你手头正好有一套 Windows 到 Linux 的同步需求照着走能少踩不少坑。2. 环境准备与 OGG 安装包选型Windows 和 Linux 各要装什么2.1 源端 Windows 与目标端 Linux 的版本匹配逻辑Oracle OGG 的版本选择不是随便下个最新版就完事。源端和目标端的 OGG 版本必须兼容而且要和数据库版本对应。常见做法是源端 Oracle 数据库如果是 11g R211.2.0.4OGG 建议用 12.3 或 19c 的经典架构版本如果源端是 19c那 OGG 19c 是首选。Windows 源端要装的是 OGG for Oracle 的 Windows 版本Linux 目标端装对应的 Linux x86-64 版本。两个平台的 OGG 版本号尽量保持一致比如都用 19.1.0.0.4避免因为版本差异导致 trail 文件格式不兼容。数据库层面源端 Windows 上的 Oracle 需要开启归档模式并且要确认enable_goldengate_replication参数。11g 需要打补丁或者用_ENABLE_GOLDENGATE_REPLICATIONTRUE的隐含参数12c 及以上直接ALTER SYSTEM SET enable_goldengate_replicationTRUE SCOPEBOTH;。目标端 Linux 上的 Oracle 数据库同样要开启归档并且要提前创建好 OGG 专用用户授予DBA权限或者至少CONNECT、RESOURCE、SELECT ANY DICTIONARY、SELECT ANY TABLE、INSERT ANY TABLE、UPDATE ANY TABLE、DELETE ANY TABLE这些权限。字符集是异构同步里最容易出问题的地方。Windows 源端如果是ZHS16GBKLinux 目标端如果是AL32UTF8OGG 在复制进程里需要做字符集转换。常见做法是在GLOBALS文件里配置CHARSET参数或者在复制进程参数里用SOURCEDEFS和TARGETDEFS做映射。如果两边字符集不一致又没配转换中文数据大概率会变成乱码这个坑后面会细说。2.2 Windows 源端 OGG 安装步骤与目录规划Windows 上安装 OGG 相对简单但目录规划有讲究。我一般会把 OGG 装在非系统盘比如D:\ogg19c避免系统盘空间不足导致 trail 文件写满。安装步骤# 1. 解压 OGG 安装包到指定目录 # 假设安装包为 ogg19c_win_x64.zip解压到 D:\ogg19c # 解压后目录结构应包含 ggSCI.exe、extract.exe、replicat.exe 等 # 2. 以管理员身份打开 cmd进入 OGG 目录 cd /d D:\ogg19c # 3. 创建 OGG 子目录如果安装包没有自动创建 mkdir dirprm mkdir dirrpt mkdir dirtrail mkdir dirchk mkdir dirdat # 4. 启动 GGSCI 并创建 Manager 参数文件 ggsci进入 GGSCI 后创建 Manager 参数文件EDIT PARAMS MGR在打开的编辑器中写入PORT 7809 DYNAMICPORTLIST 7810-7820 AUTOSTART EXTRACT * AUTORESTART EXTRACT *, RETRIES 5, WAITMINUTES 3 PURGEOLDEXTRACTS D:\ogg19c\dirdat\*, USECHECKPOINTS, MINKEEPHOURS 24这里PORT 7809是 Manager 的监听端口DYNAMICPORTLIST是动态端口范围AUTORESTART让抽取进程异常退出后自动重试 5 次每次间隔 3 分钟。PURGEOLDEXTRACTS是自动清理超过 24 小时的 trail 文件避免磁盘写满。参数写完后保存退出在 GGSCI 里执行START MANAGER启动管理进程。2.3 Linux 目标端 OGG 安装与依赖检查Linux 端安装 OGG 之前先确认几个依赖libaio、glibc、libstdc。用rpm -qa | grep libaio检查如果没有就yum install -y libaio。另外要确认 Oracle 数据库的ORACLE_HOME和LD_LIBRARY_PATH已经配置好因为 OGG 的复制进程需要调用 Oracle 的客户端库。# 1. 创建 OGG 安装目录 mkdir -p /u01/ogg19c chown oracle:oinstall /u01/ogg19c # 2. 切换到 oracle 用户解压安装包 su - oracle cd /u01/ogg19c unzip /tmp/ogg19c_linux_x64.zip # 3. 设置环境变量 export ORACLE_HOME/u01/app/oracle/product/19c/dbhome_1 export LD_LIBRARY_PATH$ORACLE_HOME/lib:/u01/ogg19c:$LD_LIBRARY_PATH export PATH$ORACLE_HOME/bin:/u01/ogg19c:$PATH # 4. 启动 GGSCI 创建 Manager cd /u01/ogg19c ./ggsciLinux 端的 Manager 参数和 Windows 类似但路径要改成 Linux 风格PORT 7809 DYNAMICPORTLIST 7810-7820 AUTOSTART EXTRACT * AUTORESTART EXTRACT *, RETRIES 5, WAITMINUTES 3 PURGEOLDEXTRACTS /u01/ogg19c/dirdat/*, USECHECKPOINTS, MINKEEPHOURS 24注意 Linux 端如果同时跑抽取和复制端口不要和源端冲突。如果源端和目标端在同一网段Manager 端口建议错开比如源端 7809目标端 7909。3. 抽取与复制进程配置从 Windows 抓数据到 Linux 落地3.1 源端抽取进程配置与 trail 文件生成抽取进程的核心任务是从 Windows 源库的在线日志或归档日志里抓取变更写到本地 trail 文件。配置抽取进程之前先确认源库的归档日志路径和enable_goldengate_replication参数已生效。# 在源端 GGSCI 中执行 ADD EXTRACT ext_w2l, TRANLOG, BEGIN NOW ADD EXTTRAIL D:\ogg19c\dirdat\lt, EXTRACT ext_w2l EDIT PARAMS ext_w2l抽取进程参数EXTRACT ext_w2l SETENV (ORACLE_HOME D:\app\oracle\product\11.2.0\dbhome_1) SETENV (ORACLE_SID ORCL) USERIDALIAS ogg_user DOMAIN OracleGoldenGate EXTTRAIL D:\ogg19c\dirdat\lt TABLE hr.employees; TABLE hr.departments;这里USERIDALIAS是 OGG 的凭证别名需要在GGSCI里用ADD CREDENTIALSTORE创建。如果不想用别名也可以直接写USERID ogg_user, PASSWORD ogg_pass但明文密码不安全。TABLE hr.employees;表示只抽取 hr 用户下的 employees 表如果要抽整个 schema写TABLE hr.*;。配置完成后启动抽取进程START EXTRACT ext_w2l INFO EXTRACT ext_w2l, DETAILINFO命令会显示抽取进程的状态、检查点位置、trail 文件写入情况。如果状态是RUNNING说明抽取正常。如果报错OGG-00446通常是ORACLE_HOME或ORACLE_SID设置不对检查SETENV参数。3.2 目标端复制进程配置与数据落地复制进程从 trail 文件读取数据应用到 Linux 目标库。配置之前先在目标端创建检查点表# 在目标端 GGSCI 中执行 EDIT PARAMS GLOBALS写入CHECKPOINTTABLE ogg_user.ggs_checkpoint然后在 GGSCI 里执行DBLOGIN USERIDALIAS ogg_user DOMAIN OracleGoldenGate ADD CHECKPOINTTABLE ogg_user.ggs_checkpoint接着添加复制进程ADD REPLICAT rep_w2l, EXTTRAIL /u01/ogg19c/dirdat/lt, CHECKPOINTTABLE ogg_user.ggs_checkpoint EDIT PARAMS rep_w2l复制进程参数REPLICAT rep_w2l SETENV (ORACLE_HOME /u01/app/oracle/product/19c/dbhome_1) SETENV (ORACLE_SID ORCL) USERIDALIAS ogg_user DOMAIN OracleGoldenGate DISCARDFILE /u01/ogg19c/dirrpt/rep_w2l.dsc, APPEND, MEGABYTES 100 MAP hr.employees, TARGET hr.employees; MAP hr.departments, TARGET hr.departments;DISCARDFILE是丢弃文件当复制进程遇到无法处理的记录时会写到这里方便排查。MAP语句定义源表和目标表的映射关系如果表名一致可以直接写MAP hr.employees, TARGET hr.employees;。如果目标端 schema 不同比如源端是hr目标端是hr_copy就写MAP hr.employees, TARGET hr_copy.employees;。启动复制进程START REPLICAT rep_w2l INFO REPLICAT rep_w2l, DETAIL如果复制进程报OGG-01296错误通常是目标表不存在或者字段类型不匹配。检查目标端的表结构是否和源端一致特别是NUMBER和VARCHAR2的长度。3.3 字符集转换与中文乱码的预防配置Windows 源端如果是ZHS16GBKLinux 目标端如果是AL32UTF8必须在复制进程里做字符集转换。常见做法是在GLOBALS文件里加CHARSET CONVERT或者在复制进程参数里加SOURCEDEFS /u01/ogg19c/dirdef/hr.employees.def TARGETDEFS /u01/ogg19c/dirdef/hr.employees.def但更稳妥的方式是在抽取进程里就做转换。在抽取进程参数里加TRANLOGOPTIONS CONVERTUCS2CLOBS这个参数会把CLOB字段从 UCS2 转成目标端字符集。如果是VARCHAR2字段OGG 默认会按照源端字符集读取然后在复制进程里按照目标端字符集写入。如果两边字符集不一致中文大概率会乱码。我一般会在测试环境先插一条中文数据比如INSERT INTO hr.employees (name) VALUES (测试中文);然后看目标端查出来是不是乱码。如果乱码检查NLS_LANG环境变量。Windows 源端的NLS_LANG建议设为AMERICAN_AMERICA.ZHS16GBKLinux 目标端设为AMERICAN_AMERICA.AL32UTF8。4. 避坑与排查Windows 到 Linux 同步最容易翻车的 5 个点4.1 抽取进程报 OGG-00446 无法连接 Oracle现象启动抽取进程后INFO EXTRACT显示ABENDED报错OGG-00446 Oracle GoldenGate Capture for Oracle, ext_w2l.prm: Could not open file。原因Windows 源端的ORACLE_HOME或ORACLE_SID设置不对或者 OGG 用户没有权限访问 Oracle 的sqlplus。解决在抽取进程参数里用SETENV显式指定ORACLE_HOME和ORACLE_SID路径要用 Windows 风格的反斜杠。另外确认 OGG 安装目录下的sqlplus能正常执行sqlplus / as sysdba。4.2 复制进程报 OGG-01296 目标表不存在现象复制进程启动后立即ABENDED报错OGG-01296 Error mapping from HR.EMPLOYEES to HR.EMPLOYEES。原因目标端 Linux 上的表结构和源端不一致比如源端有VARCHAR2(100)目标端是VARCHAR2(50)或者目标端根本没有这张表。解决用DESC hr.employees对比源端和目标端的表结构确保字段名、类型、长度一致。如果目标端表不存在先用CREATE TABLE建表或者用 OGG 的DDL同步功能自动建表。4.3 trail 文件写满磁盘导致抽取进程挂起现象抽取进程状态变成ABENDED报错OGG-01028或磁盘空间不足。原因PURGEOLDEXTRACTS没有配置或者配置的MINKEEPHOURS太长trail 文件堆积。解决在 Manager 参数里加PURGEOLDEXTRACTS D:\ogg19c\dirdat\*, USECHECKPOINTS, MINKEEPHOURS 24让 OGG 自动清理超过 24 小时的 trail 文件。同时监控dirdat目录的大小设置磁盘告警。4.4 中文数据同步后变成问号或乱码现象源端插入中文目标端查询显示???或者乱码。原因源端和目标端字符集不一致且没有配置字符集转换。解决在GLOBALS文件里加CHARSET CONVERT或者在抽取进程里加TRANLOGOPTIONS CONVERTUCS2CLOBS。同时检查两端的NLS_LANG环境变量确保源端是ZHS16GBK目标端是AL32UTF8。4.5 Manager 进程启动失败端口被占用现象START MANAGER报错OGG-00098或端口被占用。原因7809 端口已经被其他进程占用比如另一个 OGG 实例或者 Oracle 的监听。解决用netstat -ano | findstr 7809在 Windows 上查端口占用用netstat -tlnp | grep 7809在 Linux 上查。如果被占用改 Manager 参数里的PORT为其他端口比如 7909。5. 验证同步链路与性能调优一条命令确认数据一致性5.1 用 GGSCI 命令验证抽取和复制状态配置完成后最直接的验证方式是在 GGSCI 里执行INFO ALL这个命令会列出所有抽取和复制进程的状态。正常情况应该是RUNNING。如果某个进程是ABENDED用VIEW REPORT ext_w2l或VIEW REPORT rep_w2l查看详细报错。另一个关键命令是STATSSTATS EXTRACT ext_w2l STATS REPLICAT rep_w2lSTATS会显示抽取和复制了多少条记录、多少字节、有没有延迟。如果Lag at Chkpt持续增大说明复制进程跟不上抽取进程需要调优。5.2 源端插入测试数据验证端到端同步在 Windows 源端执行INSERT INTO hr.employees (employee_id, first_name, last_name, hire_date) VALUES (9999, 测试, 同步, SYSDATE); COMMIT;然后在 Linux 目标端查询SELECT * FROM hr.employees WHERE employee_id 9999;如果查到了这条记录说明端到端同步正常。如果没查到检查复制进程的DISCARDFILE看有没有丢弃记录。5.3 性能调优的 3 个关键参数第一个是抽取进程的TRANLOGOPTIONS可以加EXCLUDEUSER排除不需要同步的用户减少抽取量。第二个是复制进程的BATCHSQL开启批量应用可以显著提升复制速度BATCHSQL第三个是GROUPTRANSOPS控制每个事务包含的 SQL 数量默认是 1000可以调到 5000GROUPTRANSOPS 5000这三个参数调完后复制进程的吞吐量通常能提升 30% 到 50%。但要注意BATCHSQL在遇到主键冲突时会自动回退到逐条应用所以如果目标端有频繁的冲突效果会打折扣。5.4 监控与告警别等业务投诉才发现同步断了OGG 本身没有内置的告警机制我一般会写一个简单的 shell 脚本定时检查INFO ALL的输出如果发现ABENDED就发邮件。Windows 端可以用 PowerShell 脚本Linux 端用 crontab 定时执行。关键是要监控Lag at Chkpt如果超过 10 分钟说明同步延迟已经很大了需要立即排查。#!/bin/bash # check_ogg.sh OGG_HOME/u01/ogg19c cd $OGG_HOME ./ggsci EOF INFO ALL EOF这个脚本的输出可以用grep过滤ABENDED如果有就触发告警。我一般会把这个脚本放在 crontab 里每 5 分钟跑一次。5.5 一个我踩过的坑Windows 防火墙拦截 Manager 通信最后说一个血泪经验。Windows 源端的防火墙默认会拦截 OGG 的 Manager 端口 7809导致目标端的复制进程无法从源端拉取 trail 文件。现象是复制进程一直STARTING然后ABENDED报错OGG-01028或连接超时。解决方法是 Windows 防火墙入站规则里放行 7809 和 7810-7820 端口。这个坑我踩过两次第一次排查了半天才发现是防火墙。所以搭 OGG 之前先把防火墙规则配好能省很多时间。希望帮到你。本文还有配套的精品资源点击获取

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询