Перекомпиляция инвалидных объектов схемы

Определение инвалидных объектов

Для определения инвалидных объектов можно использовать представление DBA_OBJECTS, как в этом запросе:

COLUMN object_name FORMAT A30
SELECT owner,
object_type,
object_name,
status
FROM dba_objects
WHERE status = 'INVALID'
ORDER BY owner, object_type, object_name;

Полученную информацию можно использовать для выбора метода рекомпиляции.

Вручную

При небольшом количестве инвалидных объектов ручной перекомпиляции может быть достаточно. Например:
ALTER PROCEDURE AGRP.AGR_DEFRAG_PROC COMPILE;
ALTER VIEW AGRP.ABUVIPROP COMPILE;
ALTER PACKAGE APEX_030200.WWV_FLOW_FND_GLOBAL COMPILE;
ALTER SYNONYM BRAFAKT.ACRCLIENT COMPILE;

Немного подшаманим:
SELECT 'ALTER '|| case object_type when 'PACKAGE BODY' then 'PACKAGE' else object_type end||' '|| owner||'.'||object_name||' COMPILE;' "Recompile"
FROM dba_objects
WHERE status = 'INVALID'
ORDER BY owner, object_type, object_name;


С чем пришлось столкнуться

При попытке откомпилировать
ALTER PACKAGE MDSYS.SDO_NET COMPILE
получал сообщение:
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-02290: check constraint (SYS.JAVA_DEV_DISABLED) violated

Причина:
Был применён «mitigation patch» или администратор использовал его, что бы отключить новые хранимые JAVA процедуры разработки / перекомпиляции.
Была обеспечена функция безопасности, которая позволяет DBA контролировать разработку java хранимых процедур без воздействия на уже существующие java хранимые процедуры. До этого миграционного патча единственным решением было удалить jvm который делал непотребными все java хранимые процедуры. Сейчас DBA может включить их на некоторое время и отключить после того как разработка будет закончена.

Решение:
Подключиться к БД как SYSDBA пользователь:
SQL> exec dbms_java_dev.enable;

После того как всё скомпилируется/перекомпилируется и новые процедуры разработки не нужны, подключиться к БД как SYSDBA пользователь:
SQL> exec dbms_java_dev.disable;

Выглядело всё вот так:

SQL> exec dbms_java_dev.enable;
_
PL/SQL procedure successfully completed.
_
SQL> ALTER PACKAGE MDSYS.SDO_NET COMPILE;
_
Package altered.
_
SQL> ALTER PACKAGE SYS.SQLJUTL2 COMPILE;
_
Package altered.
_
SQL> exec dbms_java_dev.disable;
_
PL/SQL procedure successfully completed.

Перекомпиляция инвалидных объектов схемы: 1 комментарий

  1. Wonderful blog! I found it while searching on Yahoo News.
    Do you have any suggestions on how to get listed
    in Yahoo News? I’ve been trying for a while but I never seem
    to get there! Thanks

Добавить комментарий для Ken Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *