Oracle DB: Компиляция объектов
Перейти к навигации
Перейти к поиску
Ссылки по теме:
Существует пять способов компиляции объектов:
- DBMS_DDL
- DBMS_UTILITY
- UTL_RECOMP
- UTLRP.SQL
- Ручная перекомпиляция
Объекты подлежащие перекомпиляции
- VIEW
- SYNONYM
- PUBLIC SYNONYM
- PROCEDURE
- FUNCTION
- PACKAGE
- PACKAGE BODY
- TRIGGER
- UNDEFINED (MATERIALIZED VIEW)
- JAVA CLASS
- TYPE
- TYPE BODY
Примеры:
ALTER <тип объекта> <наименование объекта> COMPILE [BODY];
begin
dbms_ddl.alter_compile ('PROCEDURE','SCOTT','TEST');
end;
-- компиляция всех объектов схемы
begin
dbms_utility.compile_schema('SCOTT');
end;
-- перекомпиляция всех объектов базы, полезно после обновления
begin;
UTL_RECOMP.RECOMP_SERIAL ();
end;
-- скрипт перекомпиляции объектов со статусом INVALID
sqlplus / as sysdba $ORACLE_HOME/rdbms/admin/UTLRP.SQL
-- список объектов для перекомпиляции
SELECT object_type,
object_name,
owner,
status
FROM all_objects
WHERE status <> 'VALID'
-- скрипт перекомпиляции
BEGIN
-- перекомпилирование всех невалидных объектов в схеме
FOR CUR IN ( SELECT OBJECT_TYPE
, OBJECT_NAME
, OWNER
, STATUS
FROM ALL_OBJECTS
WHERE STATUS <> 'VALID'
)
LOOP
BEGIN
DBMS_DDL.ALTER_COMPILE ( CUR.OBJECT_TYPE, CUR.OWNER, CUR.OBJECT_NAME);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.put_line ('Ошибка компиляции объекта: ' || CUR.OWNER || '.' || CUR.OBJECT_NAME);
END;
END LOOP;
END;