To jest duplikat pytania, które zadałem przy przepełnieniu stosu , ale doradzono mi, że ktoś tutaj może mieć lepszy pomysł na to, co się dzieje.
Mam sporadyczny problem, gdy aktualizuję SQL Server w trybie pojedynczego użytkownika, używając .NET SqlConnection, jakaś inna aplikacja w jakiś sposób loguje się do bazy danych, podczas gdy kod SQL jest wykonywany i wyrzuca mój proces. SqlConnection nie jest w żaden sposób zamykany ani usuwany. Ale jakaś inna aplikacja w jakiś sposób zostaje połączona z bazą danych i to powoduje moje połączenie.
Kiedy uruchamiam sp_who, widziałem, że proces, który przejął kontrolę nad bazą danych to Command = "TASK MANAGER".
Każdy może mi powiedzieć, co to jest ten proces, jaki jest jego cel i jak na świecie może dostać się do bazy danych, która jest w trybie pojedynczego użytkownika i istnieje aktywne połączenie?
źródło
Odpowiedzi:
Miałeś dzisiaj ten sam problem, jeśli nie wyłączyłeś AUTOMATYCZNEJ ASYNCU AUTO_UPDATE_STATISTICS, nie będziesz mógł wejść do swojej bazy danych, możesz rozwiązać ten problem, przełączając bazę danych w tryb offline. Ważne jest, aby wiedzieć, że musisz ustawić priorytet zakleszczenia na wysoki, w przeciwnym razie nastąpi zakleszczenie polecenia. Użyj następujących poleceń, aby wyjść z POJEDYNCZEGO trybu użytkownika
Śledzony przez
Śledzony przez
źródło
SET MULTIUSER WITH ROLLBACK IMMEDIATE
pracował tylko przez siebie, kiedySET DEADLOCK_PRIORITY HIGH
została wykonana pierwszaMyślę, że tajemnica w końcu została rozwiązana :
źródło
Zatrzymaj śledzenie zdarzeń rozszerzonych „system_health”. Zostanie on wymieniony w sekcji
SQL Server Management Studio
-> [ServerName]
-> Management
-> Extended Events
-> Right-Click on 'System_health'
-> Hit Stop Session
Po zablokowaniu blokady zrestartuj sesję.
źródło
Musisz wyłączyć agenta SQL przed uruchomieniem trybu jednorazowego użytku. W momencie, gdy agent będzie pobierał dostęp dla pojedynczego użytkownika. Pamiętaj, że pojedynczy użytkownik nie jest pierwszym użytkownikiem / procesem do połączenia.
źródło