Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Wyzwalacz jest nieprawidłowy w Oracle

Za każdym razem, gdy wprowadzamy zmianę w obiekcie bazy danych, każdy kod od niej zależny jest unieważniany. Ma to wpływ na wyzwalacze, widoki i procedury składowane. Jednak następnym razem, gdy coś wywoła ten kod, baza danych automatycznie go ponownie skompiluje.

Więc nie musimy się tym martwić, prawda? No tak, do pewnego momentu. Chodzi o to, że unieważnienie wyzwalaczy (lub czegokolwiek) jest dla nas flagą, że została dokonana zmiana, która może wpłynąć na działanie tego wyzwalacza, co może mieć skutki uboczne. Najbardziej oczywistym efektem ubocznym jest to, że wyzwalacz nie skompiluje się. Bardziej subtelnie, wyzwalacz kompiluje się, ale kończy się niepowodzeniem podczas operacji.

Dlatego dobrym pomysłem jest wymuszenie ponownej kompilacji wyzwalaczy w środowisku deweloperskim, aby upewnić się, że nasza zmiana zasadniczo niczego nie zepsuła. Ale możemy pominąć ten krok, gdy wdrażamy naszą zmianę w środowisku produkcyjnym, ponieważ jesteśmy tak pewni, że wszystko zostanie ponownie skompilowane na żądanie. Zależy od naszych nerwów :)

Oracle udostępnia mechanizmy automatycznej ponownej kompilacji wszystkich nieprawidłowych obiektów w schemacie.

  • Najprostszym jest użycie DBMS_UTILITY.COMPILE_SCHEMA() . Ale było to podejrzane od wersji 8i (ponieważ obsługa procedur składowanych Java wprowadziła potencjalne zależności cykliczne) i nie gwarantuje już pomyślnej kompilacji wszystkich obiektów za pierwszym razem.

  • W 9i Oracle dał nam skrypt $ORACLE_HOME/rdbms/admin/utlrp.sql który przekompilował rzeczy. Niestety wymaga dostępu SYSDBA.

  • W 10g dodali pakiet UTL_RECOMP, który w zasadzie robi wszystko, co robi ten skrypt. Jest to zalecane podejście do ponownej kompilacji dużej liczby obiektów. Niestety wymaga również dostępu SYSDBA. Dowiedz się więcej .

W 11g Oracle wprowadził drobnoziarniste zarządzanie zależnościami. Oznacza to, że zmiany w tabelach są oceniane z większą szczegółowością (zasadniczo na poziomie kolumn, a nie na poziomie tabeli) i dotyczy to tylko obiektów, na które zmiany mają bezpośredni wpływ. Dowiedz się więcej .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. jak wyświetlić wartość liczbową w słowach

  2. Jak zsynchronizować metodę java wywoływaną przez PL/SQL

  3. Jak wyczyścić pulę połączeń ODP.NET w przypadku błędów połączenia?

  4. ostrzeżenie :funkcja utworzona z błędem kompilacji

  5. Oracle Developer Tools dla błędów Visual Studio .net