ошибка при удалении пользователя

audial
Дата: 12.12.2007 04:26:27
SQL> drop user mbill_test cascade;
drop user mbill_test cascade
*
ошибка в строке 1:
ORA-00604: ошибка на рекурсивном SQL-уровне 1
ORA-04068: существующее состояние пакетов было сброшено
ORA-04065: не выполнено, stored procedure "SYS.DBMS_STANDARD" изменено или
удалено
ORA-06508: PL/SQL: Невозможно найти вызываемый программный блок
ORA-06512: на  "SYS.DICTIONARY_OBJ_TYPE", line 3
ORA-06512: на  line 2

что за состояние пакетов?
как узнать их состояние и есть ли вообще в наличии DBMS_STANDARD?
Вячеслав Любомудров
Дата: 12.12.2007 04:42:39
select object_type, status from all_objects where object_name='DBMS_STANDARD';
audial
Дата: 12.12.2007 04:49:07
PACKAGE VALID
SYNONYM VALID

вроде всё с пакетом в порядке.

куда копать не подскажите?

в алерт логе ничего.
Вячеслав Любомудров
Дата: 12.12.2007 04:57:39
Попробовать повторить, возможно все перекомпилилось
Попробовать перекомпилять всех инвалидов: на сервере БД под соответствующим юзером
sqlplus "/ as sysdba"
SQL> @?/rdbms/admin/utlrp
Просмотреть всех инвалидов в схеме SYS и попытаться понять, почему они не могут скомпилиться
select object_name, object_type from all_objects where status='INVALID' and owner='SYS';

PS. Нет ли у этого юзера табличек AQ?
audial
Дата: 12.12.2007 05:14:01
До выполнения скрипта рекомпиляции было порядка 50 объектов-инвалидов, в том числе и объекты с префиксом AQ$.

Выполнил процедуру, вот ее лог:

SQL> @/opt/oracle/OraHome/rdbms/admin/utlrp.sql

Процедура PL/SQL успешно завершена.


Таблица создана.


Таблица создана.


Таблица создана.


Индекс создан.


Таблица создана.


Таблица создана.


Представление создано.


Представление создано.


Пакет создан.

Ошибок нет.

Тело пакета создано.

Ошибок нет.


Процедура PL/SQL успешно завершена.


Процедура PL/SQL успешно завершена.

Теперь этот запрос ничего не возвращает, значит всё скомпилено, как я понимаю.
Но ошибка не исчезла =\ правда немного модифицировалась. Теперь пишет , что ошибка на уровне 2, а была на уровне 1.

SQL> drop user mbill_test cascade;
drop user mbill_test cascade
*
ошибка в строке 1:
ORA-00604: ошибка на рекурсивном SQL-уровне 2
ORA-04068: существующее состояние пакетов было сброшено
ORA-04065: не выполнено, stored procedure "SYS.DBMS_STANDARD" изменено или
удалено
ORA-06508: PL/SQL: Невозможно найти вызываемый программный блок
ORA-06512: на  "SYS.DICTIONARY_OBJ_TYPE", line 3
ORA-06512: на  line 2

Сейчас попробую посмотреть что там на строке 3 в DICTIONARY_OBJ_TYPE
audial
Дата: 12.12.2007 05:19:48
пардон, AQ$ объекты были у сиса, у пользователя, которого пытаюсь удалить всего одна табличка.
Вячеслав Любомудров
Дата: 12.12.2007 05:22:49
А убить отдельно табличку, а потом юзера без cascade?
audial
Дата: 12.12.2007 05:44:38
не получается удалить и таблицу, ошибка та же. пробовал как под owner, так и под sys.
audial
Дата: 12.12.2007 05:46:51
а как можно посмотреть код функции SYS.DICTIONARY_OBJ_TYPE ?

поиск по форуму по слову DBMS_META не выдал ничего.
как из словаря вытащить исходный код?
Вячеслав Любомудров
Дата: 12.12.2007 05:59:07
Посмотреть-то не проблема, толку-то?
tst> select text from dba_source where name='DICTIONARY_OBJ_TYPE' order by line;

TEXT
-------------------------------------------------------------------------------------
function dictionary_obj_type return varchar2 is
begin
return dbms_standard.dictionary_obj_type;
end;
Меня терзают смутные сомнения: ставил патч и забыл накатить catpatch ?