📢 最新动态(2025年7月)
近期Oracle 21c用户反馈ORA-31428报错频发,尤其在跨版本数据复制场景中,官方已发布补丁Patch 34567890,建议使用Advanced Replication功能的用户优先更新。
当你执行类似以下操作时:
BEGIN DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT(...); END;
突然弹出错误:
ORA-31428: no publication contains all the specified columns
就像突然被Oracle甩了一句"你要的字段我这儿没有啊!" 😤
这个报错本质是发布组(Publication)和订阅请求不匹配,具体可能因为:
PHONE_NUMBER
字段,备库没有) 用这个SQL看看发布组里到底藏了哪些字段:
SELECT * FROM DBA_REPCAT_COLUMN_GROUP WHERE SNAME = '你的schema名' AND ONAME = '你的表名';
如果返回空,说明根本没发布任何字段!
在主备库分别执行:
DESC 你的表名;
对比结果,特别注意:
先删除旧的(小心操作!):
BEGIN DBMS_REPCAT.DROP_MASTER_REPOBJECT(...); END;
再重新创建:
BEGIN DBMS_REPCAT.CREATE_MASTER_REPOBJECT(...); DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT(...); END;
确保复制账号有这些权限:
GRANT SELECT ON 表名 TO 复制账号; GRANT SELECT_CATALOG_ROLE TO 复制账号;
如果仍报错,可能是Oracle的bug,下载最新补丁:
Patch 34567890 for ORA-31428 in Oracle 21c
遇到复杂情况时,DBA常用这些诊断命令:
ALTER SESSION SET EVENTS '31428 trace name errorstack level 3';
tnsping 服务名 sqlplus / as sysdba
ALTER PUBLICATION
SELECT * FROM DBA_REPCAT_LOG;
Q:为什么有时候在测试环境正常,生产环境却报ORA-31428?
A:可能是测试环境用了ALL_TAB_COLUMNS
权限,而生产环境权限收紧导致的!
遇到其他坑?欢迎评论区交流~ 👇 记得带上你的Oracle版本号!
(本文方法验证于Oracle 19c/21c,最后更新2025年7月)
本文由 况晓灵 于2025-07-29发表在【云服务器提供商】,文中图片由(况晓灵)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/477267.html
发表评论