在使用OGG实现Oracle数据库DDL复制的过程中,偶尔会出现执行DDL操作后目标端同步失败,日志中提示ORA-01435 user does not exist的问题,这会直接影响数据同步的连续性。下面先通过一张示意图直观了解OGG DDL复制的基本流程,再逐步分析问题原因和解决方法。

一、报错场景与基础排查
该报错通常出现在源端执行创建用户、修改用户权限等涉及用户操作的DDL语句后,目标端的 replicat 进程异常终止,查看进程日志可以看到类似如下的错误信息:
2024-xx-xx 10:23:45 ERROR OGG-01435 Oracle GoldenGate Delivery for Oracle, r_ogg.prm: DDL operation failed, error: ORA-01435: user does not exist.
遇到该问题时,首先可以排查以下基础项:
- 确认源端执行的DDL语句是否确实涉及用户相关操作,比如
CREATE USER、ALTER USER、DROP USER等 - 检查目标端是否已经存在该用户,如果源端新建用户,目标端未提前创建可能会触发该报错
- 查看OGG的全局配置文件和进程参数中,是否对用户复制做了特殊的过滤或映射设置
二、常见触发原因
2.1 用户映射配置错误
如果OGG配置了用户映射规则,比如使用MAP参数将源端用户映射到目标端其他用户,但DDL操作涉及的用户不在映射范围内,或者映射的目标用户不存在,就会触发ORA-01435报错。例如源端执行CREATE USER test IDENTIFIED BY test123;,但映射规则中目标端没有对应的test用户,也没有配置默认映射用户,就会出现该问题。
2.2 DDL复制权限不足
OGG的复制进程使用的数据库用户需要具备足够的权限来执行DDL操作,如果该用户没有创建、修改用户的权限,或者没有操作目标端用户对象的权限,执行涉及用户的DDL时就会报用户不存在的错误。比如目标端复制用户没有被授予CREATE USER、ALTER USER等系统权限,无法执行源端同步过来的用户相关DDL。
2.3 DDL复制参数配置不当
OGG的DDL复制相关参数如果配置不合理,也会导致该问题。比如DDLOPTIONS参数中设置了错误的过滤规则,将用户相关的DDL错误过滤,或者REPLICAT进程中没有正确配置DDL参数,导致DDL操作没有按照预期同步到目标端,目标端缺少对应的用户对象。
三、对应解决方法
3.1 修正用户映射配置
如果存在用户映射需求,需要检查映射规则是否覆盖所有需要同步的用户相关DDL。可以在replicat进程参数中添加正确的映射规则,示例如下:
-- replicat进程参数配置示例 REPLICAT r_ogg USERID ogg_admin, PASSWORD ogg_password MAP src_user.*, TARGET tgt_user.*; -- 如果用户跨用户映射,添加如下规则 MAP src_user.test, TARGET tgt_user.test;
如果不需要用户映射,确保参数中没有错误的映射配置,让DDL按照源端的用户结构同步到目标端即可。
3.2 补全复制用户权限
登录目标端数据库,给OGG复制用户授予足够的权限,执行如下SQL语句:
-- 授予用户相关DDL的系统权限 GRANT CREATE USER, ALTER USER, DROP USER TO ogg_admin; -- 授予操作所有用户的权限 GRANT ANY USER TO ogg_admin; -- 如果需要同步角色相关DDL,也可以补充对应权限 GRANT CREATE ROLE, ALTER ANY ROLE, DROP ANY ROLE TO ogg_admin;
3.3 调整DDL复制参数
检查并调整DDL复制相关参数,确保用户相关的DDL能够被正确复制。replicat进程中的DDL参数配置示例如下:
-- 开启DDL复制,设置合适的选项 DDL INCLUDE ALL DDLOPTIONS REPORT -- 如果需要过滤部分DDL,明确指定过滤规则,不要误过滤用户相关操作 DDL EXCLUDE OBJNAME "SYS.*"
配置完成后重启replicat进程,让参数生效,再测试用户相关的DDL操作,确认是否能够正常同步。
四、验证方法
解决配置问题后,可以通过以下简单测试验证问题是否修复:
- 在源端执行创建用户的DDL:
CREATE USER test_sync IDENTIFIED BY sync123; - 查看目标端数据库是否自动同步创建了test_sync用户
- 在源端执行修改用户密码的DDL:
ALTER USER test_sync IDENTIFIED BY new_sync456; - 查看目标端该用户的密码是否同步修改,同时检查OGG replicat进程日志是否有报错
如果所有测试都通过,说明ORA-01435报错已经解决,OGG的DDL复制可以正常同步用户相关操作。