遭遇ORA-04063
刚刚,客户的缴费系统突然报错,应用程序在后台提示执行某个存储过程时出错,手动在PLSQL DEVELOPER工具上执行那段报错的代码,错误显示如下:
可以看出,这段代码提示ORA-04063,在访问某个view时报错。
最开始,怀疑这个视图是否正常,让客户执行SQL语句检查这个视图的状态。
可以看出,这个视图没有任何问题。我让客户把整个存储过程发过来,发现报错的地方是通过DBLINK访问远程数据库上的一个视图。
此时,客户也在积极地做着各种测试。发现只要在通过PL/SQL代码块就报ORA-04063错误,单独通过DBLINK访问都没有任何问题,测试过程如图:
这些测试可以说明,这个问题与视图没有任何关系,因为在PL/SQL块里通过DBLINK访问原表都报错。
通过关键字“ora-04063 dblink”进行搜索,发现MOS上有一篇文章:
Accessing TABLE From READ ONLY DATABASE Using DATABASE LINK Within PL/SQL Fails With ORA-06550 ORA-04063 or PLS-00905(Doc ID 358697.1)
这篇文章提到,当在PL/SQL中通过DBLINK访问READ ONLY数据库时,有可能会出现ORA-04063错误。
错误原因:
CAUSE
This is expected behavior.
Compiling the PL/SQL block we require internal structures of the table, which
is not yet generated in the read only database.
This has been identified in:
Bug 2798026 ORA-6550 /
PLS-905 WHEN RUNNING PL/SQL OVER DBLINK TO READ ONLY STANDBY DATABASE
询问客户当前数据库是个怎样的架构,客户反馈:源端是19C的RAC,生产库是11.2.0.2 RAC,在生产库上建立了DBLINK访问19C上的数据,并且源端的19C是一个Dataguard环境的备端。
看起来,这个问题与这篇MOS文章的匹配度蛮高的,赶紧让客户看看这个文章。但客户觉得这个系统已经使用很久了,这个PL/SQL代码块也运行了很久,怎么突然就不行了?如果是这个问题,理论上应该系统刚上线就出错才对呀。我一时无以反驳。。。
报着试试的想法,客户根据MOS文章中的workaread进行了修改。发现执行了workaread后,问题竟然解决了。那说明刚刚遭遇的故障真是这篇MOS提到的情况。
对于这个问题,ORACLE官方就不认为是一BUG,所以也没有相应的补丁。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)