资讯详情

Oracle GoldenGate 11.2.1.0.3 在 Windows x64 上配 Oracle 11g 实战指南

📅 2026/10/10 1:30:18 | 华诺云谱 👁 阅读
Oracle GoldenGate 11.2.1.0.3 在 Windows x64 上配 Oracle 11g 实战指南
简介Oracle GoldenGate 11.2.1.0.3 是面向 Oracle 11g 数据库、运行于 Windows x64 环境的数据复制与实时同步解决方案适合从事数据库运维、数据迁移与高可用架构的工程师使用。该版本包含 Extract 抽取、Data Pump 传输、Replicat 应用、Management Studio 管理工具及 Trail Files 变更文件等核心组件可完成低延迟的 DML/DDL 捕获与目标端应用并支持冲突检测、错误恢复与数据过滤。压缩包共 185 个文件约 34.1MB以 jar、sql、exe、dll、txt 及多平台 Makefile 脚本为主涵盖 Windows、Linux、AIX、HP-UX、Solaris 等环境所需的运行库与配置模板另有 ICU、Xerces、Berkeley DB 等依赖库便于快速部署与排错。目前已有 1412 人学习下载适合需要搭建 GoldenGate 实验环境、研究数据同步机制或排查兼容性问题的读者参考。1. Oracle GoldenGate 11.2.1.0.3 在 Windows x64 上配 Oracle 11g这套老组合还值不值得碰手上还有一套 Oracle 11g 跑在 Windows Server 上的核心库业务不敢停机升级窗口一拖再拖但报表库、灾备库、数据抽取的需求天天催。这时候翻出 Oracle GoldenGate 11.2.1.0.3 for Oracle 11g windows x64大概率是很多老 DBA 的真实处境。它解决的不是新潮问题而是老库之间准实时同步、异构抽取、零停机迁移这类硬需求。GoldenGate 靠抽取进程读源库 redo/archive log投递进程写到目标库中间用 trail 文件解耦源和目标可以不同版本、不同平台。这套组合适合还在维护 Oracle 11g 的运维、做数据同步的中间件工程师以及被要求不停机割接的迁移项目负责人。下面按选型、安装、配置、排错、进阶一路讲透。2. 先搞懂 GoldenGate 11.2.1.0.3 的进程模型和 Windows 落地约束GoldenGate 不是装完就能跑的黑匣子它的行为完全由几个进程和一组参数文件决定。在 Windows x64 上配 Oracle 11g先把模型和平台约束吃透后面配置才不会反复翻车。2.1 抽取、投递、trail 三段式到底怎么流转GoldenGate 的核心是日志驱动而不是触发器驱动。源端 Extract 进程通过 Oracle 的 LogMiner 或集成抽取方式读取在线 redo log 和归档日志把变更解析成一种中间格式写进本地 trail 文件。这个 trail 文件是 GoldenGate 自己的二进制格式和 Oracle 无关所以它能跨版本、跨平台传输。目标端 Replicat 进程读 trail 文件把变更用 SQL 或直接路径方式应用到目标库。三段式的价值在于解耦源库只负责产生 trail目标库只负责消费 trail中间任何一段慢下来都不会直接拖垮另一端。Extract 写 trail 是顺序写速度很快Replicat 应用是随机写目标库往往是瓶颈所在。理解这一点后面调优就知道该往哪使劲。在 11.2.1.0.3 这个版本上Extract 支持 Classic 和 Integrated 两种模式。Classic 模式用 LogMiner 读日志配置简单对源库压力小但解析某些数据类型比如 LOB、UDT能力有限。Integrated 模式依赖源库的 LogMining 服务解析更完整但要求数据库开启补充日志且版本匹配。Windows 上跑 Oracle 11g我一般先用 Classic 模式跑通确认数据能同步再评估要不要切 Integrated。2.2 Windows x64 上的目录、服务与权限约束Windows 平台和 Linux 最大的差别在于GoldenGate 在 Windows 上是以服务形式常驻的而服务背后是 Manager 进程在管理其他进程。安装目录、trail 目录、参数文件目录的路径里不要有空格和中文这是血泪经验——路径带空格时某些参数解析会出问题报错信息还特别含糊。目录规划建议这样分目录用途建议路径说明安装根目录D:\ogg不要放 C 盘系统盘trail 存放D:\ogg\dirdat单独盘顺序写性能好参数文件D:\ogg\dirprm每个进程一个 prm报告与日志D:\ogg\dirrpt排错主要看这里检查点D:\ogg\dirchk不要手动删服务账号方面GoldenGate 的 Manager 服务默认用本地系统账号启动但访问 Oracle 需要数据库账号。我一般单独建一个 ogg 数据库用户授予 DBA 或至少以下权限CREATE SESSION、ALTER SESSION、SELECT ANY DICTIONARY、SELECT ANY TRANSACTION、FLASHBACK ANY TABLE、EXECUTE ON DBMS_FLASHBACK、LOCK ANY TABLE。权限不够时 Extract 起不来报错往往只说无法获取数据字典不会直接告诉你缺哪个权限。提示Windows 上安装 GoldenGate 前先确认已装 Microsoft Visual C 运行库缺运行库时 ggSCI 可能直接闪退且不留任何日志。3. 在 Windows x64 上装好 GoldenGate 并连上 Oracle 11g这一章是纯操作每一步都对应一个可复现的动作。装 GoldenGate 本身不复杂难的是环境变量、Oracle 客户端和数据库账号三者对齐。3.1 解压安装与 ggSCI 首次启动GoldenGate 11.2.1.0.3 的 Windows 版本是一个压缩包解压即用没有图形化安装向导。把压缩包解到 D:\ogg然后配置环境变量。# 设置 GoldenGate 环境变量在系统环境变量里加或写进启动脚本 set ORACLE_HOMED:\app\oracle\product\11.2.0\dbhome_1 set ORACLE_SIDORCL set GG_HOMED:\ogg set PATH%GG_HOME%;%ORACLE_HOME%\bin;%PATH% set NLS_LANGAMERICAN_AMERICA.AL32UTF8环境变量里 ORACLE_HOME 必须指向 Oracle 11g 的 homeGoldenGate 启动时会去这里找 Oracle 客户端库。NLS_LANG 要和源库、目标库字符集一致否则中文数据同步后可能变问号。设置完打开命令行进 D:\ogg执行 ggSCI。cd /d D:\ogg ggsci进入 ggSCI 后先创建目录结构这是 GoldenGate 的固定动作# 在 ggSCI 里执行 CREATE SUBDIRSCREATE SUBDIRS 会一次性建好 dirdat、dirprm、dirrpt、dirchk 等所有子目录。如果这一步报错多半是权限问题或路径里有空格。建完后用INFO ALL看 Manager 是否在跑没跑就用START MANAGER启动。3.2 配置 Manager 与源端 Extract 抽取进程Manager 是 GoldenGate 的总管负责启动、监控其他进程还管端口和 trail 清理。先编辑 Manager 参数文件。# 在 ggSCI 里执行 EDIT PARAMS MGR写入以下内容PORT 7809 DYNAMICPORTLIST 7810-7820 AUTOSTART EXTRACT * AUTORESTART EXTRACT *, RETRIES 5, WAITMINUTES 3 PURGEOLDEXTRACTS D:\ogg\dirdat\*, USECHECKPOINTS, MINKEEPHOURS 24PORT 是 Manager 监听端口源和目标不能冲突。DYNAMICPORTLIST 给抽取投递进程动态分配端口。AUTORESTART 让进程异常退出后自动重试 5 次每次间隔 3 分钟生产环境必配。PURGEOLDEXTRACTS 按检查点清理旧 trailMINKEEPHOURS 24 表示至少保留 24 小时防止误删。保存后START MANAGER再配置抽取进程。先要在源库开启归档和补充日志-- 用 sysdba 登录源库执行 SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE OPEN; -- 开启最小补充日志和主键补充日志 ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;补充日志是 GoldenGate 能拿到完整变更记录的前提不开的话更新操作可能只记录变更后的值拿不到前像Replicat 应用时会报找不到匹配行。然后配置 Extract# 在 ggSCI 里执行 EDIT PARAMS EXT1EXTRACT EXT1 SETENV (NLS_LANG AMERICAN_AMERICA.AL32UTF8) USERID ogg, PASSWORD ogg123 EXTTRAIL D:\ogg\dirdat\lt TABLE HR.EMPLOYEES; TABLE HR.DEPARTMENTS;USERID 是数据库账号密码明文写在参数文件里生产环境建议用 GoldenGate 的加密方式或 wallet。EXTTRAIL 指定 trail 文件前缀实际生成的是 lt000000 这类文件。TABLE 指定要抽取的表支持通配符如 HR.*。启动抽取前先注册# 在 ggSCI 里执行 ADD EXTRACT EXT1, TRANLOG, BEGIN NOW ADD EXTTRAIL D:\ogg\dirdat\lt, EXTRACT EXT1 START EXT1ADD EXTRACT 的 TRANLOG 表示读事务日志BEGIN NOW 表示从现在开始抽。如果要做历史数据初始化BEGIN NOW 配合后续的初始加载。启动后用INFO EXT1看状态STATUS是 RUNNING 才算成功。3.3 目标端 Replicat 配置与初始数据加载目标端同样先起 Manager然后配置 Replicat。Replicat 需要知道从哪个 trail 读、往哪个库写。# 目标端 ggSCI 里执行 EDIT PARAMS REP1REPLICAT REP1 SETENV (NLS_LANG AMERICAN_AMERICA.AL32UTF8) USERID ogg, PASSWORD ogg123 ASSUMETARGETDEFS DISCARDFILE D:\ogg\dirrpt\REP1.dsc, APPEND, MEGABYTES 100 MAP HR.EMPLOYEES, TARGET HR.EMPLOYEES; MAP HR.DEPARTMENTS, TARGET HR.DEPARTMENTS;ASSUMETARGETDEFS 表示源和目标表结构完全一致不用额外定义文件这是最省事的做法。如果结构不一致要用 DEFGEN 生成定义文件。DISCARDFILE 记录应用失败的记录排错必看。MAP 做表映射支持列映射和过滤条件。注册并启动ADD REPLICAT REP1, EXTTRAIL D:\ogg\dirdat\lt START REP1初始数据加载不能靠 Extract 抽历史数据要用 GoldenGate 的初始加载工具。常见做法是用 Oracle Data Pump 导出源表在目标库导入记录导出时的 SCN然后让 Extract 从该 SCN 开始抽Replicat 从对应位置应用这样初始数据和增量数据能接上。# 源端导出记录 SCN expdp ogg/ogg123 DIRECTORYdpdir TABLESHR.EMPLOYEES,HR.DEPARTMENTS \ FLASHBACK_SCNcurrent_scn DUMPFILEinit_%U.dmp LOGFILEinit_exp.log导出时用 FLASHBACK_SCN 保证一致性导出完成后在目标库导入再把 Extract 的起始位置调整到该 SCN。这一步顺序错了会导致数据重复或丢失是初始加载最容易翻车的地方。4. 参数调优与常见故障排查让同步稳定跑起来配置能跑通只是第一步生产环境要的是稳定和低延迟。这一章讲参数怎么调、出问题怎么查。4.1 抽取和投递的关键性能参数Extract 端最影响性能的是读日志的批量大小和检查点频率。默认配置下 GoldenGate 读日志比较保守大事务场景下延迟会累积。EXTRACT EXT1 USERID ogg, PASSWORD ogg123 EXTTRAIL D:\ogg\dirdat\lt -- 增大事务读取批量 TRANLOGOPTIONS LOGRDNUM 4 -- 每 1000 条或 1 秒写一次检查点 EOFDELAYCSECS 1 -- 大事务拆分 WARNLONGTRANS 1H, CHECKINTERVAL 5M TABLE HR.EMPLOYEES;TRANLOGOPTIONS LOGRDNUM 控制并行读日志的进程数源库 CPU 充裕时可以调大。EOFDELAYCSECS 是检查点写入间隔调小能降低延迟但增加 IO。WARNLONGTRANS 对超过 1 小时的长事务告警CHECKINTERVAL 每 5 分钟检查一次长事务是 trail 积压的常见原因。Replicat 端瓶颈通常在应用 SQL 的速度REPLICAT REP1 USERID ogg, PASSWORD ogg123 ASSUMETARGETDEFS -- 批量应用每 100 条提交一次 BATCHSQL -- 每 500 条或 1 秒刷一次 GROUPTRANSOPS 500 -- 并行应用 MAXAPPLYLOOP 4 MAP HR.EMPLOYEES, TARGET HR.EMPLOYEES;BATCHSQL 把多条 SQL 合并成批量操作对 INSERT 密集场景提升明显但遇到唯一键冲突时行为不同要测试。GROUPTRANSOPS 控制事务分组大小。MAXAPPLYLOOP 在 11.2.1.0.3 上支持有限主要针对特定场景。4.2 同步延迟与数据不一致的排查路径延迟排查先看SEND EXTRACT EXT1, STATUS和SEND REPLICAT REP1, STATUS输出里有当前读到的日志位置、trail 位置、应用位置。三个位置对不上就知道卡在哪一段。# 查看抽取进程详细状态 SEND EXTRACT EXT1, STATUS # 查看投递进程详细状态 SEND REPLICAT REP1, STATUS # 查看 trail 文件积压 INFO EXTTRAIL D:\ogg\dirdat\lt如果 Extract 的 trail 位置远落后于日志位置说明抽取慢看源库 IO 和 CPU。如果 Replicat 的应用位置落后于 trail 位置说明应用慢看目标库锁等待和索引。常见的不一致原因是目标表有触发器或外键约束Replicat 应用时被阻塞或产生额外变更。数据不一致的另一个来源是字符集。源库是 ZHS16GBK目标库是 AL32UTF8NLS_LANG 设置不对时中文会乱码。两边 NLS_LANG 都要设成目标库字符集对应的值且 GoldenGate 参数文件里的 SETENV 要覆盖系统变量。注意Replicat 报ORA-01403: no data found通常是源端更新或删除的记录在目标端不存在多半是初始加载和增量没接上或者目标端有人手动改了数据。5. 避坑与常见问题Windows 上跑 GoldenGate 的 5 个真实翻车点这一章全是踩过的坑每条按现象、原因、解决写照着排查能省不少时间。坑一ggSCI 启动闪退无任何报错。现象是双击 ggsci.exe 窗口一闪就没了。原因是系统缺 Microsoft Visual C 运行库或者 ORACLE_HOME 没设对导致加载 Oracle 客户端 DLL 失败。解决是先装 VC 运行库再确认 ORACLE_HOME 指向正确的 11g home且 PATH 里有 %ORACLE_HOME%\bin。坑二Extract 启动报无法打开归档日志。现象是 START EXT1 后进程立刻 ABENDdirrpt 里报无法读取归档。原因是 GoldenGate 服务账号没有归档目录的读权限或者归档路径变了。解决是给服务账号授予归档目录读权限并确认ARCHIVE LOG LIST显示的归档路径和参数里一致。坑三Replicat 应用报唯一键冲突。现象是 REP1 频繁 ABENDdiscard 文件里全是 ORA-00001。原因是初始加载时目标表已有数据增量又插了一遍。解决是初始加载前清空目标表或者用 HANDLECOLLISIONS 参数临时忽略冲突但这是后悔药数据核对完必须去掉。坑四trail 文件不清理磁盘写满。现象是某天同步突然停了一看 D 盘满了。原因是 PURGEOLDEXTRACTS 没配或配错旧 trail 一直堆积。解决是在 MGR 参数里加 PURGEOLDEXTRACTS用 USECHECKPOINTS 确保只删已应用的 trailMINKEEPHOURS 留足回退时间。坑五Manager 服务开机不自启。现象是服务器重启后同步没恢复业务发现数据没更新。原因是 GoldenGate 服务设成了手动启动。解决是把 GGSCI 服务改成自动并在 MGR 参数里配 AUTOSTART EXTRACT * 和 AUTOSTART REPLICAT *让进程随 Manager 自动拉起。6. 用 INFO 与日志把同步状态变成可验证的指标配好跑起来只是及格线能证明它一直在正确同步才是本事。我习惯用几个固定动作做日常巡检把玄学问题变成可量化的指标。第一是看进程状态和延迟。写一个批处理定时执行 ggSCI 命令并把输出落盘echo off cd /d D:\ogg echo INFO ALL tmp_cmd.txt echo SEND EXTRACT EXT1, STATUS tmp_cmd.txt echo SEND REPLICAT REP1, STATUS tmp_cmd.txt echo EXIT tmp_cmd.txt ggsci.exe tmp_cmd.txt D:\ogg\dirrpt\daily_check_%date:~0,4%%date:~5,2%%date:~8,2%.log这个脚本每天跑一次日志里能看到所有进程状态和延迟秒数。延迟持续增长就是预警不用等业务报障。第二是核对数据。GoldenGate 本身不校验数据一致性要靠外部手段。我一般对关键表做行数和关键字段的 checksum 比对-- 源库和目标库分别执行比对结果 SELECT COUNT(*), SUM(ORA_HASH(EMPLOYEE_ID||SALARY||DEPARTMENT_ID)) FROM HR.EMPLOYEES;两边结果一致说明数据对得上。大表可以按主键分段比对避免全表扫描影响生产。第三是看 discard 文件和报告。dirrpt 目录下每个进程都有报告文件记录了启动、停止、错误和统计信息。Replicat 的 discard 文件只要有记录就说明有数据没应用成功必须处理不能视而不见。一个具体技巧给关键进程配 EVENTACTIONS出错时自动执行脚本发告警。比如 Replicat ABEND 时触发一个写日志或发邮件的动作比人工盯着强。GoldenGate 11.2.1.0.3 支持在参数文件里写REPLICAT REP1 -- 出错时记录并触发 EVENTACTIONS ABEND, LOG这套组合我维护了几年最大的教训是GoldenGate 的稳定不靠装得多好而靠每天看那几个状态数字。延迟、discard、trail 积压这三个指标正常同步基本就没问题。别等业务打电话来才发现同步断了那时候补数据才是真的头疼。希望帮到你。本文还有配套的精品资源点击获取
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑