2014-12-09 5 views
0

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

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

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 

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

Затем попытался вручную остановить очередь и отбрасывая таблицу очередей даже с помощью параметра «Сила», но не повезло.

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

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

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'; 

показывает, что положение о «Тело пакета» является «INVALID», и я полагаю, что это может быть причиной выше ошибки.

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

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

EXECUTE UTL_RECOMP.RECOMP_SERIAL(); 

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

заполненного без каких-либо ошибок, но все-таки состояние пакета органа «Недопустимое».

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

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

как на DBMS_METADATA and other packages invalid, но все еще не везение.

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

Цените, если у вас есть какие-либо сведения по этой проблеме.

Спасибо.

ответ

0

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

  1. Try, чтобы выяснить, почему это недопустимо. Если вам повезет, сообщение об ошибке даст вам подсказку: 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.
+0

Спасибо за советы. Были ошибки в «DBMS_AQADM_SYS», а также некоторые другие недопустимые объекты. Не был уверен, как эти ошибки оказались в БД. Во всяком случае, это был локальный тестовый DB-сервер, и я просто переустановил Oracle. В конце это было хорошее упражнение. Приветствия. –