Недопустимое состояние тела пакета для DBMS_AQADM_SYS

Попытка обновить базу данных, которая не удалась при удалении таблицы AQ 'SYSTEM.DEF$_AQCALL' с этой ошибкой.

// ------------

1. SqlBRuntimeException: Dropping Tables failed after 6/179 items (1 errors)

2. SqlBException: Fatal error executing resource: clean\tables\def$_aqcall

3. QueryException: Error executing resource (delimiter = '/'): clean\tables\def$_aqcall

4. QueryException: Error executing SQL statement (errcode=24005, sqlstate=99999: ORA-24005: Inappropriate utilities used to perform DDL on AQ table SYSTEM.DEF$_AQCALL):

DROP TABLE def$_aqcall CASCADE CONSTRAINTS

5. SQLException: errorcode=24005, sqlstate=99999, line=-1: ORA-24005: Inappropriate utilities used to perform DDL on AQ table SYSTEM.DEF$_AQCALL

// ------------

Затем попытался вручную остановить очередь и сбросить таблицу очередей даже с опцией "Force", но безуспешно.

При остановке очереди это ошибка, которую я получаю.

// ---------------------------

Error starting at line 5 in command:
BEGIN
   DBMS_AQADM.STOP_QUEUE(
      queue_name        => 'SYSTEM.DEF$_AQCALL');
END;

Error report:
ORA-04063: package body "SYS.DBMS_AQADM_SYS" has errors
ORA-06508: PL/SQL: could not find program unit being called: "SYS.DBMS_AQADM_SYS"
ORA-06512: at "SYS.DBMS_AQADM", line 464
ORA-06512: at line 2
04063. 00000 -  "%s has errors"
*Cause:    Attempt to execute a stored procedure or use a view that has
           errors.  For stored procedures, the problem could be syntax errors
           or references to other, non-existent procedures.  For views,
           the problem could be a reference in the view's defining query to
           a non-existent table.
           Can also be a table which has references to non-existent or
           inaccessible types.
*Action:   Fix the errors and/or create referenced objects as necessary.

// --------

Проверка пакета 'DBMS_AQADM_SYS' с использованием;

select owner,object_name,object_type,status from dba_objects where object_name='DBMS_AQADM_SYS';

показывает, что статус "тела пакета" равен "НЕВЕРНЫЙ", и я предполагаю, что это может быть причиной вышеуказанной ошибки.

Следующим шагом была перекомпиляция этого пакета, чтобы исправить любые проблемы в пакете.

Я перекомпилировал пакет как SYSDBA;

EXECUTE UTL_RECOMP.RECOMP_SERIAL();

согласно http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/u_recomp.htm

Это завершено без каких-либо ошибок, но все же Статус Тела Пакета - "Неверный".

Пробовал с помощью

sqlplus / as sysdba @?/rdbms/admin/utlrp 

согласно DBMS_METADATA и другим недействительным пакетам, но все равно не повезло.

Проверил несколько форумов и каждый предлагает перекомпилировать пакет.

Благодарим Вас за понимание этой проблемы.

Благодарю.

1 ответ

Решение

Вот некоторые идеи, в том порядке, в котором я бы их попробовал:

  1. Попробуйте выяснить, почему это неверно. Если вам повезет, сообщение об ошибке даст вам подсказку: select * from dba_errors where name = 'DBMS_AQADM_SYS';
  2. Найдите другие недопустимые объекты, которые могут вызвать проблему: select * from dba_objects where status <> 'VALID';
  3. Бежать utlrp многократно. (Это официальная рекомендация Oracle в некоторых процессах; делайте одно и то же несколько раз.)
  4. Вручную перекомпилировать объекты следующим образом: alter package sys.dbms_aqadm_sys compile;, Перекомпиляция объектов может сделать недействительными другие, вам может понадобиться вручную перекомпилировать их в определенном порядке.
  5. Поговорите со своими администраторами баз данных и выясните, было ли последнее время обслуживание серверов в последнее время. Единственный раз, когда я должен был сделать шаг № 4, был после обновления.
  6. Обратитесь в службу поддержки Oracle.
Другие вопросы по тегам