2012-11-28 8 views
82

Ich verwende SQL Server 2008 R2 Standard (Version 10.50.1600.1) für meine Produktionswebsite und SQL Server Express Edition mit Advanced Services (v10.50.1600.1) für meine localhost als Datenbank.Fehler beim Wiederherstellen der SQL Server-Datenbank: Die angegebene Umwandlung ist nicht gültig. (SqlManagerUI)

Wenige Tage zurück ist mein SQL Server abgestürzt und ich musste eine neue 2008 R2 Express Version auf meinem localhost installieren. Es funktionierte gut, wenn ich einige ältere Versionen von Express Edition genommen wiederhergestellt, aber wenn ich versuche, Datenbank von .bak Datei wiederherzustellen, die von der Produktion Server genommen wird es verursacht den folgenden Fehler:

Error: Specified cast is not valid. (SqlManagerUI)

und wenn ich versuche, die zur Wiederherstellung mit Datenbank-Befehl

Use Master 
Go 
RESTORE DATABASE Publications 
FROM DISK = 'C:\Publications.bak' 
WITH MOVE 'Publications' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS2008R2\MSSQL\DATA\Publications.mdf',--adjust path 
MOVE 'AlPublications_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS2008R2\MSSQL\DATA\Publications.ldf' 

Es erzeugt einen anderen Fehler

Msg 3154, Level 16, State 4, Line 1
The backup set holds a backup of a database other than the existing 'Publications' database.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.

ich habe Quer die Versionen geprüft. Sie scheinen alle zu mir passen, wie in der Abbildung unten gezeigt

Zuvor konnte ich eine Datenbank von der Standardversion zu Express Edition wiederherstellen, aber jetzt schlägt es fehl. Ich habe die Datenbank gelöscht und versucht, sie neu zu erstellen. Das scheitert auch.

Ich bin mir nicht sicher, was ich falsch mache. Ich würde schätzen, Hilfe in Bezug auf

Problem wurde behoben wie es scheint. BAK-Datei war beschädigt. Als ich es mit einer anderen Datei versuchte, funktionierte es.

+0

ich bin nicht in diesem, aber schnelle Frage, ist x86 und x64 arhitecture in der Datenbank kompatibel? –

+0

Ich hatte die vorherige Wiederherstellungsdatenbank zu diesem Zeitpunkt, ich hatte kein solches Problem. Aus irgendeinem Grund jetzt generieren Fehler Ich bin nicht sicher, ob Datenbankserver Kollation Probleme verursacht – Learning

+0

Versuchen Sie, hinzufügen ', REPLACE' zum T-SQL-Befehl, um die bestehende AlHabtoorPublications-Datenbank zu überschreiben. – SchmitzIT

Antwort

38

Die GUI kann manchmal unbeständig sein. Der Fehler bei der Verwendung von T-SQL liegt darin, dass Sie versuchen, eine vorhandene Datenbank zu überschreiben, aber nicht angegeben haben, dass die vorhandene Datenbank überschrieben/ersetzt werden soll. Folgendes könnte funktionieren:

Use Master 
Go 
RESTORE DATABASE Publications 
    FROM DISK = 'C:\Publications_backup_2012_10_15_010004_5648316.bak' 
    WITH 
    MOVE 'Publications' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS2008R2\MSSQL\DATA\Publications.mdf',--adjust path 
    MOVE 'Publications_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS2008R2\MSSQL\DATA\Publications.ldf' 
, REPLACE -- Add REPLACE to specify the existing database which should be overwritten. 
+0

Odd, ich habe Ihre ursprüngliche Aussage wieder verwendet. In jedem Fall war das einzige Thign, das ich hinzufügte, die letzte Zeile: ', ERSETZEN' – SchmitzIT

+0

Es frustriert mich ich hoffe, ich kann es bald lösen – Learning

+1

Eigentlich bedeutet die' Failed: 38' 'erreichte Ende der Datei'. (Führen Sie in einem Befehlsfenster "NET HELPMSG 38" aus). Das deutet normalerweise auf eine beschädigte Sicherung hin: http://stackoverflow.com/questions/5656363/restore-sql-server-database-failed-38-reached-the-end-of-the-file – SchmitzIT

12

Endlich ist dieser Fehler bei einer Wiederherstellung weg. Aus Frustration bin ich zu SQL2012 gewechselt, aber ich denke, das würde wahrscheinlich noch 2008R2 funktionieren. Ich hatte die logischen Namen zu verwenden:

RESTORE FILELISTONLY 
FROM DISK = ‘location of your.bak file’ 

Und von dort lief ich eine RESTORE-Anweisung mit MOVE unter Verwendung von logischen Namen.

RESTORE DATABASE database1 
FROM DISK = '\\database path\database.bak' 
WITH 
MOVE 'File_Data' TO 'E:\location\database.mdf', 
MOVE 'File_DOCS' TO 'E:\location\database_1.ndf', 
MOVE 'file' TO 'E:\location\database_2.ndf', 
MOVE 'file' TO 'E:\location\database_3.ndf', 
MOVE 'file_Log' TO 'E:\location\database.ldf' 

Als es getan wurde Wiederherstellung, weinte ich fast vor Freude.

Viel Glück!

152

Konnte wegen Wiederherstellung der SQL Server 2012-Version Sicherungsdatei in SQL Server 2008 R2 oder noch weniger sein.

+10

Du hast mir den Nagel auf den Kopf geschlagen :) – ABH

+2

Man müsste stattdessen "Script generieren" verwenden. – kroiz

+0

Absolut das Problem für mich auch. – SimonGoldstone