Überprüfen Sie zunächst das SQL-Fehlerprotokoll, um festzustellen, ob es tatsächlich eine maximale Größe für das Protokoll erreicht hat. Wenn dies der Fall ist, hat die Abfrage keine Hoffnung auf Abschluss. Sie befindet sich wahrscheinlich bereits in einem Rollback-Status.
Selbst wenn es so ist, ziehe ich es immer vor, die Spid manuell zu töten (benutze sp_who2
oder sp_WhoIsActive
finde die Spid, dann mache eine kill 59
oder was auch immer). Sie können den Rollback-Status auch nur überprüfen, wenn Sie einen expliziten KILL ausführen. Weitere Informationen finden Sie in diesem verwandten Thread .
Da dies ein Löschen und kein Aktualisieren oder Einfügen ist, haben Sie möglicherweise großes Glück und stellen fest, dass es sofort zurückgesetzt wird. Wenn nicht, kann das Zurücksetzen genauso lange (oder länger) dauern wie bis zu diesem Punkt.
Verwenden Sie, um den Rollback-Status anzuzeigen
kill 59 with statusonly
Leider habe ich festgestellt, dass dies häufig nichts Nützliches anzeigt, nur eine "0% vollständig". In diesem Fall müssen Sie sp_who2
die E / A und die CPU verwenden und beobachten, um festzustellen, ob sie noch etwas tun.
In Bezug auf den Neustart ist dies ein ernstes Risiko. Wenn das Spid aktiv zurückgesetzt wird (CPU und E / A ändern sich), wird beim Neustart von SQL die Datenbank nur vollständig offline geschaltet, bis das Rollback vollständig abgeschlossen ist (Stunden und Stunden). Aber , wenn die CPU und IO sind nicht bewegt, dann kann es in der Tat ist es sofort klar. In jedem Fall ist es ein Risiko.
Eine letzte Option, wenn die Dinge besonders schlimm sind: Wenn Sie ein Backup von kurz vor dem Start des Löschvorgangs haben (und es keine anderen Updates für die Datenbank gab) , besteht der schnellste Weg zur Wiederherstellung möglicherweise darin, die Datenbank einfach zu löschen und neu zu starten SQL und Wiederherstellung aus dem Backup.
Wenn Sie die Datenbank nicht löschen können (oder wenn Sie die Instanz bereits neu gestartet haben und das SQL-Fehlerprotokoll eine Wiederherstellungszeit von 24 Stunden vorhersagt), fahren Sie die SQL-Dienste herunter, löschen Sie die MDF- und LDF-Dateien von der Festplatte, starten Sie SQL und löschen Sie sie die (Geister-) Datenbank und Wiederherstellung aus dem Backup.
Natürlich würden Sie dies nur versuchen, wenn dies eine Back-End-Verarbeitungsdatenbank wäre, mit der Benutzer nicht interagiert haben.