Вопрос

Некоторые из триггеров в моей базе данных становятся недействительными после определенных изменений в таблицах.Но кажется, что они все еще работают.Единственная проблема, у меня есть, есть, если я использую разработчик SQL, есть красные кресты с левой стороны триггеров, указывающих, что они недействительны.Это большая проблема?

Я знаю, что я могу перекомпилировать триггер, чтобы исправить это, но я не уверен, что это действительно проблема, на которую стоит беспокоить.Если поэтому мне нужно будет рассмотреть мои предыдущие сотни изменений и выяснить, что вызывает проблему.Спасибо.

Это было полезно?

Решение

Всякий раз, когда мы развертываем изменение в объекте базы данных, любой код, который зависит от него, недействителен. Это влияет на триггеры, взгляды и хранимые процедуры. Однако в следующий раз что-то вызывает этот код, база данных автоматически перекомпирована.

Поэтому нам не нужно беспокоиться об этом, верно? Ну да, до точки. Дело в том, что недействительство триггеров (или что-то еще) - это флаг, чтобы изменение было сделано, которое может повлиять на работу этого триггера, что может иметь побочные эффекты. Наиболее очевидный побочный эффект состоит в том, что триггер не скомпилируется. Более тонко, триггер компилирует, но не удается во время операций.

Следовательно, это хорошая идея заставить перекомпиляцию триггеров в среде развития, чтобы гарантировать, что наши изменения не сломаны ничего. Но мы можем пропустить этот шаг, когда мы развертываем наше изменение производства, потому что мы сделаем это уверенность в том, что все будет перенесено на спрос. Зависит от нашего нерва :)

Oracle предоставляет механизмы для автоматической перекомнигирования всех недопустимых объектов в схеме.

    .
  • Самым простым является использование DBMS_UTILITY.COMPILE_SCHEMA(). Но это было хитрым с 8i (потому что поддержка хранимых процедур Java ввела потенциал для круговых зависимостей) и больше не гарантируется успешно компилировать все объекты.

  • в 9i Oracle дали нам сценарий GeneracodicCode, который перекомпилировал вещи. К сожалению, это требует доступа Sysdba.

  • В 10G они добавили пакет UTL_RECOMP, который в основном делает все, что делает этот скрипт. Это рекомендуемый подход для перекомпинки большого количества объектов. К сожалению, это также требует доступа Sysdba.

Другие советы

Не большая проблема вообще.

Просто щелкните правой кнопкой мыши на них, чтобы перекомпилировать, и вы приятно пойти ... Я пишу это с собственного опыта.

Если есть какие-либо ошибки с кодом, который вы только что изменились, они появятся, чтобы вы могли его исправить.Компилятор скажет вам, где проблемы (номера линии, имена переменной и т. Д.) В случае ошибок.

Если триггеры работают, то, вероятно, Oracle захватывает ошибку ORA-04068, когда она запускает триггер и повторный триггер после того, как он автоматически перекомпилируется.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top