Obecnie moja baza danych jest w trybie pojedynczego użytkownika. Podczas próby rozszerzenia mojej bazy danych pojawia się błąd:
Baza danych „my_db” jest niedostępna. (ObjectExplorer)
Ponadto, gdy próbuję usunąć bazę danych, pojawia się błąd:
W tej chwili nie można wprowadzić zmian w stanie ani opcjach bazy danych „my_db”. Baza danych znajduje się w trybie pojedynczego użytkownika, a użytkownik jest obecnie z nią połączony.
Jak wyjść z trybu pojedynczego użytkownika? Nie mam żadnego użytkownika korzystającego z tej bazy danych.
Gdy próbuję przeglądać moją witrynę za pomocą IIS, pojawia się błąd:
Podczas obsługi bieżącego żądania sieciowego wygenerowano nieobsługiwany wyjątek. Informacje dotyczące pochodzenia i lokalizacji wyjątku można zidentyfikować za pomocą śledzenia stosu wyjątków poniżej.
Wydaje mi się, że powoduje to tryb pojedynczego użytkownika.
źródło
Najpierw znajdź i
KILL
wszystkie procesy, które są obecnie uruchomione.Następnie uruchom następujące polecenie,
T-SQL
aby ustawić bazę danych wMULTI_USER
trybie.źródło
Aby wyłączyć tryb pojedynczego użytkownika, spróbuj:
ALTER DATABASE [my_db] SET MULTI_USER
Aby wrócić do trybu pojedynczego użytkownika, możesz użyć:
ALTER DATABASE [my_db] SET SINGLE_USER
źródło
źródło
Próbowałem, to działa
źródło
Miałem ten sam problem, a identyfikator sesji do zabicia został znaleziony przy użyciu tego zapytania:
źródło
Naciśnij CTRL + 1
znajdź proces blokujący bazę danych. Poszukaj db w kolumnie dbname i zanotuj spid. Teraz musisz wykonać to polecenie:
źródło
Dla mnie działało:
źródło
Inną opcją jest:
ALTER DATABASE [Your_Db] SET MULTI_USER
źródło
Na wypadek, gdyby ktoś natknął się na ten wątek, oto kuloodporne rozwiązanie programu SQL Server zablokowane w TRYBIE POJEDYNCZEGO UŻYTKOWNIKA
- Uzyskaj identyfikator procesu (spid) połączenia, które chcesz zabić
- Zamień „DBName” na rzeczywistą nazwę DB
Alternatywnie możesz również użyć polecenia „sp_who”, aby uzyskać „spid” otwartego połączenia:
- Lub użyj tego SP zamiast tego
- Następnie wykonaj następujące czynności i zastąp [spid] i [DBName] poprawnymi wartościami
źródło
Nie jestem pewien, czy to komukolwiek pomaga, ale miałem ten sam problem i nie mogłem znaleźć procesu, który mnie powstrzymywał. Zamknąłem SSMS i zatrzymałem wszystkie usługi uderzające w lokalną instancję. Potem, gdy wróciłem i uruchomiłem exec sp_who2, pokazało mi to winowajcę. Zabiłem proces i udało mi się uruchomić Multi_User, a następnie ponownie uruchomić usługi. Mieliśmy IIS uderzając go co kilka minut / sekund w poszukiwaniu określonych pakietów.
źródło
Dziś rano natknąłem się na ten sam problem. Okazało się to prostym problemem. Miałem otwarte okno zapytania ustawione w bazie danych jednego użytkownika w eksploratorze obiektów. Procedura przechowywana sp_who2 nie pokazała połączenia. Gdy go zamknąłem, byłem w stanie to ustawić
źródło
Dodanie do odpowiedzi Jespers , aby być jeszcze bardziej skutecznym:
SET DEADLOCK_PRIORITY HIGH
zastosowaniaDEADLOCK_PRIORITY
5.To, co się dzieje, polega na tym, że inne procesy mają pęknięcie w bazie danych, a jeśli twój proces ma niższą wartość
DEADLOCK_PRIORITY
, wtedy przegrywa wyścig.Pozwala to uniknąć znalezienia i zabicia drugiego pająka (co może wymagać kilkakrotnego wykonania).
Możliwe, że będziesz musiał uruchomić
ALTER DATABASE
więcej niż jeden raz (ale Jesper to robi). Zmodyfikowany kod:źródło
Użyj tego skryptu
Znajdź kolumnę dbname i spid
teraz wykonaj
źródło
Dzisiaj stanąłem przed tym samym problemem, w którym moja baza danych została zmieniona z trybu wielu użytkowników na tryb pojedynczego użytkownika, co ostatecznie powstrzymało mnie od opublikowania bazy danych.
Aby rozwiązać ten problem, musiałem zamknąć wszystkie wystąpienia programu Visual Studio i uruchomić poniższe polecenie w oknie zapytania serwera SQL -
To polecenie zmieniło DB z Single User na Multi User, a potem udało mi się opublikować.
źródło
Nawet ja napotkałem ten sam problem, nie mogłem znaleźć aktywnych połączeń z my_db, aby go zabić, ale nadal pokazuje ten sam błąd. W końcu rozłączam wszystkie możliwe połączenia SSMS dla dowolnej bazy danych na serwerze, tworzę nowe połączenie z SSMS i zmieniam je na Wielu użytkowników.
Uwaga: Wydaje się, że jest to możliwy błąd w SQL Server 2005!
źródło
Właśnie tego doświadczyliśmy w SQL 2012. Proces replikacji włączył się, gdy zabiliśmy oryginalną sesję, która ustawiła ją na jednego użytkownika. Ale sp_who2 nie pokazał tego nowego procesu dołączonego do bazy danych. Zamknięcie SSMS i ponowne otwarcie pozwoliło nam zobaczyć ten proces w bazie danych, a następnie mogliśmy go zabić i natychmiast przejść do trybu wielu użytkowników i to działało.
Nie potrafię zrozumieć logiki tego, ale wydaje się, że jest to błąd w SSMS i nadal objawia się w SQL 2012.
źródło
użyj mistrza
UDAĆ SIĘ
wybierz d.nazwa, d.dbid, spid, login_time, nt_domain, nt_username, loginname z sysprocesses p wewnętrzny dołącz do sysdatabases d na p.dbid = d.dbid gdzie d.name = 'nazwa bazy danych'
kill 568 - kill spid
ALTER DATABASE nazwa bazy danych ”
ZESTAW MULTI_USER przejdź
źródło