恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

Oracle OGG跨平台同步实战:Windows到Linux安装部署与避坑指南

  • 首页
  • 资讯中心
  • /
  • Oracle OGG跨平台同步实战:Windows到Linux安装部署与避坑指南

相关资讯

SOTS数据集8:2划分与去雾权重加载:从训练到推理全流程解析 2026/10/11 19:23:17
工艺智能规划的数据底座:CAPP与切削磨削数据库设计实践 2026/10/11 19:23:17
华为智慧电厂解决方案:从边缘采集到数据治理的落地指南 2026/10/11 19:23:17

最新资讯

业务同义词词库自动化维护:基于大模型挖掘用户提问中的方言与行业简称
土豆去皮机三维设计:SolidWorks建模装配与运动仿真指南
钢索缺陷检测数据集与YOLO小目标训练实战指南
为什么程序员的猫喜欢敲键盘:我的猫 Null 曾经误删测试库的惊魂一刻
ClickHouse 物化视图踩坑记:隐蔽的二次写入放大与聚合函数选择
向量数据库与图数据库协同:构建智能问答系统的混合检索架构

今日推荐

UE动画修改实战:从资产编辑到重定向与蒙太奇驱动
统计随机数生成器攻击下的KLJN安全密钥交换协议Matlab仿真
政务API安全治理:资产测绘、低代码编排与行标对标实践

本周热门

UE动画修改实战:从资产编辑到重定向与蒙太奇驱动
统计随机数生成器攻击下的KLJN安全密钥交换协议Matlab仿真
政务API安全治理:资产测绘、低代码编排与行标对标实践

本月精选

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)

Oracle OGG跨平台同步实战:Windows到Linux安装部署与避坑指南

发布时间:2026/10/11 19:28:18
Oracle OGG跨平台同步实战:Windows到Linux安装部署与避坑指南 简介这份PDF文档面向Oracle DBA与数据同步运维人员系统讲解如何用Oracle GoldenGate 12.2.0.2实现Windows源库到Linux目标库的跨平台数据同步适合具备一定Oracle基础、需要落地异构环境实时复制方案的技术人员参考。资源包仅含1个PDF文件约496KB内容以图文与SQL命令结合的方式组织涵盖源库归档模式、强制日志、附加日志与goldengate用户赋权目标库权限差异以及OGG解压安装、create subdirs、GLOBALS与checkpoint表配置、Manager、Extractor、Replicat组件设置和监控维护等完整链路。读者可据此获得一套可对照执行的部署流程与排错思路快速理解跨操作系统同步的关键配置点。目前已有295人学习下载。1. Oracle OGG安装部署细说Windows同步到Linux跨平台这条链路到底难在哪很多团队第一次做 Oracle OGGOracle GoldenGate跨平台同步都是被一个很朴素的需求逼出来的核心库在 Windows Server 上跑着新上的报表库、数据中台或者国产化 Linux 环境要实时拿数据停机窗口又给不出来。于是「Windows 抽、Linux 投」这条链路就成了绕不开的活。它难的不是 OGG 本身而是跨平台带来的字符集、路径、大小写、时区和版本对齐问题任何一个没对齐抽取进程能起、投递进程能起数据就是不动日志里还只给你一句含糊的报错。这篇讲的就是这条链路怎么从零装起来、参数怎么设、坑在哪。适合手上有一台 Windows 源库、一台 Linux 目标库需要做准实时同步的 DBA 和运维。下面按「先想清楚架构 → 装软件 → 配抽取 → 配投递 → 排错 → 验证」的顺序走每一步都给到能抄的命令和参数。OGG 的版本差异不小我下面以 19c 系列为主线12c/21c 的差异会单独点出来你按自己手上的版本对号入座。2. 跨平台同步的架构选型为什么是抽取投递而不是 Data Pump2.1 先分清 OGG 的两种部署形态Oracle GoldenGate 落地时第一件事是决定用哪种形态。常见的有两种一种是经典架构Classic Architecture抽取进程Extract直接读源库的在线日志或归档日志投递进程Replicat通过 SQL 应用到目标库另一种是微服务架构Microservices Architecture把 OGG 拆成 Service Manager、Administration Server、Distribution Server 等一堆组件用 Web 界面管。跨平台 Windows 到 Linux 这个场景我一般推荐经典架构。原因很直接微服务架构对目标端的部署环境要求更高Windows 端做抽取时组件依赖多出问题排查链路长而经典架构的 Extract 和 Replicat 都是命令行进程日志清晰跨平台时字符集和路径问题更容易定位。除非你已经有统一的 OGG 微服务管控平台否则别给自己加戏。经典架构下这条链路的核心进程是三个Extract抽取进程跑在 Windows 源库读 redo/archive log把变更写成 trail 文件。Data Pump抽取投递进程可选跑在源端把本地 trail 通过网络传到目标端。数据量大、网络不稳时建议单独拆出来。Replicat复制进程跑在 Linux 目标库读 trail转成 SQL 应用到目标表。2.2 跨平台必须提前确认的四件事在动手装之前有四件事必须先确认否则后面全是返工。第一源库和目标库的字符集。Windows 上 Oracle 常见的是 ZHS16GBK 或 AL32UTF8Linux 上现在基本都是 AL32UTF8。如果源是 GBK、目标是 UTF8OGG 本身不做字符集转换你得靠数据库的字符集转换或者额外配置中文乱码就是这么来的。查字符集-- 源库和目标库都执行对比结果 SELECT parameter, value FROM nls_database_parameters WHERE parameter IN (NLS_CHARACTERSET, NLS_NCHAR_CHARACTERSET);第二数据库版本和 OGG 版本。OGG 的版本要能兼容源库和目标库的 Oracle 版本。19c 的 OGG 可以对接 11g 到 19c 的库但如果你源库是 11.2.0.4目标库是 19cOGG 版本要选能同时覆盖两端的。别拿一个只支持 19c 的 OGG 去连 11g 源库。第三时区。Windows 和 Linux 的时区设置经常不一致跨平台同步时如果表里有 timestamp 字段可能出现时间偏移。确认两端# Linux 端 timedatectl # Windows 端在 cmd 里 tzutil /g第四网络和端口。OGG 的 Manager 进程默认监听 7809 端口源端和目标端要能互通。Windows 防火墙默认拦入站Linux 的 firewalld 或 iptables 也要放行。这一步不做后面 Manager 起不来你会以为是软件问题。2.3 目录规划别把 OGG 装在系统盘Windows 端我一般把 OGG 装在非系统盘比如D:\ogg19c因为 trail 文件会持续增长系统盘写满会拖垮整个服务器。Linux 端装在/u01/ogg这类独立挂载点别放/root或/home。目录结构大致这样规划目录用途Windows 示例Linux 示例OGG 安装目录D:\ogg19c/u01/oggtrail 文件目录D:\ogg19c\dirdat/u01/ogg/dirdat参数文件目录D:\ogg19c\dirprm/u01/ogg/dirprm日志目录D:\ogg19c\dirrpt/u01/ogg/dirrpttrail 文件的命名规则两端要一致比如都用两个字符前缀lt后面跟 6 位序号。这个前缀在抽取进程参数里定义投递进程读的时候要对上。3. Windows 源端安装与抽取进程配置3.1 Windows 上装 OGG 的完整步骤Windows 端安装 OGG 相对简单但有几个细节容易翻车。第一步解压安装包。OGG 的 Windows 版是个 zip 包解压到你规划的目录比如D:\ogg19c。解压后目录里应该有ggsci.exe、extract.exe、mgr.exe这些可执行文件。第二步设置环境变量。OGG 依赖 Oracle 客户端或者数据库的库文件需要把 Oracle 的bin目录加到 PATH 里。在系统环境变量里加ORACLE_HOMED:\app\oracle\product\19c\dbhome_1 PATH%ORACLE_HOME%\bin;%PATH%第三步创建 OGG 的子目录。OGG 不会自动建所有目录手动建好# 在 OGG 安装目录下执行 mkdir dirdat dirprm dirrpt dirchk第四步用 ggsci 创建 Manager 参数文件。在dirprm下建mgr.prmPORT 7809 DYNAMICPORTLIST 7810-7820 AUTOSTART EXTRACT * AUTORESTART EXTRACT *, RETRIES 5, WAITMINUTES 3 PURGEOLDEXTRACTS D:\ogg19c\dirdat\lt*, USECHECKPOINTS, MINKEEPHOURS 24这里PORT 7809是 Manager 监听端口DYNAMICPORTLIST是给抽取进程动态分配的端口范围AUTORESTART让抽取进程挂了自动重启PURGEOLDEXTRACTS自动清理超过 24 小时的 trail 文件防止磁盘写满。第五步启动 Manager# 进入 OGG 目录执行 ggsci GGSCI start manager GGSCI info managerinfo manager能看到Manager is running就说明起来了。如果报端口被占用用netstat -ano | findstr 7809查一下谁占了。3.2 配置抽取进程从表级到库级抽取进程的配置分两步先写参数文件再在 ggsci 里 add extract。先建参数文件dirprm\ext1.prmEXTRACT ext1 SETENV (NLS_LANG AMERICAN_AMERICA.AL32UTF8) USERIDALIAS ogg_src DOMAIN OracleGoldenGate EXTTRAIL D:\ogg19c\dirdat\lt TABLE hr.employees; TABLE hr.departments;这里几个关键点。SETENV (NLS_LANG ...)必须和源库字符集一致源库是 GBK 就写ZHS16GBK写错了抽取出来的中文就是乱码。USERIDALIAS是 12c 以后的写法用凭证别名不再明文写用户名密码如果是 11g 的 OGG得用USERID ogg_user, PASSWORD xxx。EXTTRAIL指定 trail 文件路径和前缀lt就是前缀。TABLE指定要抽取的表可以写具体表也可以写TABLE hr.*;抽整个 schema。然后在 ggsci 里注册并启动GGSCI dblogin useridalias ogg_src DOMAIN OracleGoldenGate GGSCI add extract ext1, tranlog, begin now GGSCI add exttrail D:\ogg19c\dirdat\lt, extract ext1 GGSCI start extract ext1 GGSCI info extract ext1add extract ext1, tranlog, begin now表示从当前时间点开始读在线日志。如果要补历史数据把begin now换成begin 2024-01-01 00:00:00。add exttrail把 trail 文件和抽取进程关联起来。3.3 抽取进程的参数调优与常见报错抽取进程起来后用info extract ext1看状态view report ext1看详细日志。几个常见问题报 OGG-00446 找不到归档日志。原因是抽取进程要读的归档日志已经被删了。解决方法是确认源库的归档保留策略或者用begin指定一个还在的 SCN 重新开始。报 OGG-01028 无法打开 trail 文件。多半是目录权限问题Windows 上确认 OGG 进程的运行账户对dirdat目录有写权限。抽取延迟越来越大。看info extract ext1里的Lag at Chkpt和Time Since Chkpt。如果延迟持续增长可能是源库日志切换太频繁或者抽取进程的TRANLOGOPTIONS没配好。可以加TRANLOGOPTIONS CONVERTUCS2CLOBS TRANLOGOPTIONS DBLOGREADERDBLOGREADER让抽取进程用数据库的 logminer 读日志比直接读文件更稳但会占用源库资源。提示抽取进程的SETENV NLS_LANG一定要和源库字符集严格一致这是跨平台中文乱码的头号原因没有之一。4. Linux 目标端安装与投递进程配置4.1 Linux 上装 OGG 的完整步骤Linux 端安装 OGG 和 Windows 类似但多了权限和依赖的坑。第一步上传安装包并解压。OGG 的 Linux 版是个 tar 包mkdir -p /u01/ogg tar -xvf ogg19c_linux_x64.tar -C /u01/ogg cd /u01/ogg ls -l解压后应该有ggsci、extract、replicat、mgr这些文件。第二步设置环境变量。在~/.bash_profile里加export ORACLE_HOME/u01/app/oracle/product/19c/dbhome_1 export LD_LIBRARY_PATH$ORACLE_HOME/lib:/u01/ogg:$LD_LIBRARY_PATH export PATH$ORACLE_HOME/bin:/u01/ogg:$PATH export NLS_LANGAMERICAN_AMERICA.AL32UTF8LD_LIBRARY_PATH必须包含 OGG 目录和 Oracle 的 lib 目录否则 ggsci 启动会报找不到库。第三步建目录并启动 Manager。和 Windows 一样先建dirdat、dirprm、dirrpt、dirchk然后写mgr.prmPORT 7809 DYNAMICPORTLIST 7810-7820 AUTORESTART REPLICAT *, RETRIES 5, WAITMINUTES 3 PURGEOLDEXTRACTS /u01/ogg/dirdat/lt*, USECHECKPOINTS, MINKEEPHOURS 24启动cd /u01/ogg ./ggsci GGSCI start manager GGSCI info manager4.2 配置投递进程Replicat 的参数怎么写Replicat 的配置比 Extract 多一个环节要先定义 trail 的来源。如果源端用了 Data Pump目标端的 Replicat 直接读传过来的 trail如果没用 Data PumpReplicat 通过网络直接读源端的 trail。先建 Replicat 参数文件dirprm\rep1.prmREPLICAT rep1 SETENV (NLS_LANG AMERICAN_AMERICA.AL32UTF8) USERIDALIAS ogg_tgt DOMAIN OracleGoldenGate ASSUMETARGETDEFS DISCARDFILE /u01/ogg/dirrpt/rep1.dsc, APPEND, MEGABYTES 100 MAP hr.employees, TARGET hr.employees; MAP hr.departments, TARGET hr.departments;ASSUMETARGETDEFS表示源表和目标表结构完全一致不用额外的定义文件。如果结构不一致得用SOURCEDEFS指定定义文件。DISCARDFILE是丢弃记录的文件应用失败的记录会写到这里排查问题时必看。在 ggsci 里注册并启动GGSCI dblogin useridalias ogg_tgt DOMAIN OracleGoldenGate GGSCI add replicat rep1, exttrail /u01/ogg/dirdat/lt GGSCI start replicat rep1 GGSCI info replicat rep1add replicat rep1, exttrail /u01/ogg/dirdat/lt里的路径要和源端 trail 的路径对应。如果用了 Data Pump这里读的是目标端本地路径如果没用路径要写成源端的路径并且 Replicat 要能通过网络访问。4.3 目标端字符集和大小写敏感的处理跨平台最容易出问题的就是这里。Windows 上 Oracle 默认对表名、字段名大小写不敏感Linux 上如果建库时用了大小写敏感的配置OGG 应用时可能报「表不存在」。处理办法是在 Replicat 参数里加SQLEXEC ALTER SESSION SET NLS_COMPLINGUISTIC SQLEXEC ALTER SESSION SET NLS_SORTBINARY_CI或者在 MAP 语句里显式指定大小写MAP hr.employees, TARGET hr.employees, COLMAP (USEDEFAULTS);字符集方面如果源库是 GBK、目标库是 UTF8Replicat 的SETENV NLS_LANG要设成目标库的字符集同时确认源端抽取时已经按源库字符集正确解析。两端字符集不一致时最稳的做法是让源库和目标库都用 AL32UTF8从根上避免转换问题。注意Replicat 的DISCARDFILE一定要配应用失败的记录全在里面没有这个文件排查问题基本靠猜。5. 跨平台同步的避坑清单五个真实翻车现场5.1 坑一中文乱码抽取进程日志里全是问号现象同步过去的表里中文变成???或者乱码Extract 的 report 里能看到字符集相关的警告。原因源库是 ZHS16GBK但 Extract 参数里SETENV NLS_LANG写成了AL32UTF8或者根本没写用了系统默认。OGG 按错误的字符集解析 redo中文就废了。解决查源库真实字符集把SETENV NLS_LANG改成AMERICAN_AMERICA.ZHS16GBK重启抽取进程并且从begin指定的时间点重新抽取。已经抽错的 trail 要删掉重来不能接着用。5.2 坑二Replicat 报 OGG-01161列数不匹配现象Replicat 启动后报OGG-01161 Bad column index或者Column count mismatch。原因源表和目标表的列数或列顺序不一致。跨平台迁移时目标表可能是新建的字段顺序和源表不同或者少了某个字段。解决用MAP语句的COLMAP显式指定列映射MAP hr.employees, TARGET hr.employees, COLMAP (USEDEFAULTS, emp_name name, dept_id deptno);或者用SOURCEDEFS指定源表定义文件让 OGG 按定义文件解析。最彻底的办法是让目标表结构和源表完全一致。5.3 坑三Manager 起不来端口被占用现象start manager报OGG-01019 Cannot bind to port 7809。原因7809 端口被别的进程占了或者 Windows 防火墙拦了。解决Windows 上用netstat -ano | findstr 7809找到占用进程要么杀掉要么改 OGG 的端口。Linux 上用ss -tlnp | grep 7809。改端口的话mgr.prm里的PORT和DYNAMICPORTLIST都要改并且确认防火墙放行新端口。5.4 坑四trail 文件不增长抽取进程假死现象Extract 状态显示 running但 trail 文件大小不变目标端没有新数据。原因源库长时间没有 DML 操作或者抽取进程的TRANLOGOPTIONS配置有问题读不到新的 redo。也可能是源库的归档日志路径变了抽取进程找不到。解决先确认源库有没有新事务手动 insert 一条测试。如果确实有事务但抽取不动看 Extract 的 report检查TRANLOGOPTIONS里的归档路径配置。必要时加TRANLOGOPTIONS ALTARCHIVELOGDEST指定归档路径。5.5 坑五Linux 目标端权限不足Replicat 无法写 trail现象Replicat 报OGG-01028 Cannot open trail file或者Permission denied。原因OGG 在 Linux 上是以某个操作系统用户跑的这个用户对dirdat目录没有写权限或者对 Oracle 的库文件没有读权限。解决确认 OGG 进程的运行用户给dirdat、dirrpt、dirchk目录赋权chown -R oracle:oinstall /u01/ogg chmod -R 775 /u01/ogg同时确认LD_LIBRARY_PATH包含了 Oracle 的 lib 目录否则 Replicat 启动时加载库就失败了。6. 同步链路的验证与延迟排查技巧6.1 怎么确认数据真的同步过去了装完、配完、进程都 running不代表数据真的在同步。我一般用三步验证。第一步在源库插一条测试数据INSERT INTO hr.employees (employee_id, name, deptno) VALUES (9999, 测试同步, 10); COMMIT;第二步在目标库查SELECT * FROM hr.employees WHERE employee_id 9999;能查到说明链路通了。查不到先看 Replicat 的DISCARDFILE再看 Extract 的 report。第三步看统计信息。在 ggsci 里GGSCI stats extract ext1 GGSCI stats replicat rep1stats会显示抽取和应用的记录数、DML 操作数。如果 Extract 的Total inserts在涨但 Replicat 的对应统计不涨说明 trail 传输环节有问题。6.2 延迟排查Lag 到底卡在哪一段OGG 的延迟分三段抽取延迟、传输延迟、应用延迟。排查时要分段定位。抽取延迟看info extract ext1里的Lag at Chkpt。如果这个值持续增长说明 Extract 读日志的速度跟不上源库产生日志的速度。常见原因是源库 DML 太频繁或者 Extract 的TRANLOGOPTIONS配置不够优化。传输延迟看 trail 文件的生成速度和目标端的消费速度。如果源端 trail 文件快速堆积目标端 Replicat 消费慢说明网络或者目标库应用有问题。应用延迟看info replicat rep1里的Lag at Chkpt。如果 Replicat 延迟高常见原因是目标库有触发器、索引太多、或者 Replicat 的BATCHSQL没开。可以加BATCHSQL GROUPTRANSOPS 1000BATCHSQL让 Replicat 批量应用 SQLGROUPTRANSOPS控制每批的事务数能显著提升应用速度。6.3 一个我常用的延迟监控脚本在 Linux 目标端写个简单的监控脚本定时抓取 Replicat 的延迟#!/bin/bash # ogg_lag_check.sh - 检查 Replicat 延迟 OGG_HOME/u01/ogg cd $OGG_HOME ./ggsci EOF info replicat rep1 EOF把输出重定向到日志文件配合 crontab 每 5 分钟跑一次延迟异常时能第一时间发现。更完善的做法是解析info replicat的输出提取Lag at Chkpt的值超过阈值就告警。6.4 跨平台同步值不值得做我的判断最后说点实在的。Windows 到 Linux 的 OGG 同步技术上完全可行但维护成本比同平台同步高。字符集、大小写、时区这三个问题会反复出现每次源库或目标库有变更都要重新确认。如果你的团队没有专职的 OGG 运维建议优先考虑把源库也迁到 Linux或者用 Data Pump 做准实时而不是 OGG 做实时。如果确实要做我的习惯是上线前把字符集、时区、表结构对齐这三件事写成检查清单每次变更都过一遍trail 文件的清理策略一定要配我见过太多因为 trail 写满磁盘导致源库挂掉的案例Replicat 的DISCARDFILE和 Extract 的 report 要定期看别等出事了才翻日志。这套东西不复杂但细节多耐心比技术更重要。希望帮到你。本文还有配套的精品资源点击获取

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号