Pulihkan Gagal Cadangan - File 'Db' tidak dapat dikembalikan ke '{...} .mdf'. Gunakan DENGAN MOVE untuk mengidentifikasi lokasi yang valid untuk file


9

Saya mendapatkan kesalahan berikut yang mencoba melakukan pemulihan menggunakan perintah restore pada file cadangan yang saya terima dari pelanggan.

KEMBALIKAN DATABASE SFDB DARI DISK = N'C: \ Backup \ Backup.bak '

Adakah pemikiran tentang apa yang dapat saya lakukan untuk memperbaikinya? Ia mencari mdf, jadi dapatkah saya berasumsi bahwa file cadangan yang saya miliki adalah cadangan tambahan dan bukan cadangan lengkap dan itulah mengapa ia mencari mdf?

Saya tidak yakin apakah 1) mereka telah memberikan semua data (seluruh db) atau 2) Saya memiliki data yang tepat - dan saya dapat melakukan pengembalian dengan perintah T-SQL yang tepat - Saya hanya tidak tahu caranya.

Bantuan dihargai.

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.

KEMBALIKAN FileListOnly FROM DISK = N'C: \ Backup \ Backup.bak 'menunjukkan kepada saya yang berikut ...

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

Jawaban:


19

Lihatlah output dari perintah pertama Anda. Ada pesan kesalahan di dalamnya yang mengarahkan Anda ke perbaikan.

Cari bagian ini:

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

Pada dasarnya, jalur file di mesin Anda tidak cocok dengan mesin aslinya. The MOVE pilihan akan membiarkan Anda memperbaikinya.

Ini adalah contoh dari perintah RESTORE menggunakan opsi 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

Semoga ini membantu!


2

Jawaban Steven bekerja untuk saya ketika saya menjalankan perintah ini sebelum RESTORE:

alter database [YourDBName] 
set offline with rollback immediate

dan yang ini setelah RESTORE:

 alter database [YourDBName] 
 set online

-1

itu juga bisa menjadi masalah dengan hak akses. pastikan pengguna dalam sysadminperan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.