
1. OGG经典模式动态扩展同步表的核心场景在真实的数据库运维中我经常遇到这样的需求业务系统7×24小时运行但突然发现某个表的数据出现不一致或者需要新增同步的表。这时候传统的停机维护方案根本行不通而OGG的经典模式恰好能解决这个痛点。动态扩展同步表的核心价值在于业务零中断。想象一下银行的交易系统或者电商的订单系统如果因为数据同步问题就要停机维护那损失可就大了。OGG的经典模式允许我们在不停止服务的情况下通过SCN号精准控制数据同步范围实现手术刀式的数据修复。这里有个实际案例去年我们有个客户的核心业务表因为网络闪断导致部分数据丢失当时就是通过OGG的动态同步功能在业务高峰期间完成了数据修复。整个过程用户完全无感知业务监控曲线平稳得像什么都没发生过一样。2. 完整操作流程拆解2.1 准备工作与环境检查在开始操作前有几个关键点必须确认确保源端和目标端的OGG版本兼容检查磁盘空间是否足够存放临时导出文件确认网络带宽能够支持数据快速传输准备好回滚方案这点特别重要我吃过亏建议先用这个命令检查OGG进程状态ggsci info all2.2 关键步骤详解第一步暂停相关进程不是简单粗暴地stop all而是要有策略地暂停。我一般会先停应用进程(replicat)再停抽取进程(extract)这样可以避免数据积压。ggsci stop REPPROD ggsci stop EXTPROD第二步修改抽取进程参数这里有个细节很多人会忽略新增表的同时要记得加TRANDATA。我有次半夜处理故障就因为这个漏了结果白折腾两小时。ggsci edit param EXTPROD -- 在文件中添加 TABLE SCHEMA.TABLENAME; -- 保存后执行 ggsci ADD TRANDATA SCHEMA.TABLENAME第三步获取SCN号这个步骤决定了数据同步的起点一定要确保准确。我习惯多查几次取最大值SQL select dbms_flashback.get_system_change_number from dual;2.3 数据导出与导入技巧使用expdp导出时这几个参数组合实测很稳expdp user/pwd directoryDATA_PUMP_DIR dumpfileexport.dmp logfileexport.log tablesSCHEMA.TABLENAME contentDATA_ONLY flashback_scn123456789目标端导入前一定要先禁用约束和触发器。我有次导入失败就是因为外键约束没处理-- 禁用约束 ALTER TABLE TABLENAME DISABLE CONSTRAINT constraint_name; -- 导入后记得重新启用3. 参数配置的魔鬼细节3.1 FILTER参数的版本陷阱OGG 11g和12c在FILTER语法上有重大区别11g必须用双引号12c开始要用单引号配置错误会导致这样的报错2024-12-14 15:34:05 INFO OGG-01298 Column function diagnostic message: could not find column transaction.正确的写法应该是MAP SCHEMA.TABLENAME, TARGET SCHEMA.TABLENAME, FILTER (GETENV (TRANSACTION, CSN) 123456789);3.2 表名大小写处理如果表名在创建时用了引号比如TableName在OGG配置中必须保持完全一致。我有次排查了三小时才发现是大小写问题。4. 实战中的避坑指南坑一SCN号过期SCN号保留时间是有限的如果操作拖延太久可能会遇到ORA-08181: specified number is not a valid system change number解决方案是重新获取SCN号或者调整UNDO_RETENTION参数。坑二长事务处理对于大表同步可能会遇到长事务导致的性能问题。这时候可以分批导出导入调整OGG的TRANLOGOPTIONS参数在业务低峰期操作坑三字符集问题跨平台同步时记得检查NLS_LANG设置。曾经有个项目因为字符集不一致导致中文变问号血的教训。5. 监控与验证方案同步完成后不能简单看延迟为0就完事了。我通常会做三层验证记录数比对-- 源端 SELECT COUNT(*) FROM TABLENAME; -- 目标端 SELECT COUNT(*) FROM TABLENAME;关键字段校验SELECT SUM(CRC32(TO_CHAR(COL1||COL2||COL3))) FROM TABLENAME;业务验证 找业务人员确认关键功能是否正常这是最后的保险。6. 性能优化建议对于TB级大表的同步这几个技巧很管用使用PARALLEL参数加速expdp/impdp调整OGG的BATCHSQL参数临时增大PGA内存考虑使用OGG的并行复制功能expdp ... parallel4 impdp ... parallel47. 自动化脚本方案对于经常需要同步的环境我开发了一套自动化脚本主要功能包括自动获取SCN号校验表结构一致性生成OGG参数模板监控同步进度核心代码片段#!/bin/bash # 获取SCN号 SCN$(sqlplus -S /nolog EOF connect user/pwd set heading off select dbms_flashback.get_system_change_number from dual; exit; EOF)8. 特殊场景处理DDL同步问题如果需要同步表结构变更要额外配置DDL参数。但要注意不是所有DDL都适合在线同步比如字段重命名就可能引发问题。LOB字段处理对于包含LOB字段的表expdp需要加特殊参数expdp ... includeLOB_STORAGE分区表同步分区表要特别注意分区策略是否一致我曾经遇到过目标端分区缺失导致数据丢失的情况。