Не удается остановить очередь Oracle. Не удалось найти вызываемый программный модуль: "SYS.DBMS_ASSERT" - PullRequest
1 голос
/ 07 июня 2010

Невозможно остановиться и отбросить очередь оракула. ​​
Следующий код

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.

Ответы [ 2 ]

3 голосов
/ 07 июня 2010

Мне кажется, что либо пакет DBMS_ASSERT не существует (маловероятно, но я полагаю, что это возможно), либо пользователь, которого вы использовали для входа в базу данных, не имеет прав на выполнение. Обычно PUBLIC предоставляется EXECUTE доступ к DBMS_ASSERT, но, возможно, он был изменен на вашем сайте. Проверьте разрешения EXECUTE на DBMS_ASSERT и DBMS_AQADM.

1 голос
/ 07 июня 2010

Если вы уже делали этот вызов без проблем, то ошибка ORA-04068 заставляет меня думать, что что-то в цепочке вызовов было признано недействительным.Вы недавно применяли какие-либо обновления или исправления для установки?

Oracle предоставляет сценарий utlrp в $ ORACLE_HOME / rdbms / admin, который будет перекомпилировать все пакеты и сообщать о любых оставшихся недействительными.Ваш администратор должен запустить это (как SYS).

...