it-swarm.com.de

Warum befindet sich meine Datenbank im Wiederherstellungsstatus?

Ich habe einige Unit-Tests, die Daten in einer Datenbank manipulieren. Um sicherzustellen, dass der Datenbankstatus während aller Tests immer gleich ist, versuchen wir zu Beginn dieser Tests, einen database snapshot Wiederherzustellen.

Der Wiederherstellungscode sieht folgendermaßen aus:

USE Master
ALTER DATABASE {0} SET SINGLE_USER WITH ROLLBACK IMMEDIATE 
RESTORE DATABASE {0} FROM DATABASE_SNAPSHOT = '{1}' WITH RECOVERY
ALTER DATABASE {0} SET MULTI_USER

Danach stellen die Tests eine Verbindung zur Datenbank her und tun alles, was sie tun müssen.

Das Problem ist, dass während des Debuggens der Tests die Datenbank für immer im Status stop belassen wird, wenn ich irgendwann auf die Schaltfläche Restoring klicken muss, um die Tests abzubrechen. Es ist seltsam, weil es nur passiert, wenn ich die Debug-Sitzung stoppe. Wenn ich 20 Tests habe und alle den Snapshot vor dem Test wiederherstellen, wird während dieser Testausführungen kein Fehler angezeigt.

Haben Sie Vorschläge, was dies verursachen könnte?

EDIT

Um die Antwort von @ usr zu ergänzen und die Datenbank zu Beginn der Tests aus dem inkonsistenten Zustand wiederherzustellen, muss der Wiederherstellungsanweisung die Option REPLACE hinzugefügt werden.

Es wird funktionieren, wenn es so ist:

USE Master
ALTER DATABASE {0} SET SINGLE_USER WITH ROLLBACK IMMEDIATE 
RESTORE DATABASE {0} FROM DATABASE_SNAPSHOT = '{1}' WITH RECOVERY, REPLACE
ALTER DATABASE {0} SET MULTI_USER
6
andrerpena

Wenn Sie ein RESTORE auf halbem Weg abbrechen, befindet sich die Datenbank in einem unbrauchbaren Zustand. Das macht Sinn: Einige Seiten sind alt, andere neu.

Durch das Stoppen des Debuggers wird der Clientprozess beendet, wodurch SQL Server die Verbindung und alle zugehörigen Sitzungen und Anforderungen beendet.

Starten Sie den letzten unterbrochenen Wiederherstellungsschritt neu, damit es funktioniert. Stellen Sie in Ihrem Fall die Wiederherstellung aus dem Snapshot erneut her.

6
usr