Дек 312010
 

В некоторых случаях, например, после установки патчсетов или инвалидации важных объектов раскомпилируются объекты в большом количестве (могут быть тысячи таких объектов). Чтобы их скомпилировать, есть стандартный скрипт utlrp.sql. Запускать его надо от имени SYS в sqlplus:

SQL> @?/rdbms/admin/utlrp


Скрипт хорош тем, что работает в несколько потоков и при наличии достаточного количества CPU, очень быстро отрабатывает.

Хороший тон - это при установке патчей или при внесении изменений с структуру БД и после неё проверять количество инвалидных объектов таким запросом:

SELECT COUNT(*)
FROM dba_objects d 
WHERE d.status='INVALID';

Можно немного упростить себе задачу, создав временную табличку со списком инвалидных объектов до проведения работ:

CREATE TABLE invalid_objs AS
	SELECT *
	FROM dba_objects d 
	WHERE d.status='INVALID';

А после проведения посмотреть, что изменилось:

SELECT * FROM invalid_objs
MINUS
	SELECT *
	FROM dba_objects d 
	WHERE d.status='INVALID';

  2 комментария to “Как перекомпилировать множество объектов”

  1. Здравствуйте!
    Предлагаемый Вами способ требует наличия пароля SYS. Во многих компаниях программисты, создающие патчи, не владеют этим паролем. Опираться на радивость админов заказчика - дело не совсем благодарное. Потому имеет смысл вставлять в свои патчи скрипты по валидации невалидных пакетов. Есть ли в Вашем запаснике знаний какой-то метод для этого случая?

    • День добрый, Вадим!

      Можно, например, перекомпилировать нужные объекты вручную:

      ALTER PACKAGE my_pkg COMPILE BODY;
      

      Или дать пользователю грант на пакет DBMS_UTILITY:

      GRANT EXECUTE ON dbms_utility TO cube;
      -- И перекомпилировать всю схему
      DBMS_UTILITY.compile_schema(schema => 'CUBE');
      

      Более конкретный совет смогу дать, если Вы поподробнее опишете свою ситуацию.

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">

(обязательно)

(обязательно)