| Termin | Definicja |
|---|---|
| Funkcja ERROR_STATE() | Funkcja ERROR_STATE() zwraca numer stanu ostatnio wystąpionego błędu. Czym jest funkcja ERROR_STATEERROR_STATE to funkcja systemowa Transact-SQL w Microsoft SQL Server, zwracająca wartość typu int oznaczającą stan błędu, który spowodował wejście do bloku CATCH. Stan to liczba pomocnicza dołączana do komunikatu obok numeru błędu i poziomu ważności. Ma ona znaczenie diagnostyczne: ten sam numer błędu może zostać zgłoszony z wielu miejsc w kodzie silnika, a stan pozwala rozróżnić, które z nich zadziałało. Klasycznym przykładem jest błąd 18456 o nieudanym logowaniu, gdzie stan wskazuje faktyczną przyczynę, na przykład złe hasło, nieistniejącego użytkownika albo konto wyłączone. Miejsce w rodzinie funkcji błędówERROR_STATE należy do zestawu obejmującego ERROR_NUMBER, ERROR_SEVERITY, ERROR_LINE, ERROR_PROCEDURE i ERROR_MESSAGE. Wszystkie działają wyłącznie w zakresie bloku CATCH konstrukcji TRY CATCH i poza nim zwracają NULL. W odróżnieniu od zmiennej systemowej ERRORNUMBER, która jest kasowana przez pierwszą kolejną instrukcję, funkcje te zachowują wartość przez cały blok CATCH, dzięki czemu można je najpierw zapisać do tabeli dziennika, a potem użyć do ponownego zgłoszenia błędu. Typowe zastosowanie to przekazanie kompletu informacji do RAISERROR albo, w nowszych wersjach, samo wywołanie THROW bez argumentów, które odtwarza oryginalny błąd wraz z jego numerem i stanem. Pułapki przy obsłudze błędówPierwsza to przekonanie, że TRY CATCH przechwyci wszystko. Nie przechwytuje błędów kompilacji ani błędów rozpoznania nazw obiektów w tym samym zakresie, więc odwołanie do nieistniejącej tabeli w tym samym bloku przerwie wykonanie mimo obecności CATCH. Nie przechwyci też przerwań o poziomie ważności dwadzieścia i wyżej, które zrywają połączenie. Druga to zgubienie transakcji: po wejściu do CATCH transakcja może być w stanie niezdatnym do zatwierdzenia, co sprawdza się funkcją XACT_STATE, a próba COMMIT kończy się kolejnym błędem. Trzecia to ponowne zgłaszanie błędu przez RAISERROR z własnym tekstem, przy którym oryginalny numer i stan przepadają, a diagnostyka po fakcie staje się zgadywanką. Czwarta, spotykana w aplikacjach, to przekazywanie pełnego komunikatu błędu do interfejsu użytkownika, przez co na ekran trafiają nazwy tabel i fragmenty zapytań. Kiedy błąd bazy oznacza problem ze sprzętemCzęść błędów zgłaszanych przez SQL Server ma źródło poza kodem: uszkodzone strony danych, przerwane operacje zapisu przy zaniku zasilania, wadliwa pamięć RAM czy dysk z narastającą liczbą realokowanych sektorów. Warszawskie Pogotowie Komputerowe zajmuje się właśnie tą warstwą: testujemy pamięć i dyski, sprawdzamy zasilanie i chłodzenie serwerów oraz stacji roboczych, wymieniamy nośniki i konfigurujemy kopie zapasowe, żeby awaria sprzętu nie oznaczała utraty bazy. Dojeżdżamy do firm w Warszawie, a diagnoza jest bezpłatna. |