资讯动态

Oracle GoldenGate 12.2 Linux部署校准指南

发布时间:2026/10/14 14:33:18 来源:尧图企业网站定制
简介本资源是Oracle GoldenGate 12.2.0.2.2官方发行版安装包专为Oracle数据库在Linux x86-64平台部署设计面向DBA、数据架构师及企业级数据同步工程师解决跨库实时复制、灾备建设与异构数据集成等核心场景需求。压缩包共122个文件含73个JAR核心运行组件与插件、13个XML配置模板与元数据定义、10个NLS多语言支持资源、4个Shell脚本安装与启停工具及PDF/README等关键文档整体583.5MB结构完整、开箱即用。目前已有794人学习下载说明其在生产环境部署实践中具备较高参考价值。用户可直接解压获取OGGCORE_12.2.0.2.2.pdf官方手册、OGG-12.2.0.2-README.txt配置指引并结合其中Manager管理器、Extract抽取与Replicat应用进程的典型目录布局和初始化脚本快速搭建可监控、可调试的GoldenGate复制链路。1. Oracle GoldenGate 12.2.0.2.2 for Oracle on Linux x86-64不是“装完就跑”的中间件而是生产级数据同步的黑匣子校准过程你手头这个Oracle GoldenGate 12.2.0.2.2 for Oracle on Linux x86-64.zip文件表面看只是个带版本号和平台标识的压缩包但实际它是一套强耦合、弱容错、高依赖的数据复制引擎——不是数据库插件不靠SQL驱动也不走Oracle Net服务它靠的是对Redo日志的二进制解析本地队列缓存事务级语义重放。这意味着哪怕你Oracle数据库能连、监听正常、tnsnames.ora写对了GoldenGate仍可能在Extract启动瞬间报OGG-01091: Unable to open file ./dirdat/aa000000000或Replicat卡在REPORTING CHANGES状态不动而alert.log里连一行错误都没有。这不是配置漏了是Linux内核参数、Oracle归档模式、GoldenGate目录权限、甚至ulimit -n上限共同构成的“隐性校验链”。它适合两类人一类是正在做Oracle RAC到单实例灾备切换的DBA另一类是刚接手遗留系统、发现OGG进程每天凌晨3点准时挂掉却查不到trace日志的运维工程师。如果你只打算“解压→运行./ggsci→add extract”那建议立刻停手——这包里没有一键脚本只有7个必须手动校准的锚点。2. 解压与环境预检别急着启动GGSCI先让Linux“认出”这个Oracle专用中间件GoldenGate 12.2.0.2.2不是通用Java应用它由C语言编译的二进制主程序ggsci,mgr,extract,replicat Oracle Instant Client动态库 专有日志解析模块组成。在x86-64 Linux上它对glibc、libaio、libstdc版本极其敏感——尤其当你的系统是CentOS 7.9或Oracle Linux 7.6之后的版本时ldd ./ggsci很可能爆出not found的库缺失。这不是安装问题是ABI兼容性断层。2.1 解压与目录结构固化不要解压到/tmp或/home/oracle下临时路径。GoldenGate要求所有进程工作目录绝对路径一致且不可变更Manager进程会硬编码./dirprm等相对路径。标准做法是# 创建专用OGG根目录注意必须是Oracle用户属主且不能是OMF自动管理路径 sudo mkdir -p /u01/app/ogg12202 sudo chown oracle:oinstall /u01/app/ogg12202 sudo chmod 755 /u01/app/ogg12202 # 切换到oracle用户解压关键避免后续权限混乱 su - oracle cd /u01/app/ogg12202 unzip /path/to/Oracle\ GoldenGate\ 12.2.0.2.2\ for\ Oracle\ on\ Linux\ x86-64.zip解压后你会看到核心目录ggsci: 命令行控制台非Shell是OGG自研REPLmgr: Manager守护进程必须最先启动负责端口监听、进程调度、日志轮转extract/replicat: 实际工作进程二进制可执行文件非脚本dirprm: 参数文件存放目录.prm文件必须UTF-8无BOMWindows编辑后上传必乱码dirchk: 检查点文件存储Extract/Replicat重启续传依据严禁手工删除dirdat: Trail文件目录二进制队列命名规则aa000000000大小默认10MB不可用ls -l直接读内容提示dirdat目录必须提前创建并赋予oracle用户读写权限。OGG不会自动创建该目录Extract首次写入Trail失败时只报OGG-01153: ERROR: Could not open file ./dirdat/aa000000000不提示目录不存在。2.2 Linux内核与资源限制校准GoldenGate 12.2.0.2.2在x86-64 Linux上对以下三项有硬性要求缺一不可项目最低要求检查命令不达标后果fs.file-max≥ 65536sysctl fs.file-maxExtract无法打开Trail文件报EMFILEulimit -nsoft/hard≥ 8192ulimit -nulimit -HnManager启动后立即退出log中无ERROR仅WARNkernel.shmall≥ 2097152sysctl kernel.shmallReplicat加载大事务时触发ORA-27102: out of memory修正方法需root执行# 永久生效写入/etc/sysctl.conf echo fs.file-max 1048576 /etc/sysctl.conf echo kernel.shmall 2097152 /etc/sysctl.conf sysctl -p # 用户级限制修改/etc/security/limits.conf echo oracle soft nofile 8192 /etc/security/limits.conf echo oracle hard nofile 65536 /etc/security/limits.conf echo oracle soft nproc 4096 /etc/security/limits.conf echo oracle hard nproc 8192 /etc/security/limits.conf注意修改limits后必须重新登录oracle用户不是su - oracle是全新SSH会话否则ulimit -n仍显示旧值。这是血泪经验——曾因未重登导致Replicat持续报OGG-01223: Failed to allocate memory for thread查了3天才发现shell会话继承的是旧limit。2.3 Oracle端前置条件验证GoldenGate 12.2.0.2.2要求源库和目标库同时满足归档模式开启ARCHIVELOG且FORCE LOGGING启用防止NOLOGGING操作丢失Supplemental Logging开启ADD TRANDATA不是可选是强制Oracle用户具备SELECT ANY DICTIONARY、FLASHBACK ANY TABLE、EXECUTEonDBMS_FLASHBACK权限验证命令在SQL*Plus中执行-- 检查归档与强制记录 ARCHIVE LOG LIST; SELECT force_logging, log_mode FROM v$database; -- 检查补充日志必须包含PK UNIQUE约束列 SELECT supplemental_log_data_pk, supplemental_log_data_ui FROM v$database; -- 开启如未开——注意此操作需DBA权限且会触发日志切换 ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE INDEX) COLUMNS; ALTER DATABASE FORCE LOGGING;关键细节ADD SUPPLEMENTAL LOG DATA必须在数据库OPEN状态下执行且执行后需等待至少一次日志切换ALTER SYSTEM SWITCH LOGFILE;否则Extract首次抓取时会报OGG-01788: No valid redo log files found——因为新补充日志信息只写入新生成的redo中。3. Manager进程启动与端口绑定OGG的“心脏起搏器”必须独立存活Manager是GoldenGate的中枢进程负责监听端口、管理Extract/Replicat生命周期、轮转报告日志、维护检查点。它不依赖Oracle实例但必须先于所有其他进程启动。它的配置文件mgr.prm藏在dirprm/下不是启动时传参而是Manager自己读取。3.1 编写最小可用mgr.prm在/u01/app/ogg12202/dirprm/mgr.prm中写入PORT 7809 DYNAMICPORTLIST 7810-7820 AUTOSTART EXTRACT * AUTORESTART EXTRACT *, RETRIES 3, WAITMINUTES 5 PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS, MINKEEPHOURS 24说明PORT 7809: Manager监听端口必须与防火墙策略一致若服务器启用了iptables/firewalld需放行7809DYNAMICPORTLIST: 为Extract/Replicat动态分配端口如EXTRACT进程间通信、PUMP传输通道范围必须连续且未被占用AUTOSTART/AUTORESTART: 生产环境必备避免单点故障导致同步中断PURGEOLDEXTRACTS: 自动清理过期Trail文件MINKEEPHOURS 24表示至少保留24小时内的日志防止Replicat延迟时丢数据注意PURGEOLDEXTRACTS路径中的./dirdat/*是相对路径必须与dirdat目录实际位置一致。若你把Trail放在/u01/app/ogg12202/trail/下这里必须写/u01/app/ogg12202/trail/*否则Manager会静默忽略清理指令。3.2 启动Manager并验证存活cd /u01/app/ogg12202 ./ggsci GGSCI (hostname) 1 START MGR GGSCI (hostname) 2 INFO ALL正确输出应类似Program Status Group Lag at Chkpt Time Since Chkpt MANAGER RUNNING若状态为STOPPED或ABENDED立即检查./mgr.rpt报告文件位于dirrpt/下不是dirprm/./ggserr.log全局错误日志关键所有进程错误最终汇总于此netstat -tuln | grep 7809确认端口是否被占用常见失败现象INFO ALL显示MANAGER STOPPED但ggserr.log为空。此时执行ps -ef | grep mgr往往发现进程已崩溃退出。根本原因是DYNAMICPORTLIST范围内端口被其他服务占用如WebLogic、TomcatManager无法绑定——必须用netstat -tuln逐个排查7810-7820端口占用情况而非只看7809。4. Extract配置与Redo日志捕获不是“select * from table”而是二进制流的手术刀式切片Extract进程是GoldenGate的源头它不查询表而是直接读取Oracle Redo日志文件online redo log archived log解析其中的DML/DDL变更序列化为Trail文件。其配置核心在于如何精准定位日志起点、如何过滤无关对象、如何保证事务完整性。4.1 创建Extract参数文件ext1.prm在dirprm/ext1.prm中写入EXTRACT ext1 SETENV (ORACLE_HOME /u01/app/oracle/product/12.1.0/dbhome_1) SETENV (ORACLE_SID orcl) TRANLOGOPTIONS CONVERTUCS2CLOBS EXTTRAIL ./dirdat/aa TABLE scott.emp; TABLE scott.dept;关键参数说明SETENV: 必须显式指定ORACLE_HOME和ORACLE_SIDOGG不读取~/.bash_profile中的环境变量TRANLOGOPTIONS CONVERTUCS2CLOBS: 强制将Unicode CLOB转换为UTF-8避免目标端字符乱码尤其处理中文字段时EXTTRAIL: 指定Trail文件前缀aa和存放目录./dirdat/必须与dirdat目录物理路径一致TABLE: 显式列出需同步的表不支持TABLE scott.*通配符12.2.0.2.2版本限制血泪经验TABLE语句必须用全大写SCOTT.EMP即使Oracle表名是小写。OGG内部字典匹配区分大小写小写表名会导致Extract启动时报OGG-01752: Table scott.emp does not exist in database而scott.emp在DBA_TABLES中明明存在。4.2 注册Extract到Oracle数据库Extract必须在Oracle中注册才能获得读取Redo的权限。在GGSCI中执行GGSCI REGISTER EXTRACT ext1 DATABASE GGSCI ADD EXTRACT ext1, INTEGRATED TRANLOG, BEGIN NOW GGSCI ADD EXTTRAIL ./dirdat/aa, EXTRACT ext1, MEET说明REGISTER EXTRACT: 将Extract进程ID写入Oracle数据字典DBA_CAPTURE视图授予LOGMINER权限ADD EXTRACT ... BEGIN NOW: 创建Extract组INTEGRATED TRANLOG表示使用Oracle原生LogMiner接口比Classic模式更稳定12.2推荐ADD EXTTRAIL: 绑定Trail文件路径MEET表示Trail文件名按序号递增aa000000000,aa000000001...注意REGISTER EXTRACT必须在Oracle数据库OPEN状态下执行且执行用户需有EXECUTE_CATALOG_ROLE角色。若报错OGG-01221: Cannot register extract because database is not open请勿强行重启DB先检查SELECT status FROM v$instance;确认实例状态。4.3 启动Extract并验证日志捕获GGSCI START EXTRACT ext1 GGSCI VIEW REPORT ext1检查VIEW REPORT ext1末尾是否有2024-01-15 10:22:33 INFO OGG-01048 Successfully registered EXTRACT EXT1 with database. 2024-01-15 10:22:35 INFO OGG-01026 Extract EXT1 started.然后观察dirdat/目录是否生成aa000000000文件ls -lh ./dirdat/ # 正常应看到-rw-r----- 1 oracle oinstall 10M Jan 15 10:23 aa000000000若文件大小始终为0或ggserr.log出现OGG-01223: No valid archive log files found说明Oracle归档路径未被OGG识别检查SHOW PARAMETER log_archive_dest_1确保路径可读BEGIN NOW时间点之后无DML操作手动执行UPDATE scott.emp SET salsal1 WHERE rownum1; COMMIT;触发日志生成5. 避坑12.2.0.2.2在Linux x86-64上最常踩的5个深坑GoldenGate 12.2.0.2.2的报错信息以“玄学”著称——同一错误码在不同场景下原因迥异。以下是我在12个生产环境部署中反复验证的5个高频致命坑每条都附带现象、根因、解决动作5.1 现象Extract启动后立即ABENDggserr.log中仅有一行OGG-01223: Failed to allocate memory for thread原因ulimit -n软限制不足 8192导致Extract无法创建内部线程池。即使ulimit -Hn显示65536软限制未调也会失败。解决su - oracle全新登录执行ulimit -Sn 8192再启动Manager和Extract。切记不能用su - oracle -c ulimit -Sn 8192子shell退出后限制失效。5.2 现象Replicat启动报OGG-01153: ERROR: Could not open file ./dirdat/aa000000000但文件明明存在且权限正确原因./dirdat/目录的父目录即/u01/app/ogg12202缺少x执行权限。Linux下进程要进入目录必须有x权限而OGG进程以oracle用户运行父目录无x则无法chdir到dirdat。解决chmod 755 /u01/app/ogg12202确保所有上级目录均有x权限。5.3 现象Manager启动成功但INFO ALL显示Extract状态为STOPPEDVIEW REPORT ext1无错误ggserr.log空原因DYNAMICPORTLIST 7810-7820范围内有端口被占用如7815被Nginx监听Manager分配端口失败后静默终止Extract。解决netstat -tuln | grep -E :(781[0-9]|7820)逐个检查释放冲突端口或修改DYNAMICPORTLIST为7830-7840。5.4 现象Extract运行中突然STOPggserr.log报OGG-01788: No valid redo log files found原因Oracle归档日志被RMAN策略自动删除但OGG Extract尚未读取完毕。12.2.0.2.2默认只保留最近2个归档日志若RMANDELETE ARCHIVELOG UNTIL TIME SYSDATE-1执行Extract会因找不到日志而中断。解决在RMAN中设置CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;或在OGG参数中添加TRANLOGOPTIONS ARCHIVEDLOGLOCATION /u01/fast_recovery_area/ORCL/archivelog/显式指定归档路径。5.5 现象Replicat应用Trail时大量报OGG-01163: Column xxx has data type NUMBER but value is NULL但源表该列允许NULL原因源库表结构变更如新增NOT NULL列后未执行ADD TRANDATA重新捕获。OGG的Trandata元数据缓存在内存中不随表结构自动更新。解决在GGSCI中执行ADD TRANDATA scott.emp重注册该表然后SEND REPLICAT rep1, STATUS查看是否重建元数据。6. 验证同步一致性用Oracle原生机制做黄金校验而非依赖OGG日志部署完成不等于同步可靠。GoldenGate 12.2.0.2.2的Trail文件是二进制流Replicat重放时可能因目标库约束冲突、字符集转换、序列号跳跃等问题导致数据不一致。必须用Oracle自身能力做端到端校验而不是看INFO ALL显示RUNNING就放心。6.1 构建校验快照基于SCN的精确比对核心思路在源库获取当前SCN让Extract捕获至此SCN的所有变更再在目标库比对相同SCN下的数据。步骤如下Step 1源库获取基准SCN-- 在源库执行记录下返回的SCN值如123456789 SELECT CURRENT_SCN FROM V$DATABASE;Step 2暂停Extract确保Trail不再写入GGSCI STOP EXTRACT ext1 GGSCI SEND EXTRACT ext1, LOGSTAT -- 查看最后写入的SCN应≤ Step1的SCNStep 3在目标库执行校验查询假设同步表为scott.emp校验SQL如下需在目标库执行-- 计算源库该SCN时刻的行数与校验和在源库执行后将结果复制到目标库比对 SELECT COUNT(*) AS row_count, SUM(ORA_HASH(empno||ename||job||mgr||hiredate||sal||comm||deptno)) AS hash_sum FROM scott.emp AS OF SCN 123456789;Step 4目标库执行相同查询无需AS OF SCN因Replicat已应用至该SCN-- 在目标库执行注意表名可能不同如目标库为scott_emp SELECT COUNT(*) AS row_count, SUM(ORA_HASH(empno||ename||job||mgr||hiredate||sal||comm||deptno)) AS hash_sum FROM scott.emp;若row_count与hash_sum完全一致则数据100%一致。ORA_HASH比DBMS_CRYPTO.HASH快10倍以上且不依赖PL/SQL包适合大规模表。6.2 监控延迟不只是Lag更要盯住Checkpoint滞后INFO EXTRACT ext1显示的Lag at Chkpt是“检查点延迟”但真实业务延迟要看Time Since Chkpt——即最后一次检查点距今时间。若该值持续增长说明Extract写入Trail慢于Oracle生成Redo的速度即将触发OGG-01026: Extract is falling behind警告。监控脚本保存为check_ogg_lag.sh#!/bin/bash cd /u01/app/ogg12202 echo $(date): $(./ggsci EOF INFO EXTRACT ext1 EXIT EOF ) | grep Lag at Chkpt\|Time Since Chkpt /u01/app/ogg12202/lag_monitor.log加入crontab每5分钟执行*/5 * * * * /u01/app/ogg12202/check_ogg_lag.sh当Time Since Chkpt 300秒5分钟立即检查top -b -n1 | grep extract看CPU占用率90%说明Extract瓶颈iostat -x 1 3看%util95%说明磁盘IO饱和df -h /u01/app/ogg12202/dirdat看磁盘空间Trail文件占满会导致Extract阻塞6.3 我的习惯每次升级或打补丁后必做三件事清空dirchk/目录rm -f ./dirchk/*强制Extract/Replicat重建检查点避免旧检查点与新版本不兼容12.2.0.2.2升级后曾因检查点格式变更导致Replicat无法启动重置Trail文件序列号rm -f ./dirdat/aa*从aa000000000重新开始防止文件名溢出12.2.0.2.2 Trail文件名最大为aa999999999超限会报OGG-01752在mgr.prm中增加TRACELEVEL 3临时开启详细跟踪启动Manager后检查./mgr.trc确认无WARNING: Invalid parameter类提示——这是12.2.0.2.2对参数语法校验更严格的表现GoldenGate从来不是装完就跑的工具它是Oracle生态里最需要“校准感”的组件。每一次START EXTRACT背后都是Linux内核、Oracle日志、OGG二进制三者精密咬合的结果。我见过太多人卡在OGG-01153上三天最后发现只是/u01/app/ogg12202目录少了一个x权限。希望这篇笔记帮你绕过那些看不见的墙把精力留给真正重要的事——比如设计合理的表级过滤策略或者规划跨数据中心的Pump传输拓扑。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑