开发人员说新建了一个package,在编译的过程中出现了一些错误。提示为PL/SQL:ORA-00942: table or view does not exists。这是一个很明显的错误,即要么是表不存在,要么是由于没有权限就会出现该错误提示。根据这个提示,在增加相应的权限后,再次编译收到了ORA-04028: cannot generate diana for object这个错误提示。下面是具体的描述。
1、错误提示信息
gx_adm@MMDB> alter package MM_IMP_BAT_ACC_PKG compile;
alter package MM_IMP_BAT_ACC_PKG compile
*
ERROR at line 1:
ORA-04028: cannot generate diana for object gx_adm.IMP_BAT_ACC_AUTH_TMP_TBL
2、分析与解决
robin@SZDB:~> oerr ora 04028
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.
--上面的错误提示是存在锁冲突
oracle@Dev-DB-04:~> export ORACLE_SID=MMDB
oracle@Dev-DB-04:~> sqlplus / as sysdba
SQL*Plus: Release 10.2.0.5.0 - Production on Wed Apr 23 09:21:44 2014
Copyright (c) 1982, 2010, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Release 10.2.0.5.0 - 64bit Production
SQL> show parameter db_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_name string MMDB
SQL> @lock_obj.sql --->没有发现任何对象被锁定
no rows selected
--下面是来自metalink的信息,也没有看到什么可用的帮助信息,提示我们检查语法错误以及也是锁冲突
(Doc ID 19834.1)OERR: ORA 4028 cannot generate diana for object <name> (Doc ID 19834.1)
OERR: ORA 4028 cannot generate diana for object <name>
Error: ORA 4028
Text: cannot generate diana for object <name>
-------------------------------------------------------------------------------
Cause: A lock conflict prevented the generation of diana for an object.
Action: Check the syntax.
If no syntax errors are found, report this error to Oracle World Wide
Support.
For more information about locks, see the index entry on "lock" in
<Oracle7 Server SQL Reference>.
--Authro: Leshami
--Blog : http://blog.csdn.net/leshami
--检查alert 日志,也没有查看到什么特殊的ORA信息
--约摸折腾了一会儿,也没有什么结果,由于是DEV DB,当前没有人再使用,索性重启了一下
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup pfile=/u02/database/MMDB/initMMDB.ora;
ORACLE instance started.
Total System Global Area 599785472 bytes
Fixed Size 2098112 bytes
Variable Size 163580992 bytes
Database Buffers 427819008 bytes
Redo Buffers 6287360 bytes
Database mounted.
Database opened.
SQL> conn gx_adm/xxx
Error accessing PRODUCT_USER_PROFILE
Warning: Product user profile information not loaded!
You may need to run PUPBLD.SQL as SYSTEM
Connected.
SQL> alter package MM_IMP_BAT_ACC_PKG compile;
Package altered.
SQL> alter package MM_IMP_BAT_ACC_PKG compile body;
Package body altered.
--从上面的编译来看,编译正常。
3、后记 a、对于这个错误,还是第一次碰到,不过没有检查出锁定对象。 b、通过重启后正常,说明应该还是可能存在锁冲突,可能是重启前没有找到合适的方式检查出来。 c、生产环境不建议贸然重启,最好查明原因再解决。