Ich versuche, eine Offline-Wartung (Wiederherstellung der Entwicklungsdatenbank aus einer Live-Sicherung) für meine Entwicklungsdatenbank durchzuführen, aber der Befehl "Offline übernehmen" über SQL Server Management Studio wird extrem langsam ausgeführt - in der Größenordnung von mehr als 30 Minuten. Ich bin fast am Ende und kann online keine Hinweise darauf finden, was das Geschwindigkeitsproblem verursachen könnte oder wie es behoben werden kann.
Einige Websites haben vorgeschlagen, dass offene Verbindungen zur Datenbank diese Verlangsamung verursachen. Die einzige Anwendung, die diese Datenbank verwendet, ist die IIS-Instanz meines Entwicklungscomputers, und der Dienst wird gestoppt. Es gibt keine offenen Verbindungen mehr.
Was könnte diese Verlangsamung verursachen und was kann ich tun, um sie zu beschleunigen?
quelle
Es besteht höchstwahrscheinlich eine Verbindung zur Datenbank von irgendwoher (ein seltenes Beispiel: asynchrone Statistikaktualisierung )
Verwenden Sie sys.sysprocesses, um Verbindungen zu finden
Verwenden Sie ROLLBACK IMMEDIATE, um die Trennung zu erzwingen
quelle
ALTER DATABASE failed because a lock could not be placed on database
BefehlKILL <SPID>
wird helfenHaben Sie geöffnete SQL Server Management Studio-Fenster, die mit dieser Datenbank verbunden sind?
Versetzen Sie es in den Einzelbenutzermodus und versuchen Sie es erneut.
quelle
In meinem Fall hatte ich, nachdem ich so lange darauf gewartet hatte, dass es fertig war, keine Geduld und schloss einfach das Managementstudio. Vor dem Beenden wurde die Erfolgsmeldung angezeigt, dass db offline ist. Die Dateien konnten umbenannt werden.
quelle
Führen Sie die gespeicherte Prozedur sp_who2 aus
Auf diese Weise können Sie feststellen, ob blockierende Sperren vorhanden sind. Töten Sie diese, um das Problem zu beheben.
quelle
In SSMS: Klicken Sie mit der rechten Maustaste auf das SQL Server-Symbol Aktivitätsmonitor. Prozesse öffnen. Finden Sie die verarbeitete Verbindung. Klicken Sie mit der rechten Maustaste auf den Vorgang, Töten.
quelle
Wenn Sie auf solche Dinge stoßen, sollten Sie immer an Ihr Transaktionsprotokoll denken. Die Änderung der Datenbank mit sofortigem Rollback zeigt an, dass dies der Fall ist. Überprüfen Sie dies: http://msdn.microsoft.com/en-us/library/ms189085.aspx
Bone-up auf Checkpoints usw. Sie müssen entscheiden, ob die Transaktionen in Ihrem Protokoll gespeichert werden sollen oder nicht, und dann den Modus auswählen, in dem Ihre Datenbank entsprechend ausgeführt wird. Es gibt wirklich keinen Grund für Sie, warten zu müssen, aber auch keinen Grund für Sie, Daten zu verlieren - Sie können beides haben.
quelle
Das Schließen der Instanz von SSMS (SQL Service Manager), von der aus die Anforderung gestellt wurde, löste das Problem für mich .....
quelle
In meinem Fall hatte ich mir vor dem Ausführen dieser Aktion einige Tabellen in der Datenbank angesehen. Mein Benutzerkonto hatte eine aktive Verbindung zu dieser Datenbank in SSMS. Nachdem ich die Verbindung zum Server in SSMS getrennt hatte (wobei das Dialogfeld "Datenbank offline schalten" geöffnet blieb), war der Vorgang erfolgreich.
quelle
Um dies zu umgehen, habe ich die Website gestoppt, die mit der Datenbank in IIS verbunden war, und sofort wurde das Fenster "eingefroren" "Datenbank offline schalten" nicht mehr eingefroren.
quelle
Ich habe alle folgenden Vorschläge ausprobiert und nichts hat funktioniert.
Töte <SPID>
ALTER DATABASE SET SINGLE_USER WITH Rollback Sofort
ALTER DATABASE SET OFFLINE MIT ROLLBACK SOFORT
Ergebnis: Beide oben genannten Befehle steckten ebenfalls fest.
4. Klicken Sie mit der rechten Maustaste auf die Datenbank -> Eigenschaften -> Optionen. Setzen Sie die schreibgeschützte Datenbank auf True. Klicken Sie im Dialogfeld mit der Warnung, dass SQL Server alle Verbindungen zur Datenbank schließt, auf "Ja".
Ergebnis: Das Fenster blieb beim Ausführen hängen.
Als letzten Ausweg habe ich den SQL Server-Dienst über den Konfigurationsmanager neu gestartet und dann ALTER DATABASE SET OFFLINE WITH ROLLBACK IMMEDIATE ausgeführt. Es funktionierte wie ein Zauber
quelle
Schließen Sie auch alle möglicherweise geöffneten Abfragefenster, die mit der betreffenden Datenbank verbunden sind;)
quelle
Stellen Sie in SSMS die Datenbank auf schreibgeschützt und dann zurück ein. Die Verbindungen werden geschlossen, wodurch die Schlösser freigegeben werden.
In meinem Fall gab es eine Website mit offenen Verbindungen zur Datenbank. Diese Methode war einfach genug:
Database Read-Only
True setzenquelle
Für mich musste ich nur in den Job Activity Monitor gehen und zwei Dinge stoppen, die verarbeitet wurden. Dann ging es sofort offline. In meinem Fall wusste ich jedoch, was diese beiden Prozesse waren und dass es in Ordnung war, sie zu stoppen.
quelle
In meinem Fall bezog sich die Datenbank auf eine alte Sharepoint-Installation. Durch das Stoppen und Deaktivieren verwandter Dienste im Server-Manager wurde die seit 40 Minuten ausgeführte Offline-Aktion "aufgehoben" und sofort abgeschlossen.
Möglicherweise möchten Sie überprüfen, ob derzeit Dienste die Datenbank verwenden.
quelle
sp_who2
diese Option aus, um festzustellen, welche Prozesse die Datenbank verwendenkill <PID>
, und stoppen Sie sie.Denken Sie beim nächsten Mal im Dialogfeld "Offline übernehmen" daran, das Kontrollkästchen "Alle aktiven Verbindungen löschen" zu aktivieren. Ich war auch auf SQL_EXPRESS auf einem lokalen Computer ohne Verbindungen, aber diese Verlangsamung trat bei mir auf, es sei denn, ich habe dieses Kontrollkästchen aktiviert.
quelle
In meinem Fall habe ich den Tomcat-Server gestoppt. dann ging die DB sofort offline.
quelle