Ich muss eine Datenbank neu starten, da einige Prozesse nicht funktionieren. Mein Plan ist es, es offline und wieder online zu schalten.
Ich versuche dies in SQL Server Management Studio 2008 zu tun:
use master;
go
alter database qcvalues
set single_user
with rollback immediate;
alter database qcvalues
set multi_user;
go
Ich erhalte folgende Fehler:
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.
Was mache ich falsch?
sql
sql-server-2008
ssms
Joe Sakeet
quelle
quelle
Antworten:
Nachdem Sie den Fehler erhalten haben, führen Sie
Suchen Sie nach der Datenbank in der Liste. Möglicherweise wurde eine Verbindung nicht beendet. Wenn Sie Verbindungen zur Datenbank finden, führen Sie aus
Wo
<SPID>
ist die SPID für die Sitzungen, die mit der Datenbank verbunden sind?Probieren Sie Ihr Skript aus, nachdem alle Verbindungen zur Datenbank entfernt wurden.
Leider habe ich keinen Grund, warum Sie das Problem sehen, aber hier ist ein Link, der zeigt, dass das Problem an anderer Stelle aufgetreten ist.
http://www.geakeit.co.uk/2010/12/11/sql-take-offline-fails-alter-database-failed-because-a-lock-could-not-error-5061/
quelle
set single_user
Versuch noch aussteht.KILL
würde es auch nicht lösen.KILL (87)
Ergebnisse inMsg 102, Level 15, State 1, Line 1 Incorrect syntax near '('.
erm ....Ich habe diesen Fehler wie folgt reproduziert.
Verbindung 1 (einige Minuten laufen lassen)
Anschlüsse 2 und 3
quelle
Versuchen Sie dies, wenn es "im Übergang" ist ...
http://learnmysql.blogspot.com/2012/05/database-is-in-transition-try-statement.html
quelle
SET OFFLINE
vom OP erwähnten Anweisung angezeigt (möglicherweise gibt es Szenarien, in denen dies funktioniert, aber für mich nicht)Ich werde dies hier hinzufügen, falls jemand so viel Glück hat wie ich.
Beachten Sie beim Überprüfen der Liste der Prozesse sp_who2 die Prozesse, die nicht nur für die betroffene Datenbank, sondern auch für den Master ausgeführt werden . In meinem Fall bezog sich das Problem, das die Datenbank blockierte, auf eine gespeicherte Prozedur, die eine xp_cmdshell startete.
Überprüfen Sie, ob Sie alle Prozesse in haben KILL / Rollback Zustand für Master - Datenbank
Wenn Sie das gleiche Problem haben, hilft wahrscheinlich nur der Befehl KILL nicht. Sie können den SQL Server neu starten. Besser ist es, die cmd.exe unter Windows-Prozessen unter dem SQL Server-Betriebssystem zu finden und zu beenden.
quelle
Gehen Sie in SQL Management Studio zu Sicherheit -> Anmeldungen und doppelklicken Sie auf Ihre Anmeldung. Wählen Sie in der linken Spalte Serverrollen aus, und überprüfen Sie, ob sysadmin aktiviert ist.
In meinem Fall war ich in einem Konto ohne dieses Privileg angemeldet.
HTH!
quelle
Das Töten der Prozess-ID hat bei mir gut funktioniert. Wenn Sie den Befehl "EXEC sp_who2" über ein neues Abfragefenster ausführen ... und die Ergebnisse für die Datenbank "beschäftigt" filtern, hat es das Beenden der Prozesse mit dem Befehl "KILL" geschafft, den Trick auszuführen. Danach hat alles wieder funktioniert.
quelle
Nur um meine zwei Cent hinzuzufügen. Ich habe mich in die gleiche Situation gebracht, während ich nach den minimal erforderlichen Berechtigungen eines Datenbank-Logins gesucht habe, um die Anweisung erfolgreich auszuführen:
Es scheint, dass die ALTER-Anweisung erfolgreich ausgeführt wird , wenn sie mit einem Sysadmin- Login ausgeführt wird, aber sie erfordert den Teil zur Bereinigung von Verbindungen, wenn sie unter einem Login ausgeführt wird, der "nur" eingeschränkte Berechtigungen hat, wie:
PS Ich habe stundenlang versucht herauszufinden, warum "ALTER DATABASE .." nicht funktioniert, wenn es unter einem Login ausgeführt wird, das die dbcreator-Rolle + ALTER ANY DATABASE- Berechtigungen hat. Hier ist mein MSDN-Thread !
quelle
Ich weiß, dass dies ein alter Beitrag ist, aber ich bin kürzlich auf ein sehr ähnliches Problem gestoßen. Leider konnte ich keinen der Befehle zum Ändern der Datenbank verwenden, da keine exklusive Sperre gesetzt werden konnte. Aber ich konnte nie eine offene Verbindung zur Datenbank finden. Ich musste schließlich den Integritätsstatus der Datenbank zwangsweise löschen, um sie in einen Wiederherstellungsstatus zu zwingen, anstatt sie wiederherzustellen.
quelle
In seltenen Fällen (z. B. nachdem eine schwere Transaktion festgeschrieben wurde) verhindert ein laufender CHECKPOINT-Systemprozess, der eine DATEISperre für die Datenbankdatei hält, den Übergang in den MULTI_USER-Modus.
quelle
In meinem Szenario hat kein Prozess die Datenbank unter sp_who2 blockiert. Wir haben jedoch festgestellt, dass ausstehende Prozesse noch ausgeführt werden, da die Datenbank viel größer als unsere anderen Datenbanken ist. Aus diesem Grund wird die Datenbank unter der Verfügbarkeitsgruppe immer noch als rot / offline angezeigt, nachdem wir versucht haben, die Daten durch Klicken mit der rechten Maustaste auf die angehaltene Datenbank wieder aufzunehmen.
Um zu überprüfen, ob noch Prozesse ausgeführt werden, führen Sie einfach diesen Befehl aus: Wählen Sie Prozent abgeschlossen aus sys.dm_exec_requests aus, wobei Prozent_Komplett> 0 ist
quelle