Dashboard > СУБД > Home > Oracle, пересборка поломанных сущностей > Просмотр
  СУБД Вход | Зарегистрироваться   Вариант для печати.  
  Oracle, пересборка поломанных сущностей
Добавил(а) shixaro, последний раз редактировал(а) shixaro Jan 27, 2013  (посмотреть изменения)
Метки: 

Десятка очень чувствительно относится к изменениям в ведомых сущностях в базе данных, как то таблицы, триггеры, функции/процедуры. И даже вьюшки. Поэтому их приходится пересобирать. Если зависимостей 2-3, их можно пересобрать руками. Но чаще их бывает от десятка.

begin
 for rec in ( SELECT 
 owner, object_name, object_id, object_type, created, last_ddl_time, timestamp, status, temporary 
 FROM dba_objects 
 WHERE object_type in ('PROCEDURE', 'FUNCTION') AND status='INVALID'
 ) 
 loop
 execute immediate 'alter '||rec.object_type||' '||rec.owner||'.'||rec.object_name||' compile';
 end loop;
end;

Если по уму - перед командой пересборки нужно лазить в текущие сессии и смотреть что сейчас работает по шедулеру и задевает те зависимости, которые собираемся перекомпилить - и стопать их (типа, dbms_scheduler.stop_job(owner||'.'||job_name) ). Иначе процесс перекомпиляции затянется на время выполнения всех этих задач по шедулеру, у которых в зависимостях есть таблицы/функции/триггеры, которые будут подвергаться пересборке.

Powered by Atlassian Confluence, the Enterprise Wiki. (Version: 2.5 Build:#805 Apr 26, 2007) - Запрос Bug/feature - Связаться с администраторами