Oracle DB: Компиляция объектов

Материал из sysadm
Перейти к навигации Перейти к поиску

Ссылки по теме:

Существует пять способов компиляции объектов:

  1. DBMS_DDL
  2. DBMS_UTILITY
  3. UTL_RECOMP
  4. UTLRP.SQL
  5. Ручная перекомпиляция

Объекты подлежащие перекомпиляции

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