一、问题描述
近期,客户反馈其Oracle Data Guard环境中出现一个异常现象:在主库中查询某视图可以正常返回结果,但在备库执行相同查询时却报错ORA-04023: 无法验证或授权对象。即使使用视图所有者的账号登录,问题依然存在。
二、初步排查
我们对可能的原因进行了逐一检查:
-
用户权限:确认当前用户为视图所有者,具备查询权限;
-
视图状态:检查发现视图状态为VALID,未失效;
-
主备同步状态:确认DG同步正常,无延迟或错误。
尽管以上检查均未发现异常,备库查询仍报错,表明问题可能与Oracle内部机制相关。
三、根本原因
通过查询My Oracle Support(MOS),我们发现该问题是Oracle 11.2.0.4版本ADG功能的一个已知BUG(Bug编号:23521523)。该BUG导致备库在解析视图时无法正确验证对象权限,从而抛出ORA-04023错误。
四、解决方案
有两种方法可解决此问题:
1、重新编译视图:
ALTER VIEW 视图名 COMPILE;
2、刷新共享池:
ALTER SYSTEM FLUSH SHARED_POOL;
在实际处理中,由于业务处于高峰期,我们选择了重新编译视图的方式,操作后视图查询立即恢复正常。
五、总结
在Oracle DG环境中,若发现主备库查询行为不一致,且常规排查无法定位问题,应考虑查询MOS确认是否为版本已知BUG。本文案例通过简单编译视图即快速解决问题,避免了系统重启或大规模操作的影响。
参考文档
-
My Oracle Support Document 23521523.8