Инвалидные объекты Oracle. Перекомпиляция.

/* Вывести невалидные схемы и объекты */
select owner, object_type, count(1)
from all_objects
where status = 'INVALID'
GROUP BY owner, object_type
ORDER BY owner;


/* перекомпилирование схемы полностью */
begin 
  dbms_utility.compile_schema('ваша схема',TRUE); 
end 
;

/* Компиляция одного конкретного объекта */
BEGIN
  dbms_ddl.alter_compile ('ваш тип объекта','ваша схема','ваше имя объекта');
END
;

SQL> select owner, object_type, 'begin dbms_utility.compile_schema('''||owner||''',TRUE); end ;' AS "CommandToRecompil", count(1) AS "Количество объектов"
from all_objects
where status = 'INVALID'
GROUP BY owner, object_type
ORDER BY owner;

/*Компиляция битых объектов в цикле*/
BEGIN
  FOR l_crs IN (SELECT   owner,
                         object_name,
                         object_type
                  FROM   all_objects
                  WHERE  STATUS = 'INVALID' AND owner='WMSYS' 
                  --AND object_type='ваш тип объекта' /*Укажите свой объект*/
                )
  LOOP
    BEGIN
IF l_crs.object_type in ('ваш тип объекта')
      THEN
      
        EXECUTE IMMEDIATE 'ALTER ' || l_crs.object_type || ' "' || l_crs.owner || '"."' || l_crs.object_name || '" COMPILE';
      END IF;
    EXCEPTION
      WHEN OTHERS THEN NULL;
        DBMS_OUTPUT.PUT_LINE(DBMS_UTILITY.FORMAT_ERROR_STACK);
        RETURN;
    END;
  END LOOP;
END;

Комментарии

Популярные сообщения из этого блога

Linux (РедОС). Сброс пароля

TRUNCATE / DELETE / DROP или как очистить таблицу

КБК. КВФО - Код вида финансового обеспечения (деятельности)

SQL Error [53200]: ОШИБКА: нехватка разделяемой памяти Подсказка: Возможно, следует увеличить параметр max_locks_per_transaction

РедОС. Подключение к сетевой папке