無法停止和刪除Oracle隊列。
下面的代碼無法停止Oracle隊列 - 找不到正在調用的程序單元:「SYS.DBMS_ASSERT」
BEGIN
DBMS_AQADM.STOP_QUEUE (
queue_name => 'TEST_QUEUE');
DBMS_AQADM.DROP_QUEUE(
queue_name => 'TEST_QUEUE');
END;
/
產生以下錯誤:
ERROR at line 1:
ORA-04068: existing state of packages has been discarded
ORA-04065: not executed, altered or dropped stored procedure "SYS.DBMS_ASSERT"
ORA-06508: PL/SQL: could not find program unit being called: "SYS.DBMS_ASSERT"
ORA-06512: at "SYS.DBMS_AQADM_SYS", line 3365
ORA-06512: at "SYS.DBMS_AQADM", line 167
ORA-06512: at line 5
可能是什麼這個問題的根本原因?
UPDATE:
SQL> SELECT * FROM USER_TAB_PRIVS where table_name='DBMS_ASSERT' and GRANTEE='TEST_USER'
...
GRANTEE=TEST_USER
OWNER=SYS
TABLE_NAME=DBMS_ASSERT
GRANTOR=SYS
PRIVILEGE=EXECUTE
GRANTABLE=NO
HIERARCHY=NO
SQL> SELECT * FROM USER_TAB_PRIVS where table_name='DBMS_AQADM' and GRANTEE='TEST_USER'
...
GRANTEE=TEST_USER
OWNER=SYS
TABLE_NAME=DBMS_AQADM
GRANTOR=SYSTEM
PRIVILEGE=EXECUTE
GRANTABLE=NO
HIERARCHY=NO
我檢查表USER_TAB_PRIVS在我們的一些模式,我可以看到表名「DBMS_ASSERT」該記錄中存在的模式,在只TEST_USER。
用戶具有EXECUTE特權。
但我們不在代碼中使用DBMS_ASSERT。 – 2010-06-07 12:07:18
@Vladimir:根據原始郵件中顯示的錯誤,DBMS_AQADM正在調用DBMS_ASSERT。 – 2010-06-07 12:12:58
@Bob Jarvis:查看上面的更新。 – 2010-06-07 12:27:56