SQL Server: Datenbank steckt im Status "Wiederherstellen" fest

564

Ich habe eine Datenbank gesichert:

BACKUP DATABASE MyDatabase
TO DISK = 'MyDatabase.bak'
WITH INIT --overwrite existing

Und dann versucht, es wiederherzustellen:

RESTORE DATABASE MyDatabase
   FROM DISK = 'MyDatabase.bak'
   WITH REPLACE --force restore over specified database

Und jetzt steckt die Datenbank im Wiederherstellungszustand fest.

Einige Leute haben die Theorie aufgestellt, dass es daran liegt, dass die Sicherung keine Protokolldatei enthält und dass sie mithilfe von:

RESTORE DATABASE MyDatabase
WITH RECOVERY 

Nur dass das natürlich fehlschlägt:

Msg 4333, Level 16, State 1, Line 1
The database cannot be recovered because the log was not restored.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.

Und genau das, was Sie in einer katastrophalen Situation wollen, ist eine Wiederherstellung, die nicht funktioniert.


Die Sicherung enthält sowohl eine Daten- als auch eine Protokolldatei:

RESTORE FILELISTONLY 
FROM DISK = 'MyDatabase.bak'

Logical Name    PhysicalName
=============   ===============
MyDatabase    C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MyDatabase.mdf
MyDatabase_log  C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MyDatabase_log.LDF
Ian Boyd
quelle
3
Ich hatte genau das gleiche Problem und alle Lösungen schlugen fehl. Interessanterweise habe ich mich direkt beim SQL Server angemeldet und den DROP DATABASE dbBefehl über SSMS ausgegeben, und es hat funktioniert (früher habe ich SSMS von einem anderen Computer verwendet, um die Befehle auszugeben). Ich vermute, die anderen Lösungen hätten auch funktioniert.
Salman A

Antworten:

437

Sie müssen die WITH RECOVERYOption mit Ihrem Datenbankbefehl verwenden RESTORE, um Ihre Datenbank im Rahmen des Wiederherstellungsprozesses online zu schalten.

Dies ist natürlich nur dann der Fall, wenn Sie keine Transaktionsprotokollsicherungen wiederherstellen möchten, dh nur eine Datenbanksicherung wiederherstellen möchten und dann auf die Datenbank zugreifen können.

Ihr Befehl sollte so aussehen,

RESTORE DATABASE MyDatabase
   FROM DISK = 'MyDatabase.bak'
   WITH REPLACE,RECOVERY

Möglicherweise haben Sie mit dem Assistenten zum Wiederherstellen der Datenbank in SQL Server Management Studio mehr Erfolg. Auf diese Weise können Sie die spezifischen Speicherorte der Dateien, die Option zum Überschreiben und die Option WITH Recovery auswählen.

John Sansom
quelle
3
Ich musste die Wiederherstellungsanweisung nie verwenden, wenn ich das tat, was er tut. MIT ERSETZEN sollte ausreichen.
Sam
8
Ja, ich habe NORECOVERY verwendet, aber der Wiederherstellungsprozess hängt. Mit WITH RECOVERY, REPLACE hängt der Prozess nicht mehr
Junior Mayhé
Dies löste mein Problem. Wir hatten mitten in einer Wiederherstellung einen SAN-Fehler und dies war eine schnelle und saubere Lösung.
Registrierter Benutzer
Ich hatte heute ein ähnliches Problem mit einer SQL Server 2005-Datenbank. In meinem Fall musste ich der WITH-Klausel ', RESTART' hinzufügen, um das Problem zu lösen. Es gab mir eine Fehlermeldung, dass der vorherige Vorgang nicht erfolgreich war.
XpiritO
3
@FistOfFury Wenn sich ein vorheriger Wiederherstellungsvorgang in derselben Datenbank in einem angehaltenen / Ruhezustand befindet, dann ja. Das einfache Stoppen / Abbrechen der In-Process-Wiederherstellung sollte den gleichen Effekt haben.
John Sansom
692

In dieser Situation wurde eine Datenbank mit Symantec Backup Exec 11d in einer SQL Server 2005 Standard Edition-Instanz wiederhergestellt. Nach Abschluss des Wiederherstellungsauftrags blieb die Datenbank im Status "Wiederherstellen". Ich hatte keine Probleme mit dem Speicherplatz - die Datenbank hat den Status "Wiederherstellen" einfach nicht verlassen.

Ich habe die folgende Abfrage für die SQL Server-Instanz ausgeführt und festgestellt, dass die Datenbank sofort verwendbar wurde:

RESTORE DATABASE <database name> WITH RECOVERY
Evan Anderson
quelle
4
Wir hatten eine DB, die 2 Stunden lang wiederhergestellt war. Wir haben diesen Befehl von einer anderen Maschine gegen den Master ausgeführt und er hat uns sofort repariert. Vielen Dank!
Pete
11
+1, mit einem Gotcha. Als ich dies ausführte, erhielt ich eine Fehlermeldung, dass die Datenbank bereits vollständig wiederhergestellt wurde. Es wurde jedoch immer noch der Status "In Wiederherstellung" angezeigt. Also habe ich in Management Studio mit der rechten Maustaste darauf geklickt, auf Aktualisieren geklickt und es war wieder normal.
dario_ramos
2
Ich habe mit dem Mng Studio-Assistenten wiederhergestellt, einen neuen Datenbanknamen eingegeben, aber versehentlich die Dateinamen wie bei einer vorhandenen Datenbank belassen. Ich habe die Fehlermeldung "Wiederherstellung fehlgeschlagen, aber Protokollende erfolgreich abgeschlossen" erhalten, und die an diese Dateien angehängte Datenbank steckte in einem Wiederherstellungszustand fest. Dieser Befehl scheint die Datenbank in ihren vorherigen Zustand zurückversetzt zu haben.
Chris
3
Das hat funktioniert. Ich habe versucht, eine Sicherung in einer Seitendatenbank wiederherzustellen, aber meine Hauptdatenbank wurde aus irgendeinem Grund wiederhergestellt. Dadurch wurde meine Datenbank tatsächlich wiederhergestellt. Vielen Dank!
Aravindh
2
Bei einigen Standardeinstellungen des SSMS-Wiederherstellungsassistenten bleibt die Quelldatenbank im Wiederherstellungsstatus, sodass Sie verschiedene Sicherungen oder Protokolle ohne Angst vor Benutzern wiederherstellen können. Mit diesem Befehl können Sie die Datenbank nach Abschluss des Vorgangs wieder in den Normalzustand zurückversetzen.
Tim Lehner
102

So geht's:

  1. Beenden Sie den Dienst (MSSQLSERVER).
  2. Benennen oder löschen Sie die Datenbank- und Protokolldateien (C: \ Programme \ Microsoft SQL Server \ MSSQL.1 \ MSSQL \ Data ...) oder wo immer Sie die Dateien haben;
  3. Starten Sie den Dienst (MSSQLSERVER).
  4. Löschen Sie die Datenbank mit Problem;
  5. Stellen Sie die Datenbank erneut her.
Tipu Delacablu
quelle
Tipu, danke dafür. Ich hatte ein ähnliches Problem wie das Originalposter, aber es wurde dadurch verursacht, dass dem Server beim Wiederherstellen der Speicherplatz ausgeht und somit ein dauerhafter Wiederherstellungsstatus verursacht wurde.
Pauk
8
Warum nicht einfach die Datenbank löschen? Auf diese Weise müssen Sie den Dienst nicht beenden.
ErikE
8
@ErikE Für mich sagte SQL Server, dass es keine Datenbank mitten in einer Wiederherstellung löschen kann, obwohl es nicht wirklich wiederhergestellt wurde ....
Erik Philips
@ErikPhilips In diesem Fall ist man vermutlich wieder damit beschäftigt, den Dienst zu beenden. Ich frage mich, ob dies jedes Mal oder nur in bestimmten Fällen des Problems der festgefahrenen Wiederherstellung passiert.
ErikE
5
In meinem Fall war es ausreichend, die Datenbank, die im Status "Wiederherstellen ..." hing, mit dem SQL-Befehl drop database <dbname>in einem Abfragefenster zu löschen. Dann habe ich mit der rechten Maustaste auf Datenbanken geklickt und Aktualisieren ausgewählt, wodurch der Eintrag in Management Studio entfernt wurde. Danach habe ich eine neue Wiederherstellung durchgeführt, die einwandfrei funktioniert hat ( beachten Sie, dass das Offline-Schalten nicht funktioniert hat, ein Neustart des SQL-Dienstes nicht funktioniert hat und ein Neustart des Servers ebenfalls nicht funktioniert hat).
Matt
84

Ich hatte einen ähnlichen Vorfall beim Stoppen eines sekundären Protokollversand-Servers. Nach dem Befehl zum Entfernen des Servers aus dem Protokollversand und zum Stoppen des Protokollversands vom Primärserver blieb die Datenbank auf dem Sekundärserver nach dem Befehl im Wiederherstellungsstatus hängen

RESTORE DATABASE <database name> WITH RECOVERY

Die Datenbanknachrichten:

RESTORE DATABASE hat 0 Seiten in 18.530 Sekunden (0.000 MB / s) erfolgreich verarbeitet.

Die Datenbank war nach diesen 18 Sekunden wieder verwendbar.

Hans
quelle
6
Besonders nützlich, wenn Sie die Datenbank bereits wiederhergestellt haben, aber die Option
RECOVERY
2
Dies war alles, was ich brauchte, um den Status "Wiederherstellen" zu verlassen, nachdem eine Sicherung dieser Datenbank unter einem anderen DB-Namen wiederhergestellt wurde. Vielen Dank.
Sean
81

Ich hatte ein ähnliches Problem beim Wiederherstellen mit SQL Management Studio. Ich habe versucht, eine Sicherung der Datenbank in einer neuen mit einem anderen Namen wiederherzustellen. Zuerst schlug dies fehl und nach dem Korrigieren der Dateinamen der neuen Datenbank wurde es erfolgreich ausgeführt - auf jeden Fall trat das von mir beschriebene Problem erneut auf, selbst wenn ich es vom ersten Mal an richtig verstanden habe. Nach der Wiederherstellung blieb die ursprüngliche Datenbank mit einem (Wiederherstellen ...) neben ihrem Namen. In Anbetracht der Antworten des obigen Forums (Bhusans) habe ich versucht, im Abfrage-Editor nebenbei Folgendes auszuführen:

RESTORE DATABASE "[NAME_OF_DATABASE_STUCK_IN_RESTORING_STATE]"

was das Problem behoben hat. Ich hatte zuerst Probleme wegen des Datenbanknamens, der Sonderzeichen enthielt. Ich habe dies durch Hinzufügen von doppelten Anführungszeichen behoben - einfache Anführungszeichen würden nicht funktionieren und einen Fehler "Falsche Syntax in der Nähe von ..." ergeben.

Dies war die minimale Lösung, mit der ich versucht habe, dieses Problem zu beheben (Datenbank steckt im Wiederherstellungszustand fest), und ich hoffe, dass sie auf weitere Fälle angewendet werden kann.

Demetris Leptos
quelle
2
Perfekt funktioniert - ohne es wieder abreißen zu müssen. 3 Dbs von jeweils 80+ Gb dauern eine Weile! Vielen Dank!
Christer
1
Ich habe es fast in der Produktionsumgebung gemacht. Ich habe es zuerst auf lokaler Ebene versucht, bin in der gleichen Situation gelandet und habe Ihren Kommentar gefunden. Lektion gelernt: Verwenden Sie Skripte und vertrauen Sie SSMS in wichtigen Situationen nicht.
Mariusz
1
Ich habe dieses Problem beim Wiederherstellen einer Nur-Kopie-Dateisicherung einer Datenbank in einer neuen Datenbank. Die ursprüngliche Datenbank zeigte den Fehler. Diese Lösung funktionierte und die Antwort lautete "RESTORE DATABASE hat 0 Seiten in 0,263 Sekunden (0,000 MB / s) erfolgreich verarbeitet." Es scheint also, dass SQL Server nur über den Status der Datenbank verwirrt war.
R. Schreurs
1
Funktionierte für mich, aber nur, als ich die doppelten Anführungszeichen entfernte - ich hatte nur [MY_DB_NAME] als Parameter.
StackOverflowUser
34

OK, ich habe ein ähnliches Problem und genau wie im Fall von Pauk wurde es dadurch verursacht, dass dem Server beim Wiederherstellen der Speicherplatz ausgeht und somit ein dauerhafter Wiederherstellungsstatus verursacht wurde. Wie kann ich diesen Status beenden, ohne die SQL Server-Dienste zu beenden?

Ich habe eine Lösung gefunden :)

Drop database *dbname*
ErikE
quelle
29

Die Option WITH RECOVERY wird standardmäßig verwendet, wenn die Befehle RESTORE DATABASE / RESTORE LOG ausgeführt werden. Wenn Sie im "Wiederherstellungs" -Prozess stecken bleiben, können Sie eine Datenbank wieder in den Online-Status versetzen, indem Sie Folgendes ausführen:

RESTORE DATABASE YourDB WITH RECOVERY
GO

Wenn mehrere Dateien wiederhergestellt werden müssen, erfordern CLI-Befehle WITH NORECOVERY bzw. WITH RECOVERY. Nur die letzte Datei im Befehl sollte WITH RECOVERY haben, um die Datenbank wieder online zu schalten:

RESTORE DATABASE YourDB FROM DISK = 'Z:\YourDB.bak'
WITH NORECOVERY
GO
RESTORE LOG YourDB FROM DISK = 'Z:\YourDB.trn'
WITH RECOVERY
GO

Sie können den SQL Server Management Studio-Assistenten auch verwenden:

Geben Sie hier die Bildbeschreibung ein

Es gibt auch einen virtuellen Wiederherstellungsprozess, aber Sie müssen Lösungen von Drittanbietern verwenden. Normalerweise können Sie eine Datenbanksicherung als Live-Online-Datenbank verwenden. ApexSQL und Idera haben ihre eigenen Lösungen. Überprüfung durch SQL Hammer über ApexSQL Restore . Die virtuelle Wiederherstellung ist eine gute Lösung, wenn Sie mit einer großen Anzahl von Sicherungen arbeiten. Der Wiederherstellungsprozess ist viel schneller und kann auch viel Speicherplatz auf dem Festplattenlaufwerk sparen. Zum Vergleich können Sie sich hier die Infografik ansehen .

Marko Krstic
quelle
23

Das mag ziemlich offensichtlich sein, aber es hat mich gerade gestolpert:

Wenn Sie eine Endprotokollsicherung durchführen, kann dieses Problem auch dadurch verursacht werden, dass diese Option im SSMS-Wiederherstellungsassistenten aktiviert ist - "Quelldatenbank im Wiederherstellungsstatus belassen (WITH NORECOVERY)".

Geben Sie hier die Bildbeschreibung ein

TrailJon
quelle
7
Wenn Sie sich in diesem Zustand befinden, ist es am besten: 1. Klicken Sie mit der rechten Maustaste auf die Datenbank, gehen Sie zu Aufgaben-> Wiederherstellen-> Transaktionsprotokolle. 2. Suchen Sie die Sicherungsdatei, die für die Sicherung des Endprotokolls verwendet wurde. 3. Wiederherstellen Die Sicherung Die Wiederherstellung sollte erfolgreich sein und die Datenbank wieder online schalten.
Ryan Gross
16

Ich habe herausgefunden warum.

Wenn der Client, der den RESTORE DATABASEBefehl ausgegeben hat , während der Wiederherstellung die Verbindung trennt, bleibt die Wiederherstellung hängen.

Es ist seltsam, dass der Server, wenn er über eine Clientverbindung angewiesen wird, eine Datenbank wiederherzustellen, die Wiederherstellung erst abschließt, wenn der Client die ganze Zeit in Verbindung bleibt.

Ian Boyd
quelle
10
Alle SQL-Befehle erfordern, dass der Client die gesamte Zeit in Verbindung bleibt.
Mrdenny
2
@ Mrdenny: Ich hätte angenommen, dass Änderungen rückgängig gemacht werden, wenn ein Client die Verbindung trennt.
Ian Boyd
Ich habe das gleiche Problem beim Ausführen dieses Befehls mit dem PHP PDO-Treiber von Microsoft. Wenn Sie jedoch mit Microsoft SQL Server Management Studio arbeiten, funktioniert dies einwandfrei. Ich frage mich, wie ich meine PHP-Anwendung die ganze Zeit verbinden kann.
Kanal
Auch hier ist die Datenbank nach einer möglichen Verbindungsunterbrechung in der Wiederherstellung / Einzelbenutzerin stecken geblieben. Alle anderen SPIDs aus der neuen Sitzung wurden getötet, stecken aber immer noch fest. Konnte Datenbank als Lösung löschen.
Crokusek
10

Dieser hat funktioniert:

http://social.msdn.microsoft.com/Forums/en/sqldatabaseengine/thread/8dd1b91d-3e14-4486-abe6-e3a550bfe457

Ich hatte eine Situation, in der meine Datenbank den Wiederherstellungsstatus anzeigte und ich keine Abfragen ausführen und keine Verbindung mit unserer Software herstellen konnte.

Was ich getan habe, um aus dieser Situation herauszukommen, ist:

  1. Stoppen Sie alle SQL-bezogenen Dienste von Windows-Diensten.

  2. Ich habe den DATA-Ordner geöffnet, in dem sich die Ldf- und Mdf-Dateien im SQL-Verzeichnis befinden. Normalerweise lautet er wie folgt: "C: \ Programme *********** \ MSSQL \ DATA

  3. Dann habe ich sowohl die Ldf- als auch die Mdf-Datei der Datenbank kopiert: [Datenbankname] .mdf und [Datenbankname] _log.ldf

Ich habe diese beiden Dateien in einen anderen Ordner kopiert.

  1. Dann habe ich alle SQL-bezogenen Dienste (in Schritt 1) ​​erneut über Windows-Dienste gestartet.

  2. Startete mein MS SQL Management Studio mit normaler Anmeldung.

  3. Klicken Sie mit der rechten Maustaste auf die Täterdatenbank und drücken Sie LÖSCHEN (um die Datenbank überhaupt zu löschen).

  4. Alle LDF- und MDF-Dateien, die sich auf diese Datenbank beziehen, wurden aus dem DATA-Ordner entfernt (siehe Schritt 2).

  5. Erstellt eine neue Datenbank mit demselben Namen (derselbe Name der Datenbank, die ich in Schritt 6 gelöscht habe - die Datenbank der Schuldigen).

  6. Dann [Datenbankname] -> Rechtsklick -> Aufgaben -> Offline nehmen.

  7. Ich habe dann beide Dateien (ab Schritt 3) zurück in den DATA-Ordner kopiert (Schritt 2).

  8. [Datenbankname] -> Rechtsklick -> Aufgaben -> Online bringen.

Ameen Abuhilal
quelle
Das hat auch bei mir funktioniert. In Schritt 10 habe ich beschlossen, die vorhandenen Dateien zu überschreiben.
Divi Perdomo
8

Ich hatte ein . in meinem Datenbanknamen, und die Abfrage funktionierte aus diesem Grund nicht (mit der Angabe Falsche Syntax in der Nähe von '.'). Dann wurde mir klar, dass ich eine Klammer für den Namen benötige:

RESTORE DATABASE [My.DB.Name] WITH RECOVERY
Ashkan Sirous
quelle
5

In meinem Fall war es ausreichend, die Datenbank, die im Status "Wiederherstellen ..." hing, mit dem SQL-Befehl zu löschen

 drop database <dbname> 

in einem Abfragefenster.

Dann habe ich mit der rechten Maustaste auf Datenbanken geklickt und Aktualisieren ausgewählt, wodurch der Eintrag in Management Studio entfernt wurde. Danach habe ich eine neue Wiederherstellung durchgeführt, die einwandfrei funktioniert hat (beachten Sie, dass das Offline-Schalten nicht funktioniert hat, ein Neustart des SQL-Dienstes nicht funktioniert hat und ein Neustart des Servers ebenfalls nicht funktioniert hat).

Matt
quelle
3

Ich hatte dieses Problem, als ich auch einen TCP-Fehler im Ereignisprotokoll erhielt ...

Löschen Sie die Datenbank mit SQL oder klicken Sie mit der rechten Maustaste darauf im Manager "Löschen" und stellen Sie sie wieder her.

Ich habe standardmäßig damit begonnen. Skripten Sie den DB-Drop, erstellen Sie ihn neu und stellen Sie ihn dann wieder her.

ZeusT
quelle
3

Standardmäßig wird jeder RESTORE DATABASEmit RECOVERYSetup geliefert. Die Option 'NORECOVERY' teilt dem SQL Server im Wesentlichen mit, dass die Datenbank auf weitere Wiederherstellungsdateien wartet (dies kann eine DIFF- und eine LOG- Datei sein und, falls möglich, eine Tail-Log-Sicherungsdatei enthalten). Mit den Optionen 'WIEDERHERSTELLUNG' können Sie alle Transaktionen abschließen und die Datenbank für die Ausführung von Transaktionen bereitstellen.

Damit:

  1. Wenn Ihre Datenbank mit dem SIMPLE- Wiederherstellungsmodell eingerichtet ist, können Sie eine vollständige Wiederherstellung mit NORECOVERYOption nur durchführen , wenn Sie über eine DIFF- Sicherung verfügen . In der SIMPLE- Wiederherstellungsmodelldatenbank ist keine LOG- Sicherung zulässig .
  2. Andernfalls können Sie, wenn Ihre Datenbank mit dem Wiederherstellungsmodell FULL oder BULK-LOGGED eingerichtet ist, eine vollständige Wiederherstellung gefolgt von einer NORECOVERYOption durchführen, dann eine DIFF gefolgt von einer Option durchführen NORECOVERYund schließlich eine LOG- Wiederherstellung mit RECOVERYOption durchführen.

Denken Sie daran, DIE LETZTE RESTORE QUERY MUST HAVE RECOVERYOPTION . Es könnte ein expliziter Weg sein oder nicht. In Therms von T-SQL ist die Situation:

1.

 USE [master]
    GO
    RESTORE DATABASE Database_name 
    FROM DISK = N'\\path_of_backup_file.bak WITH FILE = 1, [REPLACE],NOUNLOAD, 
    RECOVERY -- This option could be omitted.
    GO

Die Option WITH REPLACE muss mit Vorsicht verwendet werden, da dies zu Datenverlust führen kann

Wenn Sie eine FULL- und DIFF-Sicherung durchführen, können Sie diese verwenden

   USE [master]
    GO
    RESTORE DATABASE Database_name
      FROM DISK = N'\\path_of_backup_file.bak' WITH FILE = 1, 
       NOUNLOAD,NORECOVERY
    GO
    RESTORE DATABASE Database_name
      FROM DISK =N'\\path_of_**diff**backup_file.bak' WITH FILE = 1, 
     NOUNLOAD, RECOVERY
    GO

 2. USE [master]
    GO
   -- Perform a Tail-Log backup, if possible. 
   BACKUP LOG Database_name
   GO
   -- Restoring a FULL backup
   RESTORE DATABASE Database_name
    FROM DISK = N'\\path_of_backup_file.bak' WITH FILE = 1, 
     NOUNLOAD,NORECOVERY
  GO 
  -- Restore the last DIFF backup
  RESTORE DATABASE Database_name
    FROM DISK = N'\\path_of_DIFF_backup_file.bak' WITH FILE = 1,
     NORECOVERY,NOUNLOAD
  GO
  -- Restore a Log backup
  RESTORE LOG Database_name
    FROM DISK = N'path_of_LOG_backup_file.trn' WITH FILE = 2,
    RECOVERY, NOUNLOAD
  GO

Natürlich können Sie eine Wiederherstellung mit der Option STATS = 10 durchführen , die den SQL Server anweist , alle 10% abgeschlossen zu melden.

Wenn Sie möchten, können Sie den Prozess beobachten oder in Echtzeit abfragen. Wie folgt:

USE[master]
GO
SELECT session_id AS SPID, command, a.text AS Query, start_time, percent_complete, dateadd(second,estimated_completion_time/1000, getdate()) as estimated_completion_time 
    FROM sys.dm_exec_requests r CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) a 
        WHERE r.command in ('BACKUP DATABASE','RESTORE DATABASE')
GO

Ich hoffe das hilft.

BMDaemon
quelle
2

Es kann auch Probleme beim Löschen einer feststeckenden Datenbank geben, wenn der Snapshot aktiviert ist. Bei mir hat das geklappt:

  1. Zuerst folgte ich den Schritten von Tipu Delacablu (lies ein paar Beiträge nach oben)
  2. Befehl ausführen: drop database [Ihre Datenbank], wodurch Sie einen Fehler erhalten, der Ihnen den Namen der Snapshot-Datenbank mitteilt
  3. Befehl ausführen: Datenbank löschen [Snapshot-Datenbank], und dann den Befehl in Schritt 2 erneut ausführen.
Gemeinschaft
quelle
1

Ich habe den Fall MyDbName (Wiederherstellen ...) aufgrund des SQL Express-Lizenzlimits.

In der Protokolldatei habe ich Folgendes gefunden:

CREATE DATABASE oder ALTER DATABASE sind fehlgeschlagen, da die resultierende kumulative Datenbankgröße Ihr Lizenzlimit von 10240 MB pro Datenbank überschreiten würde .

Wenn Sie also versuchen, eine größere Datenbank wiederherzustellen, müssen Sie beispielsweise Ihren SQL Express-Server auf Developer Edition umstellen .

Dmitry Pavlov
quelle
Es war die TFS-Datenbank und der TFS-Client sagte mir bereits: Datenbank voll.
cskwg
1

Beim Wiederherstellen der Datenbank mit SQL Server Management Studio ist ein ähnliches Problem aufgetreten, das im Wiederherstellungsmodus hängen geblieben ist. Nach mehreren Stunden der Problemverfolgung funktionierte die folgende Abfrage für mich. Die folgende Abfrage stellt die Datenbank von einer vorhandenen Sicherung auf einen vorherigen Status zurück. Ich glaube, der Haken ist, die .mdf- und .log-Datei im selben Verzeichnis zu haben.

RESTORE DATABASE aqua_lc_availability
FROM DISK = 'path to .bak file'
WITH RECOVERY
Ujjwal
quelle
0
  1. Lassen Sie zuerst den SQL Agent-Dienst überprüfen und ausführen.
  2. Verwendung von folgendem T-SQL:

    SELECT Dateiname FROM master.sys.sysaltfiles WHERE dbid = DB_ID ('db_name');

  3. Kontinuierliche Verwendung von T-SQL:

    RESTORE DATABASE FROM DISK = 'DB_path' WITH RESTART, REPLACE;

Ich hoffe das hilft!

Trung Nguyen
quelle
0

Alle auf WITH RECOVERY basierenden Optionen haben bei mir nicht funktioniert.

Die vollständige Wiederherstellung aus Management Studio wurde durchgeführt.

USE [master]
RESTORE DATABASE Sales_SSD
FROM  DISK = N'D:\databaseBackups02\Daily_Sales_20150309_0941.bak' 
WITH  FILE = 1,  
MOVE N'Sales_Data' TO N'C:\Data\SSD\Sales.mdf',  
MOVE N'Sales_Log' TO N'C:\Data\SSD\Sales_1.ldf',  
NOUNLOAD,  REPLACE,  STATS = 5
Erdling42
quelle
0

Ich hatte das gleiche Problem ... obwohl ich nicht weiß, warum in meiner Datenbank dieses Problem aufgetreten ist, da mein Laufwerk nicht voll war ... Es ist, als wäre es beschädigt oder so. Ich habe alle oben genannten Funktionen ausprobiert. Keiner von ihnen hat vollständig funktioniert. Ich dachte insbesondere, dass der Vorschlag, den Dienst zu beenden und die MDF- und LDF-Dateien zu löschen, funktionieren würde ... aber er ist bei der Wiederherstellung immer noch eingefroren?

Am Ende habe ich dieses Problem behoben, indem ich die Dateien wie erwähnt gelöscht habe. Statt jedoch erneut zu versuchen, die Datenbank wiederherzustellen, habe ich neue MDF- und .ldf-Dateien kopiert und diese mit dem Front-End-Anhang-Assistenten angehängt. Erleichterung, es hat funktioniert !!

Das Kopieren der neuen Dateien dauerte für immer, da ich eine virtuelle Maschine verwende. Das Kopieren und Einfügen über die Zwischenablage dauerte also ungefähr eine Stunde. Daher würde ich dies nur als letzten Versuch empfehlen.

Anthony Griggs
quelle
0

Was es für mich reparierte, war

  1. Beenden der Instanz
  2. Erstellen einer Sicherung der .mdf- und .ldf-Dateien im Datenordner
  3. Starten Sie die Instanz neu
  4. Löschen Sie die Datenbank beim Wiederherstellen
  5. Legen Sie die Dateien .mdf und .ldf wieder in den Datenordner
  6. Hängen Sie die Instanz an die Dateien .mdf und .ldf an
ChadJPetersen
quelle
0
RESTORE DATABASE {DatabaseName}
   FROM DISK = '{databasename}.bak'
   WITH REPLACE, RECOVERY
Rony Barua
quelle
Bitte weisen Sie auf die zusätzlichen Erkenntnisse hin, die diese Antwort im Vergleich zu älteren, akzeptierten und hoch bewerteten Antworten bietet. Das würde helfen, den Eindruck zu vermeiden, es gerade kopiert zu haben, in der Hoffnung, einen guten Ruf zu erlangen. Auch Nur-Code-Antworten (was der wichtigste sichtbare Unterschied ist) werden hier nicht geschätzt, da sie den falschen Eindruck erwecken, dass StackOverflow ein kostenloser Code-Schreibdienst ist.
Yunnosch
Ich habe die Formatierung korrigiert, um die Ähnlichkeit mit der älteren Antwort deutlicher zu machen. Sie können dies jedoch hier lernen: stackoverflow.com/editing-help, falls Sie in Zukunft versuchen, leichter lesbare Antworten zu geben.
Yunnosch
0

Verwenden Sie den folgenden Befehl, um dieses Problem zu beheben

RESTORE DATABASE [DatabaseName] WITH RECOVERY
Sumant Singh
quelle