如何查询SQL Server备份文件

Jus*_*man 2 sql-server

我使用的是SQL Server 2008 R2,我有一个备份文件,B:\backups\full_backup.bak但我不知道这个文件有什么备份或者每个文件有哪些文件.如何编写查询以从此备份文件还原数据库?

我试图恢复数据库,但它引发了一个错误说

消息3156,级别16,状态4,行1
文件'Application_Primary'无法还原到'D:\ Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\Application_Primary.mdf'.使用WITH MOVE标识文件的有效位置.

消息3156,级别16,状态4,行1
文件'Application_FTS'无法还原到'D:\ Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\Application_FTS.mdf'.使用WITH MOVE标识文件的有效位置.

消息3156,级别16,状态4,行1
文件'Application_Log'无法还原到'L:\ Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\Application_Log.ldf'.使用WITH MOVE标识文件的有效位置.

消息3119,级别16,状态1,行1
在规划RESTORE语句时确定了问题.以前的消息提供详情.

消息3013,级别16,状态1,行1
RESTORE DATABASE异常终止.

码:

restore database Application_db
From disk = 'B:\backups\full_backup.bak'
Run Code Online (Sandbox Code Playgroud)

M.A*_*Ali 6

在我看来,您正在尝试从另一台服务器恢复具有数据库备份的备份,并为数据文件(.mdf,ldf)存储一些路径.

您需要使用该MOVE子句还原数据库.只是该RESTORE命令将尝试将数据库还原到执行此备份的数据库的路径.

检查备份文件中的备份

USE master;
GO

RESTORE HEADERONLY 
FROM DISK = N'B:\backups\full_backup.bak'
GO
Run Code Online (Sandbox Code Playgroud)

这将返回此备份文件包含的备份.您需要确保Position备份文件所在的位置.

检查备份文件中的文件

USE master;
GO

RESTORE FILELISTONLY 
FROM DISK = N'B:\backups\full_backup.bak'
 WITH FILE = 1    --<-- Position of backup in the backup file 
GO
Run Code Online (Sandbox Code Playgroud)

这将返回特定备份具有的文件.您将MOVE在restore语句中需要这些文件名for 子句.

恢复数据库

USE master;
GO

RESTORE DATABASE [Application_DB]
 FROM DISK = N'B:\backups\full_backup.bak'
WITH FILE = 1             --<-- position of database backup in the backup file 
,MOVE N'Application_Primary' TO N'D:\<some valid path>\Application_Primary.mdf'
,MOVE N'Application_FTS'     TO N'D:\<some valid path>\Application_FTS.ndf'
,MOVE N'Application_Logy'    TO N'D:\<some valid path>\Application_Log.ldf'
,RECOVERY;
Run Code Online (Sandbox Code Playgroud)