1

Oracle キューを停止および削除できません。
次のコード

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

この問題の根本的な原因は何ですか?

アップデート:

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 権限があります。

4

2 に答える 2

3

DBMS_ASSERT パッケージが存在しないか (可能性は低いですが可能だと思います)、データベースへのログインに使用したユーザーに実行権限がないように見えます。通常、PUBLIC には DBMS_ASSERT への EXECUTE アクセス権が付与されますが、サイトで変更された可能性があります。DBMS_ASSERT および DBMS_AQADM に対する EXECUTE 権限の付与を確認します。

于 2010-06-07T11:46:37.203 に答える
1

以前にこの呼び出しを問題なく行ったことがある場合、ORA-04068 エラーにより、呼び出しチェーン内の何かが無効になっていると思われます。最近、インストールにアップグレードまたはパッチを適用しましたか?

Oracle は、$ORACLE_HOME/rdbms/admin にスクリプト utlrp を提供しています。このスクリプトは、すべてのパッケージを再コンパイルし、残りの無効なパッケージについて報告します。管理者に (SYS として) 実行してもらいます。

于 2010-06-07T12:23:35.053 に答える