Ответ 1
Всякий раз, когда мы развертываем изменение объекта базы данных, любой код, который зависит от него, недействителен. Это влияет на триггеры, представления и хранимые процедуры. Однако в следующий раз, когда что-то называет этот код, база данных автоматически перекомпилирует его.
Так что нам не нужно беспокоиться об этом, верно? Ну да, до определенного момента. Дело в том, что недействительность триггеров (или что-то еще) является для нас флагом, что было сделано изменение, которое может повлиять на работу этого триггера, что может иметь побочные эффекты. Наиболее очевидным побочным эффектом является то, что триггер не будет компилироваться. Более тонко, триггер компилируется, но не работает во время операций.
Следовательно, это хорошая идея, чтобы заставить перекомпиляцию триггеров в среде разработки, чтобы наши изменения принципиально не нарушали ничего. Но мы можем пропустить этот шаг, когда мы развертываем наши изменения в производстве, потому что мы делаем это уверенно, что все будет перекомпилироваться по требованию. Зависит от нашего нерва:)
Oracle предоставляет механизмы автоматической перекомпиляции всех недопустимых объектов в схеме.
-
Самый простой способ - использовать
DBMS_UTILITY.COMPILE_SCHEMA()
. Но это было изворотливо с 8i (потому что поддержка Java Stored Procedures ввела потенциал для круговых зависимостей), и больше не гарантировано скомпилировать все объекты в первый раз. -
В 9i Oracle дал нам script
$ORACLE_HOME/rdbms/admin/utlrp.sql
, который перекомпилировал вещи. К сожалению, для этого требуется доступ SYSDBA. -
В 10g они добавили пакет UTL_RECOMP, который в основном делает все, что делает этот script. Это рекомендуемый подход для перекомпиляции большого количества объектов. К сожалению, он также требует доступа SYSDBA. Узнайте больше.
В 11г Oracle представил мелкомасштабное управление зависимостями. Это означает, что изменения в таблицах оцениваются с меньшей степенью детализации (в основном, на уровне столбцов, а не на уровне таблицы), и затрагиваются только те объекты, на которые непосредственно влияют изменения. Узнайте больше.