Error al restaurar la copia de seguridad: el archivo 'Db' no se puede restaurar a '{…} .mdf'. Use WITH MOVE para identificar una ubicación válida para el archivo

9

Recibo los siguientes errores al intentar hacer una restauración usando el comando de restauración en un archivo de respaldo que recibí de un cliente.

RESTAURAR BASE DE DATOS SFDB DESDE DISCO = N'C: \ Backup \ Backup.bak '

¿Alguna idea sobre lo que puedo hacer para corregir esto? Está buscando el mdf, entonces, ¿puedo suponer que el archivo de copia de seguridad que tengo es una copia de seguridad incremental y no la copia de seguridad completa y es por eso que está buscando el mdf?

No estoy seguro de si 1) me han dado todos los datos (toda la base de datos) o 2) tengo los datos correctos, y puedo hacer la restauración con los comandos T-SQL correctos, simplemente no sé cómo.

La ayuda es apreciada.

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 'me muestra lo siguiente ...

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
usuario1060500
fuente

Respuestas:

19

Eche otro vistazo a la salida de su primer comando. Hay un mensaje de error que le indica la solución.

Busque esta sección:

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

Básicamente, la ruta del archivo en su máquina no coincide con la máquina original. La opción MOVE te permitirá arreglar eso.

Aquí hay un ejemplo del comando RESTORE usando la opción 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

¡Espero que esto ayude!

Steven
fuente
2

La respuesta de Steven funcionó para mí cuando ejecuté este comando antes de RESTORE:

alter database [YourDBName] 
set offline with rollback immediate

y este después de RESTAURAR:

 alter database [YourDBName] 
 set online
usuario103969
fuente
-1

También puede ser un problema con los derechos de acceso. asegúrese de que el usuario esté en el sysadminrol.

MovGP0
fuente