2012-10-29 6 views
21

Ich möchte eine SQL Server 2012 Standard-Datenbank in meine lokale Datenbank kopieren. Ich habe den Assistenten versucht, der beschwert, dass Localdb keine SQL Server 2005 oder spätere Express-Instanz ist. Ich habe auch ein Backup/Restore, sondern auf die in meinem localdb wiederherstellen ich die folgende Fehlermeldung erhalten ...Wie kopiere ich die SQL Server 2012-Datenbank in die lokale Datenbank-Instanz?

das Lauf ...

RESTORE DATABASE CSODev 
FROM DISK = 'C:\MyBckDir\CSODev.bak' 
WITH MOVE 'CSOdev_Data' TO 'C:\Users\cblair\CSOdev_Data.mdf', 
MOVE 'CSOdev_Log' TO 'C:\Users\cblair\CSOdev_Log.ldf', 
REPLACE 

Fehlermeldung bekomme ich ...

Verarbeitete 8752 Seiten für Datenbank 'CSODev' Datei 'CSOdev_Data' für Datei 1.
verarbeitet 5 Seiten für Datenbank 'CSODev' Datei 'CSOdev_Log' für Datei 1.

M sg 1853, Ebene 16, Status 1, Zeile 1
Die logische Datenbankdatei 'CSOdev_Log' wurde nicht gefunden. Geben Sie den vollständigen Pfad für die Datei an.
Msg 3167, Ebene 16, Status 1, Zeile 1
RESTORE konnte die Datenbank 'CSODEV' nicht starten.
Nachricht 3013, Ebene 16, Status 1, Zeile 1
RESTORE DATABASE wird abnormal beendet.

Die Datenbank endet im Modus "Recovery Pending". Es scheint, als ob es Probleme mit der Protokolldatei hat. Ich habe 2 verschiedene Backups ausprobiert, falls eines beschädigt wurde.

+0

Vielleicht versuchen Sie, Ihre Dateien anderswo als Ihren Profilordner zu platzieren. Was passiert, wenn Sie die Daten-/Protokolldateien beispielsweise nach C: \ Data verschieben? –

+0

Ich habe es versucht und immer noch dieselbe Fehlermeldung erhalten. –

+0

Ich war in der Lage, dies erfolgreich zu tun - Ich habe eine Datenbank auf einer normalen Instanz erstellt, gesichert und wiederhergestellt es in einer lokalen Datenbank-Instanz ganz gut: http://i.stack.imgur.com/rOOHq.png Ich bin Ich bin mir nicht sicher, welche Informationen in Ihrer Frage fehlen, aber Sie tun eindeutig etwas anderes.Ich weiß nicht, was ich fragen soll, um das herauszufinden. Tritt dies für eine Datenbank oder nur für diese spezifische Datenbank auf? –

Antwort

1

Ich hatte das gleiche Problem. Versuchen Sie Visual Studio als Administrator ausgeführt wird, und versuchen Sie den folgenden Befehl

RESTORE DATABASE CSODev 
FROM DISK = 'C:\MyBckDir\CSODev.bak' 
WITH NORECOVERY, MOVE 'CSOdev_Data' TO 'C:\Users\cblair\CSOdev_Data.mdf', 
MOVE 'CSOdev_Log' TO 'C:\Users\cblair\CSOdev_Log.ldf', 

UPDATE: Diese nicht gerade arbeiten!

Obwohl die obige Anweisung keine Fehler erzeugt und erfolgreich abgeschlossen wird, bleibt die Datenbank im Status "PENDING RECOVERY" und kann nicht in irgendeiner Weise aufgerufen werden. Als ich versuchte, die Datenbank mit 'RESTORE WITH RECOVER' wiederherzustellen, bekam ich den gleichen Fehler wie in der obigen Frage.

Also in meinem Fall endete ich die Wiederherstellung auf einem DEV-Server mit MSSQL 2008 R2 laufen und wählte dann: Aufgaben -> Skripte erstellen -> Objekte zum Skript & Weiter -> klicken Sie auf "Erweitert" -Taste -> Wählen Sie "Datentypen zu Skript": Schema & Daten. Führen Sie nun das generierte Skript für die lokale Datenbank aus.

3

Versuchen Sie, Ihre Datenbank als Schema und Daten zu scripten und dann das Skript lokal auszuführen.

+0

Tipp für alle, die hierher kommen, lesen Sie [MEMarks Antwort unten] (http://Stackoverflow.com/a/18792126). – Benjol

+0

Ich denke, Scripting der Datenbank ist der Weg für einige von uns. Ich denke, mein Problem ist vielleicht, dass die SQL Server-Instanzen unterschiedlich sind (wie 2005 gegenüber 2008). – vbullinger

4

Ich hatte das gleiche Problem, und nachdem ich ein wenig online recherchiert hatte, stieß ich auf eine geniale Methode, um es zum Laufen zu bringen (wenn auch ziemlich hacky). Grundsätzlich können Sie:

  1. Erstellen Sie eine SqlLocalDb-Instanz (SqlLocalDb c tmp -s).
  2. Stellen Sie die Datenbank wie oben beschrieben wieder her (z. B. SqlCmd -E -S <localdb connection string> -Q "RESTORE DATABASE ...").
  3. Stoppen Sie die SqlLocalDb-Instanz (SqlLocalDb p tmp).
  4. Löschen Sie die SqlLocalDb-Instanz (SqlLocalDb d tmp).
  5. Erstellen Sie eine neue SqlLocalDb-Instanz (SqlLocalDb c persistent -s).
  6. Erstellen Sie die Datenbank in der neuen Instanz durch Anbringen (SqlCmd -E -S <persistent connection string> -Q "Create Database <dbname> On (Filename = '<Mdf file location'), (Filename = '<Ldf Filename'>) For Attach"

Und hoffentlich sollte es funktionieren Siehe here für ursprüngliche Idee

Edit:... Added Jason Brady ‚s Korrektur der erstellen . Befehl

+2

Das hat bei mir funktioniert. Obwohl die Create Database-Syntax falsch war. Es sind buchstäblich 2 zusätzliche Zeichen, und Stack Overflow sagt mir, dass ich keine Bearbeitung vornehmen kann, es sei denn es ist mindestens 6. Es muss 'Create Database On (Dateiname = ') Für Attach' – Jason

2
RESTORE FILELISTONLY 
FROM DISK = 'D:\SQLBackups\yourdatabase.BAK' 


ALTER DATABASE yourdatabasename 
SET SINGLE_USER WITH 
ROLLBACK IMMEDIATE 

RESTORE DATABASE yourdatabasename 
FROM DISK = 'D:\SQLBackups\yourdatabase.BAK' 
with replace, 
move 'logical name from file stream' to 
'C:\yourdatabase.mdf', 
move 'logical name from file stream' to 'C:\Yourdatabase.ldf' 
ALTER DATABASE Qatar_DB SET MULTI_USER 
+1

Danke, funktioniert gut! – ssabbattini

+0

Diese Lösung funktionierte auch für mich richtig. Als eine Anmerkung, stellen Sie sicher, dass Sie zuerst die Datenbanken leer erstellen, dann führen Sie die oben genannte Abfrage für den richtigen Fall in LocalDB aus, damit dies funktioniert. Schemas aus verschiedenen Versionen scheinen rückwärts zu funktionieren Kompatibel (2012 -> 2010) – Truesky

5

hatte ich das gleiche Problem Was schließlich tat Arbeit war.

  1. zum Wiederherstellen der Datenbank Versuch (immer den Fehler im OP)
  2. die Datenbank Abnehmen
  3. Wiederanbringen der Datenbank

Was war im letzten Schritt passiert, dass SSDT ein Upgrade von der durchgeführt Datendateien, die anscheinend in einem älteren Format waren. Als das fertig war, begann die Datenbank ohne Probleme zu arbeiten!

+0

Sie, Sir, verdienen den grünen Tick! – Benjol

-1
  1. Sie können es manuell tun. Dies kann unter Verwendung von Punktnetz und Öffnen von zwei Arten von Verbindungen und Weiterleiten von Daten von einem von ihnen zu dem anderen erfolgen. aber das muss die gleichen Arten von Spalten in der lokalen erstellen.
  2. Sie können die Import-Optionen von MS Access 2007 prüfen
14

Es known limitation (ein echter Fehler in der Tat) ist für LocalDB. Es wird jedes RESTORE mit MOVE immer dann fehlschlagen, wenn sich Ihre Datenbankdateien in verschiedenen Ordnern befinden.

Sie müssen in den ursprünglichen Ordnern wiederherstellen (keine MOVE). Verwenden Sie das Cmd-Tool wie SUBST, wenn Sie ein Laufwerk fälschen müssen:/Pfad.

+0

Vielen Dank! Das hat meinen Tag gerettet. – nrodic

1

Gleiches Problem, danke für die Hilfe. Meine lokale Datenbank ist MS SQL 2014 Open "SQL Server 2014 Management Studio"

  1. Rechts auf die Datenbank klicken, gehen Sie auf "Aufgaben" auf "Offline schalten"
  2. Trennen Sie die Datenbank
  3. Attach die Datenbank

Es funktioniert für mich. Nachdem Sie die Datenbank gesichert haben, können Sie die Datenbank ohne Fehler wiederherstellen. Danke.