Sicherung wiederherstellen schlägt fehl - Datei 'Db' kann nicht in '{…} .mdf' wiederhergestellt werden. Verwenden Sie WITH MOVE, um einen gültigen Speicherort für die Datei zu ermitteln

9

Beim Versuch, eine Wiederherstellung mit dem Befehl restore für eine Sicherungsdatei durchzuführen, die ich von einem Kunden erhalten habe, werden die folgenden Fehler angezeigt.

RESTORE DATABASE SFDB FROM DISK = N'C: \ Backup \ Backup.bak '

Irgendwelche Gedanken darüber, was ich tun kann, um dies zu korrigieren? Es wird nach dem MDF gesucht. Kann ich also davon ausgehen, dass die Sicherungsdatei, die ich habe, eine inkrementelle Sicherung und nicht die vollständige Sicherung ist, und deshalb wird nach der MDF gesucht?

Ich bin nicht sicher, ob 1) sie alle Daten (die gesamte Datenbank) angegeben haben oder 2) ich die richtigen Daten habe - und ich kann die Wiederherstellung mit den richtigen T-SQL-Befehlen durchführen - ich weiß nur nicht wie.

Hilfe wird geschätzt.

Msg 5133, Level 16, State 1, Line 2
Directory lookup for the file "D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\Db.mdf" failed with the operating system error 21(failed to retrieve text for this error. Reason: 15105).
Msg 3156, Level 16, State 3, Line 2
File 'Db' cannot be restored to 'D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\Db.mdf'. Use WITH MOVE to identify a valid location for the file.
Msg 5133, Level 16, State 1, Line 2
Directory lookup for the file "D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\Db_log.LDF" failed with the operating system error 21(failed to retrieve text for this error. Reason: 15105).
Msg 3156, Level 16, State 3, Line 2
File 'DbDev_log' cannot be restored to 'D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\Db_log.LDF'. Use WITH MOVE to identify a valid location for the file.
Msg 3634, Level 16, State 1, Line 2
The operating system returned the error '21(failed to retrieve text for this error. Reason: 15105)' while attempting 'GetVolumeInformation' on 'D:\'.
Msg 3013, Level 16, State 1, Line 2
RESTORE DATABASE is terminating abnormally.

RESTORE FileListOnly FROM DISK = N'C: \ Backup \ Backup.bak 'zeigt mir Folgendes ...

LogicalName PhysicalName    Type    FileGroupName   Size    MaxSize FileId  CreateLSN   DropLSN UniqueId    ReadOnlyLSN ReadWriteLSN    BackupSizeInBytes   SourceBlockSize FileGroupId LogGroupGUID    DifferentialBaseLSN DifferentialBaseGUID    IsReadOnly  IsPresent   TDEThumbprint
Db  D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\Db.mdf  D   PRIMARY 29622272    35184372080640  1   0   0   02925462-83CC-4222-8966-53229FA25B1C    0   0   29032448    512 1   NULL    269000000146900238  735C7F0E-F63D-4AA1-AC48-505A084AC00B    0   1   NULL
Db_log  D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\Db_log.LDF  L   NULL    40239104    2199023255552   2   0   0   71038B04-CBC9-4E4A-93AD-4E1268859CB2    0   0   0   512 0   NULL    0   00000000-0000-0000-0000-000000000000    0   1   NULL
DbDev_filestream    D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\Db  S   PRIMARY_FILESTREAM  4691012 0   65537   18000000011800001   0   627C9AAA-97BD-4991-9C8C-90C400226A9F    0   0   4784128 512 2   NULL    269000000146900238  735C7F0E-F63D-4AA1-AC48-505A084AC00B    0   1   NULL
user1060500
quelle

Antworten:

19

Schauen Sie sich die Ausgabe Ihres ersten Befehls noch einmal an. Es gibt eine Fehlermeldung, die Sie auf das Update hinweist.

Suchen Sie nach diesem Abschnitt:

Use WITH MOVE to identify a valid location for the file.

Grundsätzlich stimmt der Dateipfad auf Ihrem Computer nicht mit dem ursprünglichen Computer überein. Mit der Option MOVE können Sie das beheben.

Hier ist ein Beispiel für den Befehl RESTORE mit der Option MOVE :

USE [master]
RESTORE DATABASE [AdventureWorks2008R2] 
FROM  DISK = N'C:\SQL Backups\AdventureWorks2008R2.bak' 
WITH  FILE = 1,  
MOVE N'AdventureWorks2008R2_Data' TO N'C:\MyNewDataLocation\AdventureWorks2008R2_Data.mdf',  
MOVE N'AdventureWorks2008R2_Log' TO N'C:\MyNewLogLocation\AdventureWorks2008R2_Log.ldf',  
MOVE N'FileStreamDocuments2008R2' TO N'C:\MyNewFileStreamLocation\Documents2008R2',  
NOUNLOAD,  REPLACE,  STATS = 1
GO

Hoffe das hilft!

Steven
quelle
2

Die Antwort von Steven hat bei mir funktioniert, als ich diesen Befehl vor dem RESTORE ausgeführt habe:

alter database [YourDBName] 
set offline with rollback immediate

und dieser nach dem RESTORE:

 alter database [YourDBName] 
 set online
user103969
quelle
-1

Es kann auch ein Problem mit Zugriffsrechten sein. Stellen Sie sicher, dass der Benutzer in der sysadminRolle ist.

MovGP0
quelle