Oracle同步必须开启归档模式、FORCE LOGGING和全局supplemental log,并创建专用低权限用户;缺一即导致捕获失败,典型错误如OGG-01163、OGG-00446等均对应配置缺失。
Oracle同步软件依赖的附加日志必须开全,否则捕获失败
oracle同步工具(如ogg、dms、shareplex)依赖redo日志解析变更,但默认只记录数据块变化,不记录前镜像(before image)和主键/唯一键值——这会导致update/delete无法准确定位目标行。必须开启supplemental log,且不能只开表级,要全局启用+关键列补充。
- 先检查当前状态:
SELECT supplemental_log_data_min, supplemental_log_data_pk, supplemental_log_data_ui FROM v$database;—— 若supplemental_log_data_min为NO,则基础日志未开,后续全无效 - 开启最小附加日志(必需):
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; - 再补主键和唯一键日志(强烈建议):
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE INDEX) COLUMNS; - 重启数据库不是必须项,但需确认归档已启用(
ARCHIVELOG模式),否则同步软件无法持续读取日志
同步用户不能用SYS或SYSTEM,必须独立建模+最小权限授权
同步软件连接Oracle时,若用高权限账号(如SYS),可能触发审计策略拦截、被DBA误杀会话,或因密码复杂度策略导致连接中断;更严重的是,某些工具(如OGG 19c+)明确拒绝用SYSDBA连接源端。
- 创建专用用户(示例名
ogg_user):CREATE USER ogg_user IDENTIFIED BY "StrongPass123!" DEFAULT TABLESPACE users QUOTA UNLIMITED ON users; - 授必要权限(非DBA!):
GRANT CONNECT, RESOURCE, SELECT_CATALOG_ROLE TO ogg_user; - 关键:授予对
V_$ARCHIVED_LOG、V_$LOG、V_$LOGFILE等动态性能视图的查询权:GRANT SELECT ON V_$ARCHIVED_LOG TO ogg_user;(注意是V_$而非V$,后者是同义词,部分环境权限不继承) - 若需捕获DDL,还需
SELECT ANY DICTIONARY,但生产环境慎开;多数同步场景只需DML,禁用DDL更安全
归档模式+强制日志记录(FORCE LOGGING)缺一不可
很多用户开了归档,却漏掉FORCE LOGGING,结果遇到NOLOGGING操作(如INSERT /*+ APPEND */、某些索引重建)时,变更彻底丢失,同步滞后或断链。
- 确认归档模式:
ARCHIVE LOG LIST;输出中必须含Database log mode: Archive Mode - 开启强制日志:
ALTER DATABASE FORCE LOGGING;—— 此操作会阻塞,等待当前所有DML事务结束,建议在低峰执行 - 验证是否生效:
SELECT force_logging FROM v$database;返回YES才算成功 - 注意:
FORCE LOGGING不影响性能显著,但会略微增加redo size;若库中存在大量NOLOGGING对象,开启后首次切换日志时可能触发隐式重做(minor impact)
常见报错直接对应配置缺失点
同步软件启动时报错,往往不是软件本身问题,而是上述三项中某一项没到位。典型错误信息与根因一一对应:
-
ERROR OGG-01163: Failed to open redo log ... ORA-00308: cannot open archived log→ 归档未开或归档路径不可读(检查log_archive_dest_1参数及目录权限) -
ERROR OGG-00446: Could not find archived log for sequence→ 归档被自动清理(RECOVERY_WINDOW太小或RMAN脚本误删),需延长保留策略 -
ERROR OGG-01223: Supplemental logging not enabled for table→ 表级日志未开(虽全局开了,但个别表建表时加了NOPARALLEL等特殊选项,需手动补:ALTER TABLE schema.table_name ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;) -
ERROR OGG-01153: Failed to connect to database ... ORA-01031: insufficient privileges→ 同步用户缺少V_$视图查询权,或误用了AS SYSDBA连接串
这些配置项彼此强耦合,少一个就卡在初始化阶段。最稳妥的做法是按顺序执行:归档模式 → FORCE LOGGING → 全局SUPPLEMENTAL LOG → 创建用户并授精确权限 → 最后才部署同步软件。跳步骤容易反复回退排查。











