| Termin | Definicja |
|---|---|
| Widok sys.triggers | sys.triggers zwraca listę wyzwalaczy zdefiniowanych dla tabel i widoków w bazie. Zawartość widoku systemowegosys.triggers to widok katalogu systemowego SQL Server zwracający po jednym wierszu dla każdego wyzwalacza DML przypisanego do tabeli lub widoku oraz dla wyzwalaczy DDL o zasięgu bazy danych. Najważniejsze kolumny to name z nazwą obiektu, object_id, parent_id wskazujące obiekt macierzysty, type z wartością TR dla wyzwalaczy T-SQL i TA dla tych opartych o CLR, oraz zestaw flag: is_disabled, is_instead_of_trigger i is_ms_shipped. Widok działa w kontekście bieżącej bazy, więc zapytanie trzeba wykonać po przełączeniu się na właściwą bazę poleceniem USE. Samą treść wyzwalacza pobiera się osobno, funkcją OBJECT_DEFINITION z podanym object_id albo z widoku sys.sql_modules, gdzie tekst leży w kolumnie definition. Jak to się łączy z innymi widokamiW praktyce sys.triggers rzadko używa się samodzielnie. Złączenie z sys.tables po parent_id daje czytelną listę wyzwalaczy z nazwami tabel, a dołożenie sys.trigger_events pokazuje, na jakie zdarzenia wyzwalacz reaguje: INSERT, UPDATE czy DELETE. Wyzwalacze DDL o zasięgu serwera nie znajdą się tu w ogóle, bo mieszkają w sys.server_triggers. Starszy widok zgodności sys.sysobjects z filtrem po typie TR pokazuje częściowo te same dane, ale nie należy na nim budować nowych rozwiązań. Różnica między wyzwalaczem AFTER a INSTEAD OF ma znaczenie diagnostyczne: ten drugi zastępuje operację, więc zapis, który wygląda na wykonany, może w rzeczywistości trafić gdzie indziej albo nigdzie. Dlaczego wyzwalacze bywają źródłem kłopotówTypowa sytuacja w bazach programów handlowych: operacja zapisu dokumentu trwa kilkanaście sekund, choć tabela nie jest duża. Przyczyną bywa wyzwalacz wykonujący dodatkowe zapytania dla każdej operacji albo, co gorsza, napisany z założeniem pojedynczego wiersza, podczas gdy tabele inserted i deleted zawierają komplet zmienianych rekordów. Drugi klasyk to wyzwalacz wyłączony kiedyś na czas importu i nigdy nie włączony z powrotem, przez co dane przestały się propagować; wykrywa się to właśnie kolumną is_disabled. Trzeci to rekurencja i zagnieżdżanie, ograniczone ustawieniami bazy, kończące się komunikatem o przekroczeniu maksymalnego poziomu zagnieżdżenia. Warto też sprawdzać, czy wyzwalacz nie tłumi błędów, bo taki kod potrafi po cichu gubić zapisy. Bazy programów handlowych pod opiekąWdrażamy i serwisujemy oprogramowanie handlowe oparte o SQL Server, w tym Subiekta, WAPRO i Comarch, więc zaglądanie do katalogu systemowego przy diagnozie spowolnień jest naszą rutyną. Odzyskujemy też bazy po awariach: niepodpięte pliki MDF, przerwane odtwarzanie kopii, uszkodzenia po nagłym zaniku zasilania serwera. Ustawiamy harmonogramy kopii zapasowych tak, aby dawały punkt odtworzenia liczony w minutach, a nie w dniach. Dyżurujemy przez całą dobę, siedem dni w tygodniu, bo baza sprzedażowa nie może czekać do poniedziałku. |