简介:Oracle GoldenGate 11.2.1.0.3 for Oracle 11g Windows x64 是面向Windows Server 2003/2008 64位平台、适配Oracle 11g数据库的数据复制中间件安装包,适合数据库管理员、运维及灾备工程师用于生产与灾备库之间的实时同步、数据迁移与高可用配置。压缩包共185个文件,以jar库、sql脚本、exe程序、dll动态库和txt说明为主,覆盖抽取、传输、复制、管理全链路组件,并包含ICU多语言库、XML解析库等运行依赖,整体大小34.1MB。包内自带批处理与Java代理脚本,便于在Windows环境下快速启动GoldenGate管理工具。对希望掌握OGG实操的读者,可利用示例脚本与核心组件定义,搭建双机同步环境、验证Extract与Replicat流程,并借助错误消息库排查常见同步问题。目前已有1407人学习,适合有一定Oracle基础并需要落地GoldenGate同步方案的中高级技术人员。
1. 项目概述:这套Oracle GoldenGate安装包到底能解决什么问题
Oracle_GoldenGate_11.2.1.0.3_for_Oracle_11g_windows_x64 这串名字很长,但拆开看很清晰:Oracle GoldenGate 11.2.1.0.3 版本,跑在 Oracle 11g 数据库上,操作系统是 Windows x64。我最初接触这个组合的时候,是给一套老旧的生产库做灾备改造——数据库版本 11.2.0.4,Windows Server 2008 R2 64位,不能停机太久,预算又不允许上 DataGuard 物理备库(因为物理备库对主备库的操作系统、数据库版本要求完全一致,而且备库不提供读服务)。OGG 就成了当时最合适的选择。
聊到 OGG 就绕不开它的核心能力:基于日志的实时数据同步。它通过读取主库的在线日志和归档日志,抓取变化数据,再以事务为单位投递到目标库。支持同构异构数据库之间的同步,支持一对多、多对一、双向同步,还能做数据过滤和转换。这套 11.2.1.0.3 是 Oracle GoldenGate 11.2 系列里的一个小补丁版本,专门对应 Oracle 11g 数据库在 Windows x64 上的部署。它不是什么新东西,但它足够稳定,配置方式也直白,没有后续 12c、19c 微服务架构那么复杂。对还在维护 11g 老环境的团队来说,这个版本反而比新版更顺手。
这篇文章适合谁看?两类人。一类是刚接手 11g 数据库、需要搭一套同步链路做报表分发或者容灾的运维同学;另一类是准备做数据库冷迁移,想用 OGG 在迁移窗口外补增量数据的人。我会把下载安装、参数配置、进程启动、常见故障排查、日志佐证材料整理这些事从头到尾捋一遍,所有配置都基于我在 Windows x64 + Oracle 11g 环境里实测过的做法,不是照搬官方文档。
2. 安装包解析与版本匹配评估
2.1 版本对应关系与适用场景
先看版本号。OGG 11.2.1.0.3 的格式是 11.2(大版本).1(维护版本).0.3(补丁级别)。在 Oracle 的发布历史里,11.2.1.0.x 系列是专门为 Oracle 11g 数据库打造的经典版,补齐了早期 10g 版本的一些缺陷,也增加了对数据库部分特性的支持。到 12c 以后 OGG 的架构发生大变化,引入了微服务架构、Admin Client 等新组件,虽然功能更强,但对老库老环境来说,学习成本和部署复杂度都上去了。
我做过一个横向对比,这套老版本和后续版本的区别主要体现在:
| 对比项 | OGG 11.2.1.0.3 | OGG 12c/19c |
|---|---|---|
| 配置方式 | 纯命令行 GGSCI + 参数文件 | 微服务 REST API + Web界面 |
| 支持的数据库 | Oracle 10g/11g(主打) | Oracle 11g/12c/19c 及更多异构库 |
| 架构复杂度 | 单一 Manager 进程,简单直接 | 多个服务组件,部署灵活但复杂 |
| 适用场景 | 老库同步、极简链路 | 云环境、大规模多租户、容器化 |
| 官方支持时长 | 早已结束扩展支持 | 仍在持续发布补丁 |
如果你是给 11g 数据库搭同步,我建议直接用这个版本——它和 11g 的日志格式、数据字典兼容性磨合得最透,生成 trail 文件的格式也更单一,排查问题的时候少很多干扰因素。
2.2 为什么 Windows x64 上仍要关注这套方案
很多文章默认 Oracle 应该跑在 Linux 上,但现实是 Windows 服务器上跑着一大堆 11g 数据库,尤其是中小企业的 ERP、MES、财务系统。Windows x64 平台上部署 OGG 有几个独特的地方值得注意:路径分隔符用的是反斜杠,服务注册方式是通过 INSTALL ADDSERVICE,还有 Windows 服务账号的权限问题会直接导致 Manager 进程起不来。
另外 11g 数据库在 Windows 上有个常见毛病——监听服务经常性抽风(这个后面我专门讲),如果在 OGG 同步链路上监听挂掉,抽取进程会直接报 TCP 连接错误。所以选这个版本不是单纯为了"老配老",而是在这个操作系统和数据库组合下,它踩过的坑最少,应急资料也最多。真到了出问题的时候,你搜到的经验帖基本都基于这套组合,省心得不是一点半点。
3. 部署前置条件与数据库侧准备
3.1 环境检查清单
在解压安装包之前,先把环境检查一遍。我吃过亏:想当然以为服务器内存够用,结果 OGG 抽取进程一启动就把内存占满了,最后发现是被其他应用挤占了资源。
检查清单如下:
- 操作系统:Windows Server 2008 R2/2012/2016 的 x64 版本,纯净系统最好
- 数据库版本:Oracle 11.2.0.1 到 11.2.0.4 均可,建议打满补丁到 11.2.0.4
- 内存:建议不低于 4GB,OGG 单个进程占用 500MB 以上是常态
- 磁盘:trail 文件目录独立划分,大小按日志增量估算(后面讲算法)
- Oracle 客户端:如果 OGG 和目标库不在同一台机器,需要安装 64 位 Oracle Client
- 权限:Windows 本地管理员权限,数据库 SYSDBA 权限(用于配置阶段)
这些条件缺一不可。尤其是 64 位这个点,我看过有人把 32 位 OGG 装到 64 位系统上,报错报得莫名其妙,其实就是位数不匹配。
3.2 数据库必须开启的三大开关
OGG 抽取的原理是读在线日志和归档日志,所以数据库侧有三个开关必须打开,缺一个你的抽取进程都会报 OGG-00446 之类的错误。
-- 启用归档模式(需重启数据库) SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE OPEN; -- 启用强制日志(保证关键事务记录到日志) ALTER DATABASE FORCE LOGGING; -- 启用最小补充日志(OGG 抓取变更数据必需) ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;补充日志这个东西最容易被忽略。OGG 要识别哪一行被更新了,必须从日志里拿到足够的主键信息。如果主键字段没被日志覆盖,OGG 就会走全表扫描比对,性能直接崩。开了最小补充日志之后,OGG 还会自动给无主键表加上全字段日志,11g 里这一步默认是自动的,不用额外配置。
还有一点:建议在数据库级别设置一个专门给 OGG 用的管理用户,不要用 SYSTEM 或 SYS 这种超级账号直连,避免权限过大,也方便审计。
CREATE USER ogg IDENTIFIED BY ogg_password DEFAULT TABLESPACE users QUOTA UNLIMITED ON users; GRANT CONNECT, RESOURCE TO ogg; GRANT SELECT ANY DICTIONARY TO ogg; GRANT SELECT ANY TABLE TO ogg; GRANT ALTER ANY TABLE TO ogg; GRANT FLASHBACK ANY TABLE TO ogg; GRANT EXECUTE ON DBMS_FLASHBACK TO ogg; -- 如果做 DDL 同步,还需要额外授予 GRANT ALTER SYSTEM TO ogg;这些权限看起来多,但都是标准配置。少了 FLASHBACK ANY TABLE,抽取进程做初始化时无法读取一致性快照,会报错。少了 SELECT ANY DICTIONARY,进程连接时解析数据字典都会失败。
3.3 安装包目录结构与安装步骤
官方安装包是一个 ZIP 压缩包,解压后看不到传统意义的安装向导,而是直接就是一个可用的目录,里面有ggsci.exe、lib、dirprm等核心文件。这种"绿色版"式的设计是 OGG 的一大特点——解压即用,不用注册表,不用 PATH 环境变量。
我推荐的安装路径是D:\OGG或者C:\OGG,注意两点:路径里不能有空格,不能有中文。曾经有个同事把 OGG 装到D:\Program Files\OGG,Manager 进程怎么都起不来,最后发现就是路径空格闹的。如果确实只有带空格的目录可选,那就用 Windows 的 8.3 短路径名(怎么查短路径名就不展开说了,尽量从源头避开这个坑)。
安装步骤很简单:
- 解压安装包到 D:\OGG
- 在 D:\OGG 目录下创建子目录:
dirdat(trail文件)、dirprm(参数文件)、dirrpt(报告)、dirdef(定义文件) - 打开命令行,进入 D:\OGG,执行
ggsci.exe - 在 GGSCI 里执行
CREATE SUBDIRS自动创建标准目录结构
GGSCI (WIN-DB01) 1> CREATE SUBDIRS Creating subdirectories under current directory D:\OGG Parameter files ./dirprm: Created Report files ./dirrpt: Created Checkpoint files ./dirchk: Created Process status files ./dirpcs: Created SQL script files ./dirsql: Created Database definitions files ./dirdef: Created Extract data files ./dirdat: Created Temporary files ./dirtmp: Created Verify data files ./dirver: Created到这里,安装层面就完成了,剩下的全是配置层面的活。
4. 核心进程配置与同步链路搭建
4.1 Manager 进程:链路的管家
Manager 是 OGG 的主控进程,监控所有 Extract 和 Replicat 的运行状态,负责启动、停止、告警,还管着 trail 文件的清理。它的参数文件是dirprm/MANAGER.prm,我通常这样配:
PORT 7809 DYNAMICPORTLIST 7810-7820 AUTOSTART ER * AUTORESTART ER *, RETRIES 5, WAITMINUTES 3 PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS, MINKEEPHOURS 24PORT 是 Manager 的监听端口,默认是 7809。如果这个端口被占用,可以换,但要保证防火墙放行。DYNAMICPORTLIST 是给 Extract 投递到远程时动态分配的端口范围。AUTOSTART 和 AUTORESTART 让 Manager 自动拉起挂掉的进程,这在大半夜出问题时能救命。PURGEOLDEXTRACTS 是清理过期 trail 文件,我用MINKEEPHOURS 24保证至少保留 24 小时的数据,避免备库延迟时文件被误删。
配置完以后执行:
GGSCI> START MANAGER看到Server started就说明 Manager 起来了。没起来的话,去dirrpt/MANAGER.rpt看报告,不要瞎猜。这是排查所有 OGG 问题的通用姿势:先看报告文件。
4.2 Extract 抽取进程:日志的搬运工
Extract 进程负责从数据库日志中抓取变更。它有两种运行模式:一种是经典抽取模式(从日志直接读),一种是 Data Pump 模式(从本地 trail 投递到远端)。在 11.2.1.0.3 里,经典抽取模式还是主流。
写一个 Extract 参数文件dirprm/EORA11.prm:
EXTRACT EORA11 USERID ogg, PASSWORD ogg_password EXTTRAIL D:\OGG\dirdat\lt DDLLOG TRANLOGOPTIONS EXCLUDEUSER ogg TABLE SOE.*;EXTRACT 后面的名字就是进程名,随便起,但建议有规律,比如 E 开头代表 Extract。USERID 和 PASSWORD 用之前建好的 OGG 管理用户。EXTTRAIL 指定本地 trail 文件的路径,lt是文件前缀,OGG 会自动生成 lt000000001、lt000000002 这样的文件。DDLLOG 是记录 DDL 操作,如果不需要同步 DDL,可以去掉。TRANLOGOPTIONS EXCLUDEUSER 是过滤掉 OGG 管理用户自己的操作,防止循环抓取。
在 GGSCI 里注册这个进程:
GGSCI> DBLOGIN USERID ogg, PASSWORD ogg_password GGSCI> ADD EXTRACT EORA11, TRANLOG, BEGIN NOW GGSCI> ADD EXTTRAIL D:\OGG\dirdat\lt, EXTRACT EORA11这里有个关键点:ADD EXTRACT 和 ADD EXTTRAIL 两条命令的顺序不要搞反,先有 Extract 进程,再关联 trail 文件。而且 ADD EXTTRAIL 的格式是有讲究的,它要跟参数文件里的 EXTTRAIL 路径完全一致,否则进程起不来。
4.3 Replicat 投递进程:数据上屏的画笔
Replicat 进程负责把 trail 文件里的变更应用到目标库。参数文件dirprm/RORA11.prm:
REPLICAT RORA11 USERID ogg, PASSWORD ogg_password ASSUMETARGETDEFS DISCARDFILE D:\OGG\dirrpt\RORA11.dsc, APPEND, MEGABYTES 100 MAP SOE.*, TARGET SOE.*;ASSUMETARGETDEFS 是指定源表和目标表结构一致,省去生成定义文件的步骤。如果两张表字段对不上,就不能用这个参数,得用 DEFGEN 工具生成定义文件,技术含量一下子高很多。DISCARDFILE 指定错误数据的记录文件,这个非常重要,同步出错时先看这里。
注册命令:
GGSCI> DBLOGIN USERID ogg, PASSWORD ogg_password GGSCI> ADD REPLICAT RORA11, EXTFILE D:\OGG\dirdat\lt注意 Replicat 的 EXTFILE 要和 Extract 的 EXTTRAIL 对应上。如果 Extract 和 Replicat 不在同一台机器(这是常见场景),需要先把 trail 文件传输过来,这时候中间再加一个 Data Pump 进程,逻辑是:本地 Extract 抓日志 -> 本地 trail -> Data Pump 投递 -> 远程 trail -> 远程 Replicat 应用。两台机器的配置我都走通过,核心思路就是分层递进,哪个环节出问题,看对应进程的报告就能锁定。
4.4 与冷迁移场景的配合:增量补数方案
热词里"oracle 11g 数据库怎么冷迁移"很热。冷迁移的思路是:停应用、正常关闭数据库、把数据文件+控制文件+重做日志拷贝到新服务器、启动数据库。这个方案数据零丢失,但停机时间等于拷贝时间加恢复时间,对大数据量来说很难接受。
我实践过的做法是"冷迁移 + OGG 增量追平"两步走,把停机时间压缩到分钟级:
- 提前三天部署 OGG,源库 11g 上搭 Extract 抓取日志到本地 trail
- 应用不停,执行数据库全量备份或物理文件拷贝(可以用 RMAN backup as copy),把基础数据传到目标库恢复
- 恢复完成后,在目标库上配置 Replicat,从源库 trail 末尾的点开始应用增量事务
- 切换窗口内,停应用、停源库,等 Replicat 追平到源库的最终一致点,再切应用
这个方案的核心是时间点对齐。基础恢复的时候,要记录源库的 SCN 或日志序列号,然后让 Extract 在基础备份对应的时间点附近启动抽取。OGG 提供了 AE(After Extract)模式或者ADD EXTRACT ... BEGIN的自定义时间,实操时我习惯先做一次全量物化,再用START EXTRACT EORA11, AT SCN xxx这样的语法从指定 SCN 开始抓取,确保增量数据从基础备份的断点无缝衔接。
5. 高频故障:监听与服务自启问题实录
5.1 Oracle 11g 监听启动成功后自动关闭
这个问题的出现频率高到离谱。核心现象是:双击服务或者命令行执行lsnrctl start,提示 LISTENER 启动成功,然后过两三秒监听进程就自己退出,服务状态又回到已停止。
排查思路我按优先级排列如下:
监听服务登录身份问题:这是最常见的。Oracle 的 Windows 服务如果登录身份是"本地系统账户",在某些网络环境下监听器无法正确绑定主机名或 IP,会自动退出。打开服务管理器,找到
OracleOraDb11g_home1TNSListener服务,把登录身份改成一个有本地管理员权限的域账户,或者改成系统账户之后重新设置"允许服务与桌面交互"。端口冲突:1521 端口被其他程序占了(遇到过被某厂商安全软件占 1521 的情况)。执行
netstat -ano | findstr 1521看监听是否真的绑定了正确端口。hosts 文件解析问题:Windows 的 hostname 和 hosts 文件映射不一致时,监听器解析主机 IP 出错。检查
C:\Windows\System32\drivers\etc\hosts,确保有127.0.0.1 主机名和实际 IP 的映射,没有多余的重复行。listener.ora 配置项错误:
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 主机名)(PORT = 1521))))。如果你的数据库是多网卡环境,HOST 写主机名可能解析到错误的网卡,建议改成实际使用的 IP 地址,避免歧义。
还有一个冷门但真实存在的情况:杀毒软件把监听进程当成恶意行为拦截,导致监听先启动后被杀掉从而报自动关闭。排查的时候把 Oracle 的安装目录加入杀毒软件白名单,再重启监听服务试试。
5.2 OGG 服务开机自启动设置
把 OGG Manager 注册成 Windows 服务,让它开机自启,只需要一条命令:
GGSCI> INSTALL ADDSERVICE执行后系统会提示填入一个服务名,默认叫GGS_MGR,确认后就注册成功了。然后到服务管理器里把GGS_MGR的启动类型改为"自动(延迟启动)"。为什么延迟启动?因为 Oracle 数据库服务可能还没完全就绪,Manager 起来太早,后续自动拉起的 Extract 会因为数据库没起来而报连接错误。延迟 30 到 60 秒启动,让数据库先稳定,这个细节能省掉很多重启后的心跳检查。
注册之后还要注意:如果跑 OGG 的账号不是本地系统账户,而是指定账户,那这个账户需要有读取 D:\OGG 整个目录的权限,以及对dirdat、dirrpt目录的写权限。否则 READ 权限不对,进程能启动但会一直写报告失败。
5.3 日志佐证材料与审计排查清单
遇到合规审查或者故障复盘,需要整理日志佐证材料,主要找这几类:
- GGSCI 执行
STATUS ALL和INFO ALL,展示四个进程级别(Manager、Extract、Data Pump、Replicat)的运行状态机截图或文本记录 dirrpt目录下每个进程的.rpt报告文件,特别是*.rpt和*.dsc(丢弃文件记录)ggserr.log日志,路径在 OGG 主目录下,按天滚动,记录所有进程的启动、停止、报错信息- trail 文件的生成记录,确认从
lt000000001到当前文件是否有断档 - 数据库侧的归档日志清单,用来和 trail 文件做对应比对
我自己在等审计的时候,还会额外跑一条INFO EXTRACT EORA11, DETAIL把 checkpoint 位置、日志序列号、SCN 拉出来,和数据库的归档日志交叉验证。这样就能证明同步链路在某个时间点是完整、连续、无丢失的。
6. 常见问题速查与避坑心得
6.1 问题排查速查表
| 问题现象 | 可能原因 | 排查/解决方式 |
|---|---|---|
| 启动 Manager 报端口占用 | 7809 端口被防火墙或其他进程占用 | netstat 检查,改 PORT,或在防火墙添加允许规则 |
| Extract 报告 OGG-00446 | 数据库归档模式未开启或补充日志缺失 | 检查 v$database 的 LOG_MODE 和 SUPPLEMENTAL_LOG_DATA_MIN 字段 |
| Replicat 停留在初始化状态 | trail 文件读取权限不足或路径不对 | 检查确保 Replicat 的 EXTFILE 与 Extract 的 EXTTRAIL 一致 |
| 数据延迟持续增大 | 磁盘 I/O 或数据库归档日志切换过慢 | 看 EORA11.rpt 的滞后时间,检查源库日志切换频率 |
| 同步数据出现乱码 | 字符集不一致 | ASSUMETARGETDEFS 用不了,改成 DEFGEN 生成匹配的 def 文件 |
| Windows 重启后进程全挂 | 服务未注册或启动延迟不够 | 执行 INSTALL ADDSERVICE,检查 GGS_MGR 服务登录账号 |
| trail 文件无法清理 | 长时间未做 CHECKPOINT | 在 Manager 参数中配置 PURGEOLDEXTRACTS,并确保 Replicat 正常推进 |
6.2 几点实在的避坑经验
第一,目录权限宁可多给不能少给。我给 OGG 单独建了一个操作系统用户,专门用于运行服务,然后把这个用户加进 D:\OGG 的所有者列表。刚开始图省事,直接用 Administrator 跑,后来安全合规要求应用最小权限,换成了专用用户,各种莫名奇妙的启动失败全来了。检查一圈,就是目录权限的问题。
第二,time 同步非常重要。主库和备库的时间偏差超过 30 秒,OGG 的延迟计算和心跳判断都会出问题,极端情况下会导致 Extract 认为备库掉线而停止投递。在 Windows 上配置 NTP 或者域时间同步,别省这个步骤。
第三,trail 文件空间算法先算好。我用过一个经验公式:trail 文件一天的增量 ≈ 源库一天的归档日志量的 60%~70%(如果同步的表不多,比例会更低)。比如源库每天产生 50GB 归档,trail 大概 30~35GB。磁盘规划的时候,建议按 3 天容量再乘 1.5 倍余量来划分,以防备库故障追不上时文件堆积。
第四,上线前先跑一次压力测试。别一上来就接生产。我每次搭完链路,都会用一个小表做全量插入更新删除测试,观察 trail 文件生成、Replicat 应用耗时,再切到生产流量。这一步能发现 80% 的配置低级错误,比如参数写错表名、字段类型映射不对、目标表权限缺失等。
7. 写在最后的补充
根据我多次在这套环境上折腾的经验,OGG 11.2.1.0.3 + Oracle 11g + Windows x64 这个组合,只要前期的目录、权限、数据库开关全部到位,后面的链路配置真的是一马平川。最怕的反而是半路遇到一个莫名其妙的系统环境问题,比如监听反复消失、防火墙拦截动态端口、杀毒软件后台扫描 trail 文件目录影响 I/O。这类问题解决的关键,不是背命令,而是建立一套排查的肌肉记忆:先看报告文件、再看操作系统日志、最后才怀疑参数配置。
最后再分享一个小技巧:给参数文件写注释。OGG 的参数文件支持#注释,我每行参数后面都会标注为什么这样配、当初遇到了什么问题才加的。半年后回头维护的时候,你会感谢当年的自己。
本文还有配套的精品资源,点击获取