Czy jest gdzieś, gdzie mogę znaleźć nieudane transakcje w SQL Server 2012?
10
Czy jest gdzieś, gdzie mogę znaleźć nieudane transakcje w SQL Server 2012?
Nie, SQL Server nie przechowuje żadnej historii transakcji, które zostały przerwane / wycofane, co jest trywialne i nie wprowadza dodatkowych potencjalnych problemów (zgodnie z odpowiedzią @ ooutwire ). A nawet transakcje, które zostały popełnione.
Będziesz musiał wykonać własne rejestrowanie w ramach obsługi błędów lub przechwycić określone zdarzenia związane z transakcją za pomocą śledzenia po stronie serwera lub zdarzeń rozszerzonych.
Ślad:
Rozszerzone wydarzenia:
Co powiesz na „nieudane” transakcje?
Jeśli chcesz zobaczyć bieżące transakcje w instancji, możesz skorzystać z
sys.dm_tran_active_transactions
DMV.Ponadto,
sys.dm_exec_sessions
maopen_transaction_count
, że może dać Ci te informacje sesji. Poniżej znajduje się zapytanie diagnostyczne umożliwiające pobranie wszystkich procesów użytkownika, które mają otwarte transakcje:Informacje te można również pobrać z
sys.dm_tran_session_transactions
:Jeśli chcesz przechwycić, kiedy transakcje zostały wycofane (zakładając, że tak bardzo pragniesz transakcji „nieudanych”), możesz przechwycić zdarzenie Extended Events
rollback_tran_completed
. Jeśli szukasz widoku transakcji „wszystko”, możesz uchwycićsql_transaction
zdarzenie zdefiniowane przez SQL Serverźródło
Możesz użyć fn_dblog () i znaleźć identyfikatory transakcji dla przerwanych transakcji, a także wiele innych przydatnych informacji.
Skanuje wszystkie dzienniki transakcji w aktywnej części dziennika. Można to obejść za pomocą flagi śledzenia 2537, która pozwoli ci cofnąć się tak daleko, jak to możliwe, do początku najstarszego „nieużywanego” VLF. Zachowaj ostrożność podczas korzystania z tej funkcji, ponieważ skanuje ona losowo dziennik, a dziennik nie może się zmienić podczas skanowania; więc możesz zobaczyć wzrost logów.
Możesz także użyć fn_dump_dblog przeciwko plikowi kopii zapasowej dziennika.
źródło