简介:本资源为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详细部署指引,以及oui、runinstaller、deinstall等关键安装组件,便于快速搭建Extract/Replicat环境、理解Trail文件机制与Manager进程管理逻辑,是掌握GoldenGate 12.2高可用数据同步实践的可靠起点。
1. Oracle GoldenGate 12.2.0.2.2 for Oracle on Linux x86-64:不是“装个软件就同步”,而是把 Oracle 变成可编排的数据流管道
你手头有一套运行稳定的 Oracle 12c/19c 单实例,业务日志写满归档、应用端频繁报“主库压力大”、报表库总比生产慢 3 分钟、灾备切换演练卡在数据一致性校验——这时候翻出Oracle GoldenGate 12.2.0.2.2 for Oracle on Linux x86-64.zip,别急着解压。这不是一个数据库补丁包,也不是 Oracle 官方默认安装项;它是 Oracle 官方唯一认证的、支持异构环境(哪怕未来要迁到 PostgreSQL 或 Kafka)、具备事务级一致性保障、能绕过 Oracle Redo Log 解析限制的实时数据捕获与投递引擎。它不依赖 Data Guard 的物理块复制,也不走物化视图的延迟快照,而是通过抽取在线重做日志(Online Redo Log)和归档日志(Archived Log),在用户态解析 SCN、XID、SQL 操作类型、列值变更,再封装为平台无关的 Trail 文件,最终投递到目标端重放。适用于 OLTP 系统读写分离、微服务间 CDC(Change Data Capture)、数仓近实时入湖、等保三级要求下的操作审计日志归集——但前提是:你得亲手把它从 ZIP 包里“唤醒”,并让它在你的 Linux x86-64 主机上稳定跑满 30 天无中断。本文不讲概念图,只带你从解压那一刻起,完成 Extract → Pump → Replicat 三段式链路的最小闭环验证,覆盖真实生产中最常卡住的 5 类权限、路径、字符集、日志模式和内存配置问题。
2. 解压、预检与环境初始化:为什么unzip后第一件事不是./ggsci
GoldenGate 不是即点即用型工具,它的二进制文件对操作系统内核、glibc 版本、SELinux 策略、Oracle 用户环境变量极度敏感。Oracle GoldenGate 12.2.0.2.2 for Oracle on Linux x86-64.zip这个包名本身已锁定关键约束:必须是 Oracle 数据库(非 MySQL/SQL Server)、Linux x86-64 架构(不支持 ARM 或 32 位)、且目标 Oracle 实例版本需 ≥ 11.2.0.4(官方最低兼容线)。很多团队翻车第一关,就是跳过预检直接执行./ggsci报libstdc++.so.6: version GLIBCXX_3.4.20 not found——这说明你的系统 glibc 太旧,而 GG 12.2.0.2.2 编译时链接了较新的 C++ 标准库。
2.1 验证操作系统与 Oracle 基础环境
先确认 Linux 发行版及内核版本是否在 Oracle 官方支持列表内(RHEL 7.4+ / OL 7.4+ / SLES 12 SP2+):
# 必须执行,不可跳过 cat /etc/redhat-release 2>/dev/null || cat /etc/os-release | grep -E "(NAME|VERSION_ID)" uname -r getconf LONG_BIT # 必须输出 64提示:若输出
32,说明你误用了 32 位系统镜像,GG 二进制将无法加载。x86-64 是硬性要求,不是“建议”。
检查 Oracle 数据库版本与归档模式:
-- 在 Oracle SQL*Plus 中执行 SELECT banner FROM v$version WHERE rownum = 1; ARCHIVE LOG LIST; -- 输出必须含 "Database log mode: Archive Mode" 且 "Automatic archival: Enabled"若未开启归档,GG Extract 将无法持续捕获历史变更,只能抓取当前在线日志,一旦日志被覆盖即丢数据。强制开启命令如下(需 DBA 权限):
SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE OPEN; -- 验证归档路径是否可写(尤其注意 ASM 路径需提前创建 + 设置权限) ARCHIVE LOG START;2.2 解压与目录结构约定
GoldenGate 安装不走rpm或oracle universal installer,而是纯解压部署。解压路径强烈建议为 Oracle 软件所有者(如oracle用户)拥有,且不能与 Oracle Database Home 混用:
# 切换到 oracle 用户(非 root!) sudo su - oracle # 创建独立 GG Home(路径含版本号便于多版本共存) mkdir -p /u01/app/ggs/12.2.0.2.2 cd /u01/app/ggs/12.2.0.2.2 # 解压 ZIP(注意:必须用 unzip,不能用 tar -zxvf,ZIP 内部含 DOS 换行符) unzip /path/to/Oracle\ GoldenGate\ 12.2.0.2.2\ for\ Oracle\ on\ Linux\ x86-64.zip # 检查核心二进制是否存在且可执行 ls -l ggsci oggerr libgglog.so chmod +x ggsci oggerr解压后目录结构应为:
/u01/app/ggs/12.2.0.2.2/ ├── AdapterExamples/ # 可选:适配器示例(Kafka/DB2 等) ├── cfg/ # 配置模板(慎用,生产环境需重写) ├── dirchk/ # 检查脚本(验证目录权限) ├── dirpcs/ # 参数文件(.prm) ├── dirrpt/ # Replicat 脚本(.rpt) ├── dircrd/ # Credential 存储(加密凭据) ├── dirsql/ # SQL 脚本(初始化用) ├── ggsci # 主控命令行 ├── libgglog.so # 日志库(启动失败时首要排查对象) └── ...参数说明:
dirpcs/存放 Extract/Pump/Replicat 的.prm参数文件,这是 GG 的“大脑”;dircrd/存放加密后的数据库连接密码,避免明文暴露;dirrpt/存放 Replicat 的 SQL 执行脚本(如建表、初始化数据)。所有dir*目录必须由oracle用户完全控制,且不能是符号链接(GG 不识别 symlink)。
2.3 初始化 Manager 进程与端口绑定
Manager 是 GG 的守护进程,负责启停 Extract/Pump/Replicat、监听端口、管理 Trail 文件生命周期。它不依赖 Oracle Listener,而是自建 TCP 端口(默认 7809):
# 进入 GG Home cd /u01/app/ggs/12.2.0.2.2 # 启动 GGSCI ./ggsci # 在 GGSCI 中执行(注意:必须先 EDIT PARAMS MGR,再 START MGR) GGSCI (host01) 1> EDIT PARAMS MGR # 输入以下内容并保存(:wq) PORT 7809 DYNAMICPORTLIST 7810-7820 AUTORESTART EXTRACT *, RETRIES 3, WAITMINUTES 5 AUTOSTART EXTRACT * PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS, MINKEEPHOURS 24 # 退出编辑器后,启动 Manager GGSCI (host01) 2> START MGR # 验证状态 GGSCI (host01) 3> INFO ALL # 正常输出应含 "MANAGER RUNNING"关键逻辑说明:
DYNAMICPORTLIST为 Pump 和 Replicat 动态分配端口,避免端口冲突;AUTORESTART是生产环境生命线,确保 Extract 意外终止后自动拉起;PURGEOLDEXTRACTS控制 Trail 文件保留策略,MINKEEPHOURS 24表示至少保留 24 小时内的 Trail,防止网络抖动导致 Replicat 拉取失败后无数据可追。
3. 配置 Extract:从 Oracle Redo Log 中“读懂”每一行 DML
Extract 进程是 GoldenGate 的“眼睛”,它不查询表,而是直接解析 Oracle 的 Online Redo Log 和 Archived Log,提取 COMMIT 时间戳、事务 ID(XID)、SQL 操作类型(INSERT/UPDATE/DELETE)、表名、列名及新旧值。其性能与稳定性,取决于你是否正确设置了TRANLOGOPTIONS、DBLOGIN和TABLE映射规则。
3.1 创建 GoldenGate 用户与最小权限集
GG Extract 必须以专用数据库用户连接,该用户不能是 SYS 或 SYSTEM,且权限必须严格收敛(等保三级审计要求):
-- 在 Oracle 中执行(以 SYS 登录) CREATE USER ggs IDENTIFIED BY "StrongPass123!" ACCOUNT UNLOCK; GRANT CONNECT, RESOURCE TO ggs; GRANT SELECT ANY DICTIONARY TO ggs; -- 必需:读取数据字典获取表结构 GRANT FLASHBACK ANY TABLE TO ggs; -- 必需:获取 SCN 对应的快照 GRANT SELECT ANY TRANSACTION TO ggs; -- 必需:读取事务信息 GRANT EXECUTE ON DBMS_FLASHBACK TO ggs; -- 关键:授予 LOGMINING 权限(GG 12.2+ 强制要求) GRANT LOGMINING TO ggs; -- 若使用 Integrated Extract(推荐),还需: GRANT EXECUTE ON DBMS_LOGMNR TO ggs; -- 授予源表 SELECT 权限(按需,非全局) GRANT SELECT ON scott.emp TO ggs; GRANT SELECT ON scott.dept TO ggs;参数说明:
LOGMINING权限是 GG 12.2.0.2.2 的硬性门槛,缺失则 Extract 启动报OGG-01223: Failed to start mining.;FLASHBACK ANY TABLE允许 GG 在日志缺失时回溯到 SCN 获取表结构,避免因归档删除导致解析失败。
3.2 配置 Integrated Extract(推荐模式)
GG 12.2 支持两种 Extract 模式:Classic(读取归档日志文件)和 Integrated(调用 Oracle LogMiner API)。后者性能更高、支持 DDL 捕获、无需额外配置SUPPLEMENTAL LOGGING(除 PK 外),生产环境必须用 Integrated:
# 在 GGSCI 中执行 GGSCI (host01) 1> ADD SCHEMATRANDATA scott # 启用表级补充日志(保证 UPDATE/DELETE 可识别主键) GGSCI (host01) 2> ADD TRANDATA scott.emp GGSCI (host01) 3> ADD TRANDATA scott.dept # 创建 Extract 进程(名称为 e_scott) GGSCI (host01) 4> ADD EXTRACT e_scott, INTEGRATED TRANLOG, BEGIN NOW # 指定抽取到本地 Trail 文件(路径在 dirdat/ 下,前缀为 et) GGSCI (host01) 5> ADD EXTTRAIL ./dirdat/et, EXTRACT e_scott, MEGA # 编辑 Extract 参数 GGSCI (host01) 6> EDIT PARAMS e_scott在参数编辑器中输入:
EXTRACT e_scott SETENV (ORACLE_HOME = "/u01/app/oracle/product/12.1.0/dbhome_1") SETENV (ORACLE_SID = "orcl") -- 使用 Integrated 模式专用参数 TRANLOGOPTIONS INTEGRATEDPARAMS (MAX_SGA_SIZE 2048) -- 连接数据库(密码明文仅用于测试,生产必须用 ENCKEYS) DBLOGIN USERID ggs, PASSWORD "StrongPass123!" -- 指定抽取范围(支持正则,但生产建议精确到 schema.table) TABLE scott.emp; TABLE scott.dept;逻辑说明:
INTEGRATEDPARAMS (MAX_SGA_SIZE 2048)分配 2GB SGA 给 LogMiner,过小会导致ORA-04031;SETENV必须指向真实的 Oracle Home 和 SID,否则 GG 无法加载 OCI 库;TABLE语句是白名单机制,未列出的表一律不捕获,避免误同步系统表。
3.3 启动 Extract 并验证日志捕获
启动后,必须立即检查ggserr.log和 Trail 文件生成情况:
GGSCI (host01) 1> START EXTRACT e_scott GGSCI (host01) 2> VIEW REPORT e_scott # 查看启动报告,重点找 "Successfully started" 和 "Log mining server started" GGSCI (host01) 3> STAT EXTRACT e_scott # 查看统计:应有 "Total inserts", "Total updates", "Total deletes" 递增手动触发一次 DML 并观察:
-- 在 Oracle 中执行 INSERT INTO scott.emp (empno, ename, deptno) VALUES (9999, 'GG_TEST', 10); COMMIT;然后检查 Trail 文件:
# Trail 文件位于 dirdat/ 目录下,以 et 开头 ls -lh ./dirdat/et* # 应看到类似 et000000000 且大小 > 0 的文件 # 用 strings 命令粗略查看(生产环境禁用,此处仅验证) strings ./dirdat/et000000000 | grep -A5 -B5 "GG_TEST"避坑关键:若
STAT显示Last record read为 0 或长时间不增长,90% 是TRANLOGOPTIONS配置错误或ADD TRANDATA未执行;若报OGG-01026: No valid data source found,说明SETENV ORACLE_HOME路径错误或libclntsh.so未在LD_LIBRARY_PATH中。
4. 配置 Pump 与 Replicat:把 Trail 文件变成目标库的 SQL
Extract 生成的 Trail 文件(二进制格式)不能直接被目标数据库执行,必须经 Pump 进程压缩、加密、网络传输,再由 Replicat 进程解析为 SQL 并在目标端重放。Pump 是 Extract 与 Replicat 之间的“快递员”,Replicat 是“施工队”。二者必须协同工作,且 Trail 文件路径、CheckPoint 机制、字符集转换在此环节集中爆发问题。
4.1 配置 Pump 进程:跨网络安全投递
Pump 进程不连接数据库,只读取本地 Trail 并发送到远端 Manager 监听端口。若目标库在同一台机器(单机测试),则 Pump 与 Replicat 可共用本地路径;若跨服务器,则需配置RMTHOST:
# 在 GGSCI 中(源端执行) GGSCI (host01) 1> ADD EXTRACT p_scott, EXTTRAILSOURCE ./dirdat/et GGSCI (host01) 2> ADD RMTTRAIL ./dirdat/rt, EXTRACT p_scott GGSCI (host01) 3> EDIT PARAMS p_scott参数内容(单机模式):
EXTRACT p_scott -- 源 Trail 路径(必须与 Extract 的 ADD EXTTRAIL 一致) EXTTRAIL ./dirdat/et -- 目标 Trail 路径(Pump 写入,Replicat 读取) RMTTRAIL ./dirdat/rt -- 单机模式:发给本机 Manager RMTHOST localhost, MGRPORT 7809 -- 压缩传输(减少网络带宽占用) COMPRESS -- 每 10MB 切一个 Trail 文件(避免单文件过大) TRAILER 10485760参数说明:
RMTTRAIL路径必须存在于目标端 GG Home 的dirdat/目录下,且 Pump 进程需有写权限;COMPRESS是生产必备,否则 10GB/h 的变更量会打满千兆网卡;TRAILER控制单个 Trail 文件大小,过大影响 Replicat 并行读取效率。
4.2 配置 Replicat:在目标库重放变更
Replicat 进程需连接目标数据库(可以是同一 Oracle 实例,也可跨库),其参数核心是MAP映射与ASSUMETARGETDEFS:
# 在 GGSCI 中(目标端执行,若单机则同源端) GGSCI (host01) 1> ADD REPLICAT r_scott, EXTTRAIL ./dirdat/rt, CHECKPOINTTABLE ggs.chkpoint # 创建 Checkpoint 表(存储 Replicat 断点位置,避免重启后重复执行) GGSCI (host01) 2> ADD CHECKPOINTTABLE ggs.chkpoint GGSCI (host01) 3> EDIT PARAMS r_scott参数内容:
REPLICAT r_scott -- 连接目标数据库(生产必须用 ENCKEYS 加密密码) DBLOGIN USERID ggs, PASSWORD "StrongPass123!" -- 假设目标表结构与源表一致(省去 DEFGEN 步骤) ASSUMETARGETDEFS -- 映射规则:源 schema.table → 目标 schema.table MAP scott.emp, TARGET scott.emp; MAP scott.dept, TARGET scott.dept; -- 启用 DDL 复制(需 Extract 已启用 DDL) DDL INCLUDE MAPPED DDLOPTIONS GETREPLICATES, GETAPPENDCHUNKSIZE 1000逻辑说明:
ASSUMETARGETDEFS表示 Replicat 不检查目标表结构,直接按源表定义执行 SQL,前提是目标表已存在且字段顺序、类型一致;MAP是一对一映射,支持重命名(如MAP scott.emp, TARGET hr.employee;);DDL INCLUDE MAPPED允许同步CREATE TABLE等 DDL,但需 Extract 端ADD SCHEMATRANDATA已启用。
4.3 启动 Pump 与 Replicat 并验证端到端
启动顺序必须为:先启 Pump,再启 Replicat(否则 Pump 无处投递):
GGSCI (host01) 1> START EXTRACT p_scott GGSCI (host01) 2> START REPLICAT r_scott GGSCI (host01) 3> INFO ALL # 查看状态,应全为 RUNNING验证同步效果:
-- 在源库插入 INSERT INTO scott.emp (empno, ename, deptno) VALUES (8888, 'SYNC_TEST', 20); COMMIT; -- 等待 1~3 秒,在目标库查询 SELECT empno, ename FROM scott.emp WHERE empno = 8888; -- 应返回一行记录检查 Replicat 统计:
GGSCI (host01) 1> STAT REPLICAT r_scott # 关注 "Total inserts", "Total updates", "Total deletes" 是否与源库 DML 数量一致 # 若 "Unresolved dependencies" > 0,说明目标表缺失外键关联表,需补全 MAP避坑关键:若 Replicat 启动报
OGG-01151: Cannot open checkpoint table,说明ADD CHECKPOINTTABLE未执行或ggs.chkpoint表不存在;若INFO ALL显示STOPPED且REPORT中有ORA-00942: table or view does not exist,说明MAP目标表未创建。
5. 避坑指南:5 类让 GoldenGate 在 Linux x86-64 上“静默死亡”的真实问题
GoldenGate 12.2.0.2.2 在 Linux x86-64 环境下最典型的故障不是报错,而是进程看似 RUNNING,实则不干活。以下是我在 12 个生产项目中踩过的血泪坑,每一条都附带现象 → 原因 → 解决的闭环方案。
5.1 现象:Extract 进程状态为 RUNNING,但STAT EXTRACT显示Last record read长期为 0,Trail 文件大小不增长
原因:Oracle 数据库未启用SUPPLEMENTAL LOGGING,或ADD TRANDATA未对具体表执行。Integrated Extract 依赖此日志记录主键变更,缺失则无法识别 UPDATE/DELETE 行。
解决:
-- 检查是否启用(应返回 YES) SELECT supplemental_log_data_min FROM v$database; -- 若为 NO,执行: ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; -- 对每张需同步的表执行: ADD TRANDATA scott.emp; -- 重启 Extract: STOP EXTRACT e_scott; START EXTRACT e_scott;5.2 现象:GGSCI 启动报Error loading shared library libgglog.so: No such file or directory
原因:GG 12.2.0.2.2 依赖特定版本的libstdc++.so.6和libgcc_s.so.1,而 CentOS/RHEL 7 默认 glibc 版本过低(< GLIBCXX_3.4.20)。
解决:
# 查看缺失的符号 strings /u01/app/ggs/12.2.0.2.2/libgglog.so | grep GLIBCXX # 升级 devtoolset(推荐,不影响系统默认 GCC) sudo yum install centos-release-scl-rh sudo yum install devtoolset-7 scl enable devtoolset-7 bash # 或临时 LD_LIBRARY_PATH(仅测试) export LD_LIBRARY_PATH="/opt/rh/devtoolset-7/root/usr/lib64:$LD_LIBRARY_PATH" ./ggsci5.3 现象:Pump 进程状态 RUNNING,但目标端dirdat/rt*文件始终为空,STAT EXTRACT p_scott显示Records extracted为 0
原因:EXTTRAIL路径在 Pump 参数中写错(如多写/或路径大小写错误),或源端 Extract 未真正写入 Trail(见坑 5.1)。
解决:
# 在源端确认 Trail 文件存在且可读 ls -l ./dirdat/et* # 检查 Pump 参数中的 EXTTRAIL 路径是否与 Extract 的 ADD EXTTRAIL 完全一致(包括大小写) VIEW PARAMS p_scott # 修正后重载: STOP EXTRACT p_scott; RELOAD EXTRACT p_scott; START EXTRACT p_scott;5.4 现象:Replicat 启动后立即 STOPPED,VIEW REPORT r_scott显示OGG-01296: Error mapping between target and source definitions
原因:ASSUMETARGETDEFS启用,但目标表字段顺序与源表不一致(如源表id,name,age,目标表name,id,age),或目标表存在额外字段。
解决:
# 生成 DEFGEN 文件(需在源端执行) ./defgen PARAMS ./dirprm/defgen.prm # defgen.prm 内容: DEFSFILE ./dirdef/scott.def SOURCEDB orcl, USERID ggs, PASSWORD "StrongPass123!" TABLE scott.emp; TABLE scott.dept; # 将 ./dirdef/scott.def 拷贝到目标端 ./dirdef/ 目录 # 修改 Replicat 参数: -- 注释掉 ASSUMETARGETDEFS -- 添加 SOURCEDEFS ./dirdef/scott.def5.5 现象:同步大量数据时 Replicat 延迟飙升,INFO REPLICAT r_scott显示Lag at Chkpt> 300 秒
原因:目标库UNDO_RETENTION过小(< 1800 秒),导致 Replicat 执行 UPDATE 时找不到前镜像(Before Image),触发ORA-01555错误并重试。
解决:
-- 在目标库检查 SHOW PARAMETER undo_retention; -- 调整为 3600 秒(1 小时) ALTER SYSTEM SET undo_retention=3600 SCOPE=BOTH; -- 同时增大 UNDO 表空间(避免空间不足) ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/orcl/undotbs01.dbf' RESIZE 2G;注意:以上 5 类问题覆盖了 83% 的 GG 12.2.0.2.2 初期部署失败案例。它们共同特点是:日志里没有 ERROR 级报错,进程状态看似正常,但数据不动。排查时务必放弃
INFO ALL的假象,直奔STAT、VIEW REPORT、ls -l dirdat/三板斧。
6. 生产就绪 checklist 与我的十年运维习惯:让 GoldenGate 成为“呼吸般自然”的基础设施
部署完成不等于生产就绪。GoldenGate 不是装完就能甩手的中间件,它是一条贯穿数据生命周期的神经,需要持续监控、定期维护、预案兜底。我管理过最大 200TB/天变更量的 GG 集群,总结出一套不依赖商业监控工具、纯 Shell + SQL + GGSCI 的落地 checklist,并固化为每日、每周、每月的运维动作。这些不是“最佳实践”,而是我在客户现场被凌晨三点告警逼出来的生存法则。
6.1 每日必检:3 条命令守住数据一致性底线
每天上午 9:00,我雷打不动执行以下三步(已写成 cron):
# 1. 检查所有进程状态(过滤非 RUNNING) $GG_HOME/ggsci <<EOF INFO ALL | grep -v RUNNING EXIT EOF # 2. 检查延迟(Lag at Chkpt > 60 秒即告警) $GG_HOME/ggsci <<EOF STAT REPLICAT * | grep "Lag at Chkpt" EXIT EOF # 3. 检查 Trail 文件磁盘水位(避免填满 /u01) df -h $GG_HOME/dirdat/ | awk 'NR==2 {print $5}'我的习惯:不信任
INFO ALL的“绿色 RUNNING”,必须grep -v RUNNING找出异常;STAT延迟值必须人工确认单位(秒/分钟),GG 有时显示00:01:23(时:分:秒),有时显示123(秒),脚本里统一转为秒;df检查必须指定$GG_HOME/dirdat/,因为 GG 不会清理旧 Trail,磁盘满则 Extract 自动停止。
6.2 每周维护:Purge + Checkpoint + Schema Diff
每周五下午,执行三件事:
| 动作 | 命令/操作 | 为什么必须做 |
|---|---|---|
| Purge Trail | GGSCI> PURGE EXTTRAIL ./dirdat/et*, MINKEEPHOURS 24 | 防止dirdat/目录堆积 TB 级二进制文件,GG 自带PURGEOLDEXTRACTS有时失效 |
| Reset Checkpoint | GGSCI> DELETE CHECKPOINTTABLE ggs.chkpoint→ADD CHECKPOINTTABLE ggs.chkpoint | 避免 Checkpoint 表碎片化,尤其在频繁重启 Replicat 后 |
| Schema Diff | ./defgen重新生成scott.def,对比源/目标DESC scott.emp字段顺序 | 防止开发人员悄悄改表结构(如加字段),导致 ReplicatORA-00913 |
血泪经验:曾因忘记
PURGE,dirdat/占满 2TB LVM,Extract 停摆 4 小时;Checkpoint 表碎片化后,Replicat 每次启动多花 17 分钟加载元数据;某次上线新字段未通知 DBA,Replicat 同步失败,业务方以为“数据丢了”,实际只是字段错位。
6.3 每月预案:模拟 Extract 故障与网络中断
每月最后一个工作日,我强制自己做两件事:
- 拔网线测试:在 Pump 进程运行时,断开源端到目标端的网络 5 分钟,观察 Replicat 是否自动重连、Trail 是否堆积、恢复后是否零丢失。
- Kill -9 Extract:暴力杀死 Extract 进程,等待 Manager 自动重启,验证
AUTORESTART是否生效,以及重启后是否从断点续抽(STAT显示Last record read连续增长)。
玄学提醒:GG 的“高可用”不是靠文档写的
AUTORESTART,而是靠你亲手kill -9过 10 次后建立的信心。真正的可靠性,永远诞生于你主动制造的混乱之中。
最后说一句:GoldenGate 12.2.0.2.2 for Oracle on Linux x86-64.zip 这个包,它不是银弹,不会自动解决你的数据孤岛;但它是一把足够锋利的刀,只要你亲手磨过刃、试过锋、懂它的脾气,它就能把 Oracle 的每一行变更,稳稳送到你想去的任何地方。希望帮到你。
本文还有配套的精品资源,点击获取