Muszę ponownie uruchomić bazę danych, ponieważ niektóre procesy nie działają. Mój plan polega na przełączeniu go do trybu offline i ponownym włączeniu do trybu online.
Próbuję to zrobić w Sql Server Management Studio 2008:
use master;
go
alter database qcvalues
set single_user
with rollback immediate;
alter database qcvalues
set multi_user;
go
Otrzymuję te błędy:
Msg 5061, Level 16, State 1, Line 1
ALTER DATABASE failed because a lock could not be placed on database 'qcvalues'. Try again later.
Msg 5069, Level 16, State 1, Line 1
ALTER DATABASE statement failed.
Msg 5061, Level 16, State 1, Line 4
ALTER DATABASE failed because a lock could not be placed on database 'qcvalues'. Try again later.
Msg 5069, Level 16, State 1, Line 4
ALTER DATABASE statement failed.
Co ja robię źle?
sql
sql-server-2008
ssms
JOE SKEET
źródło
źródło
Odpowiedzi:
Po pojawieniu się błędu uruchom
Poszukaj bazy danych na liście. Możliwe, że połączenie nie zostało zakończone. Jeśli znajdziesz jakieś połączenia z bazą danych, uruchom
gdzie
<SPID>
jest SPID dla sesji, które są połączone z bazą danych.Wypróbuj skrypt po usunięciu wszystkich połączeń z bazą danych.
Niestety nie mam powodu, dla którego widzisz problem, ale tutaj jest link, który pokazuje, że problem wystąpił gdzie indziej.
http://www.geakeit.co.uk/2010/12/11/sql-take-offline-fails-alter-database-failed-because-a-lock-could-not-error-5061/
źródło
set single_user
próba, która wciąż trwa.KILL
by go nie rozwiązało.KILL (87)
skutkujeMsg 102, Level 15, State 1, Line 1 Incorrect syntax near '('.
erm ....Udało mi się odtworzyć ten błąd, wykonując następujące czynności.
Połączenie 1 (pozostaw uruchomione na kilka minut)
Połączenia 2 i 3
źródło
Spróbuj tego, jeśli jest w fazie przejściowej ...
http://learnmysql.blogspot.com/2012/05/database-is-in-transition-try-statement.html
źródło
SET OFFLINE
instrukcją, o której wspomniał OP (może są scenariusze, w których to działa, ale nie dla mnie)Dodam to tutaj na wypadek, gdyby ktoś miał tyle szczęścia co ja.
Przeglądając listę procesów sp_who2 zwróć uwagę na procesy, które działają nie tylko dla wykonanej bazy danych, ale także dla mastera . W moim przypadku problem polegający na blokowaniu bazy danych był związany z procedurą składowaną, która uruchomiła xp_cmdshell.
Sprawdź, czy masz jakiekolwiek procesy w stanie KILL / RollBack dla bazy danych master
Jeśli masz ten sam problem, samo polecenie KILL prawdopodobnie nie pomoże. Możesz zrestartować serwer SQL lub lepszym sposobem jest znalezienie cmd.exe w procesach systemu Windows w systemie operacyjnym SQL Server i zabicie go.
źródło
W SQL Management Studio przejdź do Security -> Logins i kliknij dwukrotnie swój login. Wybierz Role serwera z lewej kolumny i sprawdź, czy jest zaznaczona opcja sysadmin.
W moim przypadku zalogowałem się na konto bez tego uprawnienia.
HTH!
źródło
Zabicie identyfikatora procesu działało dobrze dla mnie. Podczas uruchamiania polecenia „EXEC sp_who2” w nowym oknie zapytania ... i filtruj wyniki dla „zajętej” bazy danych. Zabijanie procesów poleceniem „KILL” załatwiło sprawę. Potem wszystko znowu działało.
źródło
Dodam tylko moje dwa centy. Postawiłem się w tej samej sytuacji, szukając minimalnych wymaganych uprawnień logowania bazy danych, aby pomyślnie uruchomić instrukcję:
Wydaje się, że instrukcja ALTER kończy się pomyślnie , gdy jest wykonywana z logowaniem sysadmin , ale wymaga części czyszczenia połączeń, gdy jest wykonywana z loginem, który ma „tylko” ograniczone uprawnienia, takie jak:
PS Spędziłem wiele godzin próbując dowiedzieć się, dlaczego "ALTER DATABASE .." nie działa, gdy jest uruchamiany z loginem, który ma rolę dbcreator + uprawnienia ZMIENIA DOWOLNEJ BAZY DANYCH . Oto mój wątek MSDN !
źródło
Wiem, że to stary post, ale ostatnio napotkałem bardzo podobny problem. Niestety nie mogłem użyć żadnego z poleceń alter database, ponieważ nie można było nałożyć blokady na wyłączność. Ale nigdy nie udało mi się znaleźć otwartego połączenia z bazą danych. Ostatecznie musiałem wymusić usunięcie stanu kondycji bazy danych, aby zmusić ją do stanu przywracania zamiast odzyskiwania.
źródło
W rzadkich przypadkach (np. Po zatwierdzeniu ciężkiej transakcji) działający proces systemowy CHECKPOINT utrzymujący blokadę FILE na pliku bazy danych uniemożliwia przejście do trybu MULTI_USER.
źródło
W moim scenariuszu nie było procesu blokującego bazę danych pod sp_who2. Jednak odkryliśmy, że baza danych jest znacznie większa niż inne nasze bazy danych, że oczekujące procesy nadal działają, dlatego baza danych w grupie dostępności nadal jest wyświetlana jako czerwona / offline po próbie „wznowienia danych”, klikając prawym przyciskiem myszy wstrzymaną bazę danych.
Aby sprawdzić, czy nadal masz uruchomione procesy, wykonaj to polecenie: wybierz procent ukończenia z sys.dm_exec_requests, gdzie percent_complete> 0
źródło