ORA-04028: cannot generate diana for object xxx

 

在ORACLE数据库(10.2.0.5.0)上修改一个包的时候,编译有错误,具体错误信息为"ORA-04028: cannot generate diana for object xxx"。

 

Warning: Package Body created with compilation errors.
 
SQL> show error;
Errors for PACKAGE BODY XXXXX."XXXXXXXX":
 
LINE/COL ERROR
-------- -----------------------------------------------------------------
0/0      ORA-04028: cannot generate diana for object
         xxxx.xxxxx
 
SQL> 

 

第一次遇到这样的错误信息,有点懵,查看错误信息具体解释,解释有lock conflict, 但是所涉及表根本没有任何会话进程锁定。在Meta Link上搜索,才发现是一个Bug

 

 

$ oerr ora 4028

04028, 00000, "cannot generate diana for object %s%s%s%s%s"

// *Cause:  Cannot generate diana for an object because of lock conflict.

// *Action: Please report this error to your support representative.

 

 

 

当包依赖的视图重建后,如果此时尝试编译包就会遇到这个错误,而我所遇到情况是包所依赖的表重建了。 具体可以参考ORA-4028 ERROR WHILE RECOMPILING PL/SQL PACKAGE (文档 ID 1505092.1),

 

 

APPLIES TO:

 

PL/SQL - Version 10.2.0.5 to 10.2.0.5 [Release 10.2]

Information in this document applies to any platform.

 

SYMPTOMS

 

 

Attempting to compile a package fails after the creation of a dependent view with:

 

ORA-04028: cannot generate diana for object SCOTT.V_TEST

 

 

Testcase Scenario:

 

SQL> CREATE OR REPLACE VIEW V_TEST

(a, b)

AS

select a,b from test

/

  2 3 4 5

View created.

 

SQL> alter package p_test compile;

alter package p_test compile

*

ERROR at line 1:

ORA-04028: cannot generate diana for object SCOTT.V_TEST

 

 

CAUSE

unpublished Bug 9342254 - ORA-4028: CANNOT GENERATE DIANA OBJECT AND ORA-4020 : DEAD LOCK

 

 

SOLUTION

The defect is fixed in 11.1 or later.

Download and apply the Patch 9342254 for your version and platform.

 

 

如上所示,这个是一个bug来的,在ORACLE 11.1以及以后版本已经fix掉了,如果遇到这个问题,要么应用补丁9342254 ,如果不能立马应用补丁,经过测试也有两种方法解决:

 

1:重启数据库,然后重编译包。这时可以重新编译包,不会遇到这个错误。

2:清空SHARED_POOL,然后重编译包。(ALTER SYSTEM FLUSH SHARED_POOL;)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ORA-14511错误是Oracle数据库中的一个常见错误,它表示在分区对象上执行操作失败。 分区对象是在Oracle数据库中对表或索引进行分区的一种技术。分区可以根据一定的规则将数据拆分为多个分区,以实现更高效的管理和查询。不过,在分区对象上执行某些操作时,可能会出现ORA-14511错误。 出现ORA-14511错误的原因可能有以下几种情况: 1. 尝试在只读分区对象上执行写操作:如果目标表或索引的分区中有只读属性,而你尝试对其进行写操作,就会出现该错误。你需要确保在可写分区上执行写操作。 2. 尝试在已挂起分区的对象上执行操作:如果目标表或索引的某个分区处于挂起状态,而你尝试对其进行操作,就会出现该错误。你需要先解除对应分区的挂起状态,然后再执行操作。 3. 分区对象处于无效状态:如果目标表或索引的某个分区处于无效状态,而你尝试对其进行操作,就会出现该错误。你需要检查并修复分区对象的无效状态。 4. 执行了不支持的操作或特性:某些操作或特性可能不适用于分区对象。例如,尝试对已启用增量分区维护的表进行一些操作就可能导致该错误。你需要确保执行的操作或特性在分区对象中是可用的。 解决ORA-14511错误的方法通常包括: 1. 确保你对可写分区对象进行写操作,避免在只读分区对象上执行写操作。 2. 解除已挂起分区的挂起状态,然后再执行操作。 3. 检查并修复分区对象的无效状态,确保其处于有效状态。 4. 避免执行不支持的操作或特性,确保操作或特性在分区对象中可用。 总结来说,ORA-14511错误表示在分区对象上执行操作失败,可能是由于只读分区对象上的写操作、挂起分区的操作、无效状态的分区对象或不支持的操作引起的。通过检查并修复相关问题,你可以解决此错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值