it-swarm.com.de

Extreme Wartezeit, wenn eine SQL Server-Datenbank offline geschaltet wird

Ich versuche, einige Offline-Wartungsarbeiten (Wiederherstellen der Datenbankdatenbank von Live-Backup) für meine Entwicklungsdatenbank durchzuführen, aber der Befehl 'Offline nehmen' über SQL Server Management Studio führt extrem langsam - in der Größenordnung von mindestens 30 Minuten aus jetzt. Ich bin gerade am Ende meines Verstandes und ich kann online keine Hinweise darauf finden, was möglicherweise das Geschwindigkeitsproblem verursacht oder wie man es beheben kann.

Einige Sites haben angedeutet, dass offene Verbindungen zur Datenbank diese Verlangsamung verursachen, aber die einzige Anwendung, die diese Datenbank verwendet, ist die Instanz IIS der Dev-Maschine, und der Dienst wird angehalten - es gibt keine offenen Verbindungen mehr.

Was könnte diese Verlangsamung verursachen und was kann ich tun, um sie zu beschleunigen?

264
Erik Forbes

Nach einigen zusätzlichen Suchen (neue Suchbegriffe, inspiriert durch die Antwort von gbn und den Kommentar von u07ch zu der Antwort von KMike), fand ich das, was in 2 Sekunden erfolgreich abgeschlossen wurde:

ALTER DATABASE <dbname> SET OFFLINE WITH ROLLBACK IMMEDIATE

(Aktualisieren)

Wenn dies mit dem folgenden Fehler immer noch fehlschlägt, können Sie das Problem beheben, indem Sie diesen Blogbeitrag :

ALTER DATABASE ist fehlgeschlagen, da die Datenbank 'Datenbankname' nicht gesperrt werden konnte. Versuchen Sie es später erneut.

sie können den folgenden Befehl ausführen, um herauszufinden, wer Ihre Datenbank gesperrt hat:

EXEC sp_who2

Und verwenden Sie, was SPID Sie im folgenden Befehl finden:

KILL <SPID>

Führen Sie dann den Befehl ALTER DATABASE erneut aus. Es sollte jetzt funktionieren.

388
Erik Forbes

Höchstwahrscheinlich besteht eine Verbindung zur DB von irgendwo (seltenes Beispiel: asynchrones statistisches Update )

Um Verbindungen zu finden, verwenden Sie sys.sysprocesses

USE master
SELECT * FROM sys.sysprocesses WHERE dbid = DB_ID('MyDB')

Verwenden Sie ROLLBACK IMMEDIATE , um die Verbindung zu erzwingen.

USE master
ALTER DATABASE MyDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE
123
gbn

Haben Sie offene SQL Server Management Studio-Fenster, die mit dieser Datenbank verbunden sind?

Setzen Sie es in den Einzelbenutzermodus und versuchen Sie es erneut.

28
KM.

In meinem Fall hatte ich, nachdem ich so lange auf das Ende gewartet hatte, keine Geduld und schloss einfach das Managementstudio. Vor dem Beenden wurde die Erfolgsmeldung angezeigt, db ist offline. Die Dateien konnten umbenannt werden.

16
Rudy

führen Sie die gespeicherte Prozedur aus sp_who2

Auf diese Weise können Sie feststellen, ob Sperren vorhanden sind.

6
woodwa

Im 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 Prozess, Töten.

5
nzeemin

immer wenn Sie auf solche Dinge stoßen, sollten Sie immer an Ihr Transaktionsprotokoll denken. Die Änderung der Datenbank mit sofortiger Rücksetzung zeigt an, dass dies der Fall ist. Überprüfen Sie dies: http://msdn.Microsoft.com/en-us/library/ms189085.aspx

Entflechten Sie Kontrollpunkte usw. Sie müssen entscheiden, ob die Transaktionen in Ihrem Protokoll gespeichert werden sollen oder nicht, und wählen Sie dann den Modus aus, um Ihre Datenbank entsprechend auszuführen. Es gibt wirklich keinen Grund für Sie zu warten, aber auch keinen Grund, um Daten zu verlieren - Sie können beides haben.

4
yetanotherdave

Um dies zu umgehen, stoppte ich die Website, die mit der Datenbank in IIS verbunden war, und sofort wurde das "eingefrorene" "Take db offline" -Panel aufgehoben.

2
Dan

Das Schließen der Instanz von SSMS (SQL Service Manager), von der aus die Anforderung gestellt wurde, hat das Problem für mich gelöst.

2
Armand G.

In meinem Fall hatte ich vor dem Ausführen dieser Aktion einige Tabellen in der Datenbank betrachtet. Mein Benutzerkonto hatte eine aktive Verbindung zu dieser Datenbank in SSMS. Nachdem ich die Verbindung mit dem Server in SSMS getrennt hatte (wobei das Dialogfeld "Datenbank offline schalten" geöffnet war), war der Vorgang erfolgreich.

2
RamenNoodle

Setzen Sie in SSMS die Datenbank auf schreibgeschützt und dann zurück. Die Verbindungen werden geschlossen, wodurch die Sperren freigegeben werden.

In meinem Fall gab es eine Website, die offene Verbindungen zur Datenbank hatte. Diese Methode war leicht genug:

  1. Klicken Sie mit der rechten Maustaste auf die Datenbank -> Eigenschaften -> Optionen
  2. Setzen Sie Database Read-Only auf True
  3. Klicken Sie bei der Warnmeldung auf "Ja". SQL Server schließt alle Verbindungen zur Datenbank.
  4. Öffnen Sie die Optionen erneut, und deaktivieren Sie den Nur-Lese-Modus
  5. Versuchen Sie jetzt, die Datenbank umzubenennen oder offline zu schalten.
1
zacharydl

Schließen Sie außerdem alle geöffneten Abfragefenster, die mit der betreffenden Datenbank verbunden sind.

1
Steve Woods

Ich habe alle Vorschläge ausprobiert und nichts hat funktioniert.

  1. EXEC sp_who
  2. Töte <SPID>

  3. ALTER DATABASE SET SINGLE_USER WITH Rollback Sofort

    ALTER DATABASE OFFLINE MIT ROLLBACK SOFORT EINGESTELLT

    Ergebnis: Die beiden 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 bei der Warnmeldung auf "Ja". SQL Server schließt alle Verbindungen zur Datenbank.

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 hat wie ein Zauber funktioniert

1
Viraj A

In meinem Fall habe ich den Tomcat-Server gestoppt. dann ging die DB sofort offline.

0
Java Main

Für mich musste ich einfach in den Jobaktivitätsmonitor gehen und zwei Dinge stoppen, die gerade verarbeitet wurden. Dann ging es sofort offline. In meinem Fall wusste ich jedoch, was diese zwei Prozesse waren und dass es in Ordnung war, sie zu stoppen.

0
craig

Denken Sie beim nächsten Mal daran, das Kontrollkästchen "Alle aktiven Verbindungen verwerfen" zu aktivieren. Ich war auch auf SQL_EXPRESS auf dem lokalen Computer ohne Verbindungen, aber diese Verlangsamung trat für mich auf, es sei denn, ich habe das Kontrollkästchen aktiviert.

0
Brett Drake

In meinem Fall war die Datenbank mit einer alten Sharepoint-Installation verbunden. Durch das Stoppen und Deaktivieren der zugehörigen Dienste im Server-Manager wird die seit 40 Minuten laufende Aktion "Offline" deaktiviert und sofort abgeschlossen.

Möglicherweise möchten Sie überprüfen, ob die Datenbank derzeit von Diensten genutzt wird.

0
Jonathan