最近在对数据库进行操作的时候,在编译一个存储过程的时候报错,错误信息为:
ORA-04028: cannot generate diana for object
网上查询,大多是说存在锁冲突,because of lock conflict,但因为是对正常的备份数据进行恢复操作,所以不应该存在锁冲突。还有说重启后正常的,因为数据库在服务器,也没有进行重启操作。
后来在Stack Overflow里看到一个比较好的解释,Who is diana, and why won't she let my database objects compile?
There is a bug in Oracle 10.2.5 (Unpublished Bug 9342254; see Doc ID 1505092.1) for which there is a fix Oracle 11.1 and later; I think this may have been the issue at play here.
You can work round it by issuing a flush of the shared pool:
ALTER SYSTEM FLUSH SHARED_POOL
执行命令,清空SHARED_POOL,即可正常编译。
按照Bug编号搜索,也可以找到云栖社区的一篇文章,ORA-04028:cannot generate diana for object xxx
教训就是,对于较偏门的问题,要有直接去Stake Overflow找的意识。