SQL Server 2008R2数据库恢复报错求助:无法打开备份设备
解决SQL Server 2008R2备份恢复时的Msg 3201/3013错误
你碰到的这个错误是SQL备份恢复里的高频问题,本质就是SQL Server的服务进程找不到指定备份文件,或者没有权限访问它。我给你整理几个落地性强的排查和解决步骤:
第一步:先把文件路径的准确性焊死
Msg 3201, Level 16, State 2, Line 1 无法打开备份设备'C:\Program Files (x86)\Microsoft SQL Server\MSSQL12.SQL2014\MSSQL\Backup\123.bak'。操作系统错误2(系统找不到指定的文件。)
先别着急搞权限,先把路径核对明白:
- 直接把这个路径复制到文件资源管理器里打开,看看能不能找到
123.bak——找不到的话先把文件移到正确位置,或者修改RESTORE命令里的路径 - 注意实例名:你是恢复2008R2的备份,但路径里是
MSSQL12.SQL2014(这是SQL Server 2014的实例文件夹),是不是选错了实例对应的备份目录?2008R2的实例文件夹通常是MSSQL10_50.xxx开头的 - 检查文件名有没有隐形空格、拼写错误(Windows不区分大小写,但复制粘贴偶尔会带多余空格)
第二步:给SQL Server服务账号加权限(重点!)
你自己的账号有管理员权限没用,SQL Server是用服务专属账号(不是你登录Windows的账号)去读备份文件的:
- 按Win+R输入
services.msc打开服务管理器 - 找到你的SQL Server服务(比如
SQL Server (MSSQLSERVER),或者对应你的实例名) - 右键→属性→登录,记下它用的账号(通常是
NT SERVICE\MSSQLSERVER、本地系统账号,或者域账号) - 找到备份文件所在的文件夹,右键→属性→安全→编辑
- 把刚才记下的SQL服务账号添加进去,赋予它读取权限(要写入的话再加写入权限)
- 重启SQL Server服务,再试恢复操作
第三步:换个简单路径绕开系统权限限制
系统盘的Program Files文件夹权限管控很严,你可以把123.bak复制到普通文件夹(比如D:\SQL_Backups\),然后修改恢复命令:
RESTORE DATABASE YourTargetDBName FROM DISK = 'D:\SQL_Backups\123.bak' WITH REPLACE, RECOVERY;
先通过这个方式验证备份文件本身能不能被正常读取。
第四步:检查备份文件是否损坏
如果前面的步骤都没用,可能是备份文件本身坏了,用下面的命令验证完整性:
RESTORE VERIFYONLY FROM DISK = '你的备份文件完整路径';
如果返回“备份集有效”,那文件没问题;如果报错,说明备份文件损坏,得重新获取备份源。
内容的提问来源于stack exchange,提问作者Gajendra
相关产品推荐
相关产品推荐

