Frage

Ich habe eine Datenbank gesichert:

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

Und dann habe ich versucht, es wiederherzustellen:

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

Und jetzt bleibt die Datenbank im Wiederherstellungszustand hängen.

Einige Leute haben die Theorie aufgestellt, dass dies daran liegt, dass in der Sicherung keine Protokolldatei enthalten war und dass ein Rollforward durchgeführt werden musste mit:

RESTORE DATABASE MyDatabase
WITH RECOVERY 

Außer dass das natürlich scheitert:

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 Katastrophensituation wollen, ist eine Wiederherstellung, die nicht funktioniert.


Das Backup 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
War es hilfreich?

Lösung

Sie müssen die WITH RECOVERY Option verwenden, mit Ihrer Datenbank RESTORE Befehl, Ihre Online-Datenbank als Teil des Wiederherstellungsprozesses zu bringen.

Dies ist natürlich nur dann, wenn Sie Transaktionsprotokollsicherungen wiederherstellen haben nicht die Absicht, das heißt Sie nur wünschen, einen Datenbank-Backup wiederherstellen und dann in der Lage sein, auf die Datenbank zuzugreifen.

Ihr Befehl sollte wie folgt aussehen,

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

Sie können mehr Erfolg haben die Datenbank-Assistenten in SQL Server Management Studio wiederherstellen verwenden. Auf diese Weise kann die spezifischen Speicherort auswählen, die Option zum Überschreiben und die mit Hilfe von Recovery Option.

Andere Tipps

hatte ich diese Situation eine Datenbank zu einer SQL Server 2005 Standard Edition-Instanz mit Symantec Backup Exec 11d wiederherzustellen. Nachdem der Wiederherstellungsauftrag abgeschlossen blieb die Datenbank in einem „Wiederherstellen“ -Zustand. Ich hatte keinen Speicherplatz issues-- die Datenbank einfach nicht kam aus dem „Wiederherstellen“ -Zustand.

lief ich die folgende Abfrage für die SQL Server-Instanz und stellte fest, dass die Datenbank wurde sofort nutzbar:

RESTORE DATABASE <database name> WITH RECOVERY

Hier ist, wie Sie es tun:

  1. Beenden Sie den Dienst (MSSQLSERVER);
  2. , um die Datenbank und die Protokolldateien (C: \ Programme \ Microsoft SQL Server \ MSSQL.1 \ MSSQL \ Data ...) umbenennen oder löschen oder wo auch 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.

hatte ich einen ähnlichen Vorfall mit einem Protokollversand sekundären Server zu stoppen. Nach dem Befehl den Server aus dem Protokollversand zu entfernen und beendete das Protokoll vom primären Server auf sekundären Server die Datenbank Versand bei der Wiederherstellung Status nach dem Befehl steckengeblieben

RESTORE DATABASE <database name> WITH RECOVERY

Die Datenbanknachrichten:

  

RESTORE DATABASE erfolgreich verarbeitet 0 Seiten in 18,530 Sekunden   (0.000 MB / s).

Die Datenbank wurde wieder nutzbar nach diesen 18 Sekunden.

Ich hatte ein ähnliches Problem mit der Wiederherstellung von SQL Management Studio. Ich habe versucht, eine Sicherung der Datenbank in einen neuen mit einem anderen Namen wieder herzustellen. Zunächst scheiterte dies und nach der neuen Datenbank der Dateinamen zur Festsetzung es erfolgreich durchgeführt wurde - in jedem Fall das Problem beschreibe ich wieder aufgetreten, auch wenn ich dieses Recht von der ersten Zeit. Also, nach der Restaurierung blieb die ursprüngliche Datenbank mit einem (Wiederherstellen ...) neben ihren Namen. In Anbetracht der Antworten des Forums oben (Bhusan der) Ich habe versucht, in der Abfrage-Editor auf der Seite läuft wie folgt vor:

RESTORE DATABASE "[NAME_OF_DATABASE_STUCK_IN_RESTORING_STATE]"

, die das Problem behoben. Zuerst war ich wegen der Datenbanknamen Probleme, die Sonderzeichen enthalten. Ich beschloss, dies durch doppelte Anführungszeichen Hinzufügen um -. Apostrophe würde einen nicht funktionieren geben „falsche Syntax in der Nähe von ...“ Fehler

Das war die Minimallösung habe ich versucht, dieses Problem (in der Wiederherstellung Zustand steckt Datenbank) zu lösen und ich hoffe, kann es mehr Fälle angewandt werden.

OK, ich habe ähnliches Problem und genau so, wie es im Fall von Pauk war, wurde es von dem Server verursacht den Speicherplatz laufen, während der Wiederherstellung und verursachte so einen dauerhaften Wiederherstellung Zustand. Wie um diesen Zustand zu beenden, ohne SQL Server-Dienste zu stoppen?

Ich habe eine Lösung gefunden:)

Drop database *dbname*

WITH RECOVERY-Option wird standardmäßig verwendet, wenn RESTORE DATABASE / RESTORE LOG-Befehle ausgeführt wird. Wenn Sie in „Wiederherstellen“ Prozess stecken können Sie eine Datenbank zu Online-Status durch die Ausführung bringen:

RESTORE DATABASE YourDB WITH RECOVERY
GO

Wenn es eine Notwendigkeit für mehrere Dateien wiederherstellen, CLI-Befehle erfordert WITH NORECOVERY und WITH RECOVERY jeweils - nur die letzte Datei in Befehl sollte WITH RECOVERY hat die Datenbank online zu bringen:

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 SQL Server Management Studio-Assistenten verwenden, auch:

eingeben Bild Beschreibung hier

Es gibt auch virtuellen Wiederherstellungsprozess, aber Sie werden 3rd-Party-Lösungen verwenden. Normalerweise können Sie eine Datenbanksicherung als Live-Online-Datenbank verwenden. ApexSQL und Idera hat ihre eigenen Lösungen. Bewertung von SQL Hammer über ApexSQL wiederherstellen . Virtuelle Wiederherstellung ist eine gute Lösung, wenn Sie mit einer großen Anzahl von Backups zu tun hat. Wiederherstellungsprozess ist viel schneller und auch viel Platz auf der Festplatte Laufwerk speichern. Sie können einen Blick auf Infografik hier für einen Vergleich.

Das kann ziemlich offensichtlich sein, aber es ausgelöst mich bis jetzt nur:

Wenn Sie eine Sicherung des Protokollfragments nehmen, kann dieses Problem auch, indem er diese Option in der SSMS geprüft verursacht wird Wiederherstellungs-Assistenten - „Quelldatenbank in der Wiederherstellung des Zustand verlassen (MIT NORECOVERY)“

eingeben Bild Beschreibung hier

Ich habe herausgefunden, warum.

Wenn der Client, der die RESTORE DATABASE Befehl trennt während der Wiederherstellung ausgegeben, wird die Wiederherstellung geklebt werden.

Es ist seltsam, dass der Server, wenn gesagt, eine Datenbank von einem Client-Verbindung wieder herzustellen, wird nicht die Wiederherstellung beenden, es sei denn der Kunde die ganze Zeit verbunden bleibt.

Dieses hier 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 zu 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 sieht es so aus:„C:\Programme***********\MSSQL\DATA

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

Ich habe beide Dateien in einen anderen Ordner kopiert.

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

  2. Habe mein MS SQL Management Studio mit normaler Anmeldung gestartet.

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

  4. Alle zu dieser Datenbank gehörenden LDF- und MDF-Dateien wurden aus dem DATA-Ordner (in Schritt 2 erwähnt) entfernt.

  5. Erstellte eine neue Datenbank mit demselben Namen (gleicher Name wie die Datenbank, die ich in Schritt 6 gelöscht habe – die Täterdatenbank).

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

  7. Anschließend habe ich beide Dateien (aus Schritt 3) zurück in den DATA-Ordner kopiert (Schritt 2).

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

Ich hatte ein. in meinem Datenbank-Namen, und die Abfrage nicht funktionierte, weil die (sagt falsche Syntax nahe ‚‘) Dann wurde mir klar, dass ich eine Halterung für den Namen:

RESTORE DATABASE [My.DB.Name] WITH RECOVERY

In meinem Fall war es ausreichend, um die Datenbank löscht , die im Zustand hing "Wiederherstellen ..." mit dem SQL-Befehl

 drop database <dbname> 

in einem Abfragefenster.

Dann habe ich rechts geklickt auf Datenbanken und ausgewählt Aktualisieren , die den Eintrag in Management Studio entfernt. Danach habe ich ein neues wiederherzustellen, die gut funktioniert (beachten Sie, dass es offline zu bringen nicht funktioniert hat, ist ein Neustart des SQL-Dienst funktionierte nicht, ein Neustart des Servers nicht so gut funktionieren).

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

Lassen Sie die DB mit SQL oder rechten Maustaste darauf in Manager „löschen“ Und wieder aufrichten.

Ich habe tatsächlich tun dies standardmäßig gestartet. Script der DB Tropfen, neu erstellen und dann wiederherstellen.

Standardmäßig wird jedes RESTORE DATABASE mit RECOVERY eingerichtet. Die 'NORECOVERY' Optionen, sagt dem SQL-Server, der die Datenbank für mehr wartet Dateien wiederherstellen (könnte ein DIFF sein Datei und LOG Datei und könnten tail-log Backup-Datei, wenn möglich). Die ‚Verwertung‘ Optionen, alle Transaktionen beenden und die Datenbank lassen bereit Transaktionen auszuführen.

So:

  1. , wenn Ihre Datenbank mit eingerichtet ist SIMPLE Wiederherstellungsmodell, können Sie nur eine ausführen FULL mit NORECOVERY Option wiederherstellen, wenn Sie einen haben DIFF Backup. Nein LOG Sicherung sind in SIMPLE Wiederherstellungsmodell-Datenbank erlaubt.
  2. Andernfalls, wenn Sie Ihre Datenbank mit eingerichtet ist FULL oder BULK protokolliert Wiederherstellungsmodell, können Sie ein FULL ausführen, indem NORECOVERYoption gefolgt restore , dann ein DIFF , gefolgt von NORECOVERY, und endlich, führen Sie LOG wiederherstellen mit RECOVERY Option auszuführen.

Denken Sie daran, DIE LETZTE RESTORE QUERY RECOVERY OPTION MUST HAVE . Es könnte eine explizite Weise oder nicht. In therms von T-SQL, 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

MIT REPLACE-Option muss mit Vorsicht verwendet werden, da es zu Datenverlust führen kann

Oder, wenn Sie eine vollständige und DIFF Sicherung durchführen, können Sie dies mit

   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 mit der Option Wiederherstellung durchführen STATS = 10 , dass der SQL Server informiert alle 10% abgeschlossen zu melden.

Wenn Sie möchten, können Sie den Prozess beobachten oder in Echtzeit Abfrage wiederherzustellen. 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

Hoffe diese Hilfe.

Es kann auch Problem sein, eine stuck-Datenbank zu löschen, wenn Snapshot aktiviert ist. Für mich gearbeitet:

  1. Zuerst habe ich gefolgt Tipu Delacablu Schritte ( lesen Sie ein paar Beiträge oben)
  2. Befehl ausführen: drop database [Datenbank], mit dem Sie einen Fehler geben Sie den Namen der Snapshot-Datenbank zu sagen
  3. Befehl ausführen: drop database [Snapshot-Datenbank] und dann den Befehl in Schritt 2 laufen wieder
  4. .

Haben Sie versucht, ein ONLY VERIFY läuft? Nur um sicherzustellen, dass es eine solide Unterstützung.

http://msdn.microsoft.com/en-us/library /ms188902.aspx

  1. Lassen Sie überprüfen und SQL-Agent-Dienst läuft zunächst.
  2. Mit folgendem T-SQL:

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

  3. Mit T-SQL kontinuierlich:

    RESTORE DATABASE FROM 'DB_PATH' DISK = MIT NEUSTART, ersetzen;

Hoffe diese Hilfe!

die WITH RECOVERY Alle basierten Optionen nicht für mich arbeiten.

Was tat, war von Management Studio der vollständigen Wiederherstellung zu tun.

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

Ich hatte das gleiche Problem ... obwohl ich weiß nicht, warum meine Datenbank dieses Problem erlebt, wie mein Laufwerk nicht voll war ... Es ist wie es wurde beschädigt oder so etwas. Ich habe versucht, alle oben genannten keiner von ihnen vollständig funktionierte, dachte ich vor allem den Vorschlag, den Service und das Löschen der MDF- und LDF-Dateien zu stoppen funktionieren würde ... aber es fror immer noch auf wiederherstellen?

Ich landete diese Lösung durch das Löschen der Dateien, wie erwähnt, sondern die DB zu versuchen, wieder zu restaurieren kopiert ich frische MDF- über und LDF-Dateien und diese mit dem Front-End-Anlage Assistenten Befestigt. Erleichterung, es hat funktioniert !!

Es dauerte ewig über die neuen Dateien zu kopieren, wie ich eine virtuelle Maschine bin mit ... so Kopieren und Einfügen über die Zwischenablage wie eine Stunde nahm mit mir, so würde ich dies nur als ein letzten Versuch empfehlen.

Ich habe bekam die mydbname (Wiederherstellen ...) Fall wegen SQL Express Limit lizenziert.

In der Log-Datei, fand ich diese:

  

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

Also, wenn Sie versuchen, eine größere Datenbank wiederherzustellen, müssen Sie Ihren SQL Express Server Developer Edition wechseln zum Beispiel.

Was es für mich gerichtet war

  1. Stoppen der Instanz
  2. eine Sicherung der MDF- und LDF-Dateien im Datenordner erstellen
  3. Starten Sie die Instanz
  4. löschen Sie die Datenbank stecken Wiederherstellung
  5. setzen Sie die MDF- and.ldf Dateien wieder in den Datenordner
  6. Schließen Sie die Instanz auf die MDF- und LDF-Dateien
RESTORE DATABASE {DatabaseName}
   FROM DISK = '{databasename}.bak'
   WITH REPLACE, RECOVERY
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top