| Termin | Definicja |
|---|---|
| Ograniczenia wyzwalaczy | Wyzwalacze nie mogą zwracać zbiorów wynikowych i mają ograniczoną głębokość zagnieżdżeń oraz rekurencji. Zakres działania wyzwalaczaWyzwalacz jest procedurą uruchamianą automatycznie przez określone zdarzenie w bazie danych, najczęściej przez Ograniczenia wyzwalaczy wynikają z ich kontekstu wykonania. Wyzwalacz działa w ramach instrukcji, która go uruchomiła, a w wielu silnikach także w ramach tej samej transakcji. Jeżeli wyzwalacz zakończy się błędem, operacja nadrzędna może zostać wycofana. Z tego powodu kod wyzwalacza powinien być krótki, przewidywalny i ograniczony do logiki bezpośrednio związanej z integralnością danych. Nie należy traktować go jak pełnoprawnej aplikacji uruchamiającej długie procesy biznesowe. Brak zbioru wynikowego dla wywołującej aplikacjiTypowy wyzwalacz nie służy do zwracania zbioru wynikowego tak jak zapytanie Jeżeli aplikacja musi otrzymać zmienione dane, powinna użyć jawnego zapytania albo mechanizmu przeznaczonego do zwracania wartości, zależnego od konkretnego silnika bazy danych. Wyzwalacz może zmienić stan tabeli, ale nie powinien być ukrytym interfejsem komunikacyjnym. Takie ukrycie utrudnia ustalenie, dlaczego po prostym zapisie pojawiły się dodatkowe rekordy, zmienione wartości lub opóźnienie. Dokumentacja powinna wskazywać, jakie tabele wyzwalacz modyfikuje i jakie warunki powodują jego uruchomienie. Zagnieżdżenia, rekurencja i skutki uboczneWyzwalacz może pośrednio uruchomić kolejny wyzwalacz, jeżeli zmodyfikuje tabelę objętą innym wyzwalaczem. Taki łańcuch nazywa się zagnieżdżeniem. Gdy zmiana wykonana przez wyzwalacz ponownie modyfikuje obiekt, który uruchomił pierwszy wyzwalacz, powstaje rekurencja. Silniki baz danych zwykle ograniczają głębokość takich wywołań albo pozwalają ją konfigurować, aby zapobiec nieskończonemu wykonywaniu kodu. Dokładny limit, sposób liczenia poziomów i możliwość wyłączenia rekurencji są cechami konkretnego produktu, więc nie należy przenosić wartości liczbowych między różnymi silnikami. Rekurencyjne lub wielopoziomowe wyzwalacze mogą zwiększać czas blokowania tabel, powodować zakleszczenia i utrudniać analizę błędów transakcji. Problem występuje również wtedy, gdy wyzwalacz wykonuje aktualizację wielu wierszy, a każdy zmieniony wiersz uruchamia dalszą logikę. Kod powinien być przygotowany na operacje zbiorowe, ponieważ jedna instrukcja SQL może zmienić zero, jeden albo wiele rekordów. Założenie, że wyzwalacz uruchamia się wyłącznie dla jednego wiersza, prowadzi do pomijania danych lub błędnych zapisów pomocniczych. Kontrola wyzwalaczy podczas diagnostykiPodczas diagnozowania nieoczekiwanej zmiany danych trzeba sprawdzić nie tylko instrukcję wykonaną przez aplikację, lecz także wyzwalacze przypisane do tabeli i widoków. Należy ustalić moment ich uruchomienia, kolejność wykonywania, zakres modyfikowanych rekordów oraz to, czy działają w tej samej transakcji. Pomocne jest odtworzenie operacji na kopii danych i rejestrowanie identyfikatora transakcji, czasu wykonania oraz komunikatu błędu. Sam fakt, że aplikacja wysłała jedno polecenie, nie oznacza, że baza wykonała tylko jedną zmianę. W praktyce serwisowej analiza wyzwalaczy może być potrzebna przy diagnozowaniu błędów zapisu, niespójnych rekordów, nagłego wzrostu obciążenia lub różnic między danymi wyświetlanymi przez program a stanem w bazie. Wnioski dotyczące samego wyzwalacza należy jednak potwierdzić w dokumentacji używanego silnika oraz w logach wykonania. |