Как перекомпилировать объекты базы данных?

Источник: all-oracle

Рекомендовано для:  

Существует пять способов:

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

DBMS_DDL.ALTER_COMPILE

Эта процедура аналогична предложению:
ALTER PROCEDUREFUNCTIONPACKAGE [.] COMPILE [BODY]
Синтаксис

Exec dbms_ddl.alter_compile ( type , schema, name);
--Type : Должен быть PROCEDURE, FUNCTION, PACKAGE, PACKAGE BODY илиTRIGGER.
--Schema : Имя пользователя базы данных
--Name : Имя объекта
Пример
SQL> exec dbms_ddl.alter_compile ('PROCEDURE','SCOTT','TEST');
PL/SQL procedure successfully completed.

DBMS_UTILITY.COMPILE_SCHEMA

Эта процедура компилирует все процедуры, функции, пакеты и триггеры в указанной схеме.
Синтаксис

exec dbms_utility.compile_schema ( schema,compile all)
--Schema : Имя пользователя базы данных
--Compile All : Тип объекта PROCEDURE, FUNCTION, PACKAGE, PACKAGE BODY илиTRIGGER
Пример
SQL> exec dbms_utility.compile_schema('SCOTT');
PL/SQL procedure successfully completed.

UTL_RECOMP

Этот скрипт очень полезен после обновления версии, потому что как правило после обновления статус INVALID получают все PL/SQL и Java объекты
Синтаксис

Exec UTL_RECOMP.RECOMP_SERIAL ();
Пример
SQL> Exec UTL_RECOMP.RECOMP_SERIAL ();
PL/SQL procedure successfully completed.
-- Запускается под пользователем SYS

UTLRP.SQL

Перекомпилирует все объекты PL/SQL, имеющие статус "INVALID", а именно процеду, функции, типы и пакеты.
Расположен: $ORACLE_HOME/rdbms/admin

Пример
SQL> @c:\oracle\product\10.1.0\db_1\rdbms\admin\UTLRP.SQL
TIMESTAMP
-----------------------------------------------------------------------
COMP_TIMESTAMP UTLRP_BGN 2007-08-04 12:47:21

PL/SQL procedure successfully completed.

TIMESTAMP
-----------------------------------------------------------------------
COMP_TIMESTAMP UTLRP_END 2007-08-04 12:47:26

PL/SQL procedure successfully completed.

-- Запускается под пользователем SYS
-- Рекоммендован после обновления базы данных или после переноса

Ручная перекомпиляция

Лучше всего перекомпилировать объекты вручную

Spool recompile.sql
Select "alter "object_type" "object_name" compile;"
From user_objects
Where status <> "VALID"
And object_type IN ("VIEW","SYNONYM",
"PROCEDURE","FUNCTION",
"PACKAGE","TRIGGER");
Spool off
@recompile.sql

Note: VIEW,SYNONYM,PROCEDURE,PACKAGE,FUNCTION,TRIGGER

Spool pkg_body.sql
Select "alter package "object_name" compile body;"
From user_objects
where status <> "VALID"
And object_type = "PACKAGE BODY";
Spool off
@pkg_body.sql

Spool undefined.sql
select "alter materizlized view "object_name" compile;"
From user_objects
where status <> "VALID"
And object_type ="UNDEFINED";
Spool off
@undefined.sql

Spool javaclass.sql
Select "alter java class "object_name" resolve;"
from user_objects
where status <> "VALID"
And object_type ="JAVA CLASS";
Spool off
@javaclass.sql

Spool typebody.sql
Select "alter type "object_name" compile body;"
From user_objects
where status <> "VALID"
And object_type ="TYPE BODY";
Spool off
@typebody.sql

Spool public_synonym.sql
Select "alter public synonym "object_name" compile;"
From user_objects
Where status <> "VALID"
And owner = "PUBLIC"
And object_type = "SYNONYM";
Spool off
@public_synonym.sql

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

  • VIEW
  • SYNONYM
  • PUBLIC SYNONYM
  • PROCEDURE
  • FUNCTION
  • PACKAGE
  • PACKAGE BODY
  • TRIGGER
  • UNDEFINED (MATERIALIZED VIEW)
  • JAVA CLASS
  • TYPE
  • TYPE BODY


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=22591