Jaka jest zaleta używania opcji „SET XACT_ABORT ON” w procedurze składowanej?
Jaka jest zaleta używania
SET XACT_ABORT ON
w procedurze składowanej?
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
5 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
Ponieważ limit czasu żądania pozostawia transakcję otwartą, jest zalecane dla wszystkich jawnych procedur składowanych transakcji (chyba że masz konkretny powód, aby zrobić inaczej), jako implikacje aplikacji pracującej na otwartej transakcji połączenie są katastrofalne.
W
Blog Dana Guzmana
http://weblogs.sqlteam.com/dan ... .aspx
jest naprawdę świetny przegląd,
Anonimowy użytkownik
Potwierdzenie od:
Dzięki dodaniu języka Transact-SQL obsługa wyjątków jest znacznie łatwiejsza do napisania poprawnych procedur, które gwarantują prawidłowe równoważenie transakcji. Na przykład używam tego
szablon do obsługi wyjątków i transakcji zagnieżdżonych
http://rusanu.com/2009/06/11/e ... ions/
:
To pozwala mi pisać niepodzielne procedury, które wycofują swoją własną pracę tylko w przypadku naprawialnych błędów.
Jednym z głównych problemów napotykanych przez procedury Transact-SQL jest
czystość danych
: czasami otrzymane parametry lub dane w tabelach są po prostu niepoprawne, co prowadzi do powielania błędów kluczowych, błędów ograniczeń odniesienia, błędów ograniczeń walidacji itp. W końcu to jest właśnie rola tych ograniczeń, jeśli te błędy czystości danych są niemożliwe i wszyscy zostaliby złapani przez logikę biznesową, wtedy wszystkie ograniczenia byłyby nieaktualne (dla efektu dodano dramatyczną przesadę). Jeśli XACT_ABORT jest włączona, wszystkie te błędy powodują utratę całej transakcji, w przeciwieństwie do możliwości kodowania bloków wyjątków, które wdzięcznie obsługują wyjątek. Typowym przykładem jest próba wykonania INSERT i powrotu do UPDATE w przypadku naruszenia PK.
Anonimowy użytkownik
Potwierdzenie od:
MSDN
http://msdn.microsoft.com/en-u ... .aspx
:
Jeśli SET XACT_ABORT jest ON, to jeśli instrukcja Transact-SQL spowoduje błąd w czasie wykonywania, cała transakcja zostanie zakończona i wycofana.
Gdy opcja SET XACT_ABORT jest wyłączona, w niektórych przypadkach tylko nieudana instrukcja Transact-SQL jest wycofywana, a transakcja kontynuuje przetwarzanie.
W praktyce oznacza to, że niektóre instrukcje mogą zawieść, pozostawiając transakcję „częściowo zakończoną” i wywołującemu może nie być żadnej wskazówki o tym niepowodzeniu.
Prosty przykład:
Ten kod zostanie wykonany „pomyślnie” przy wyłączonym parametrze xact_abort i zakończy się niepowodzeniem z parametrem xact_abort do (polecenie „wstaw do T2” nie zostanie wykonane, a aplikacja kliencka zgłosi wyjątek).
Aby uzyskać bardziej elastyczne podejście, możesz sprawdzić @@ ERROR po każdej instrukcji (stara szkoła) lub użyć bloków TRY ... CATCH (MSSQL2005 +). Osobiście wolę ustawić XACT_ABORT, gdy nie ma powodu do jakiejś zaawansowanej obsługi błędów.
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od: