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

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

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

DBMS_DDL.ALTER_COMPILE

Эта процедура аналогична предложению:

  1. ALTER <тип объекта> <наименование объекта> COMPILE [BODY];
  2.  

Синтаксис

dbms_ddl.alter_compile ( type, schema, name);

--Type: Должен быть PROCEDURE, FUNCTION, PACKAGE, PACKAGE BODY илиTRIGGER. 

--Schema: Имя пользователя базы данных 

--Name: Имя объекта 

Пример;

  1. begin
  2. dbms_ddl.alter_compile ('PROCEDURE','SCOTT','TEST');
  3.  

DBMS_UTILITY.COMPILE_SCHEMA

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

dbms_utility.compile_schema ( schema,compile all) 

--Schema: Имя пользователя базы данных 

--Compile All: Тип объекта PROCEDURE, FUNCTION, PACKAGE, PACKAGE BODY илиTRIGGER 

  1. begin
  2. dbms_utility.compile_schema('SCOTT');
  3.  

UTL_RECOMP

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

Синтаксис

UTL_RECOMP.RECOMP_SERIAL (); 

— Запускается под пользователем SYS 

  1. begin;
  2. UTL_RECOMP.RECOMP_SERIAL ();
  3.  

UTLRP.SQL

Перекомпилирует все объекты PL/SQL, имеющие статус «INVALID», а именно процедуры, функции, типы и пакеты. 

Расположен: $ORACLE_HOME/rdbms/admin

Пример 

  1. Запустить скрипт c:\oracle\product\10.1.0\db_1\rdbms\admin\UTLRP.SQL
  2.  

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

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

Список инвалидных объектов БД достаем запросом

  1. SELECT object_type,
  2. object_name,
  3. owner,
  4. status
  5. FROM all_objects
  6. WHERE status <> 'VALID'
  7.  

Дальше компилируем через среду разработки. Объекты подлежащие перекомпиляции

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

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

Или скриптом

  1.  
  2. BEGIN
  3. -- перекомпилирование всех невалидных объектов в схеме
  4. #b1b100;">FOR CUR IN ( SELECT OBJECT_TYPE
  5. , OBJECT_NAME
  6. , OWNER
  7. , STATUS
  8. FROM ALL_OBJECTS
  9. WHERE STATUS <> 'VALID'
  10. )
  11. LOOP
  12.  
  13. BEGIN
  14. DBMS_DDL.ALTER_COMPILE ( CUR.OBJECT_TYPE, CUR.OWNER, CUR.OBJECT_NAME);
  15.  
  16. EXCEPTION
  17. WHEN OTHERS THEN
  18. DBMS_OUTPUT.put_line ('Ошибка компиляции объекта: ' || CUR.OWNER || '.' || CUR.OBJECT_NAME);
  19. END;
  20.  
  21. END LOOP;
  22.  
  23.  
Источники
http://www.interface.ru/home.asp?artId=22591
12:43
9.3K
Нет комментариев. Ваш будет первым!
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.