生产环境备份恢复至开发环境时逻辑文件名不一致报错求助
解决SQL Server恢复数据库时逻辑文件名不匹配的报错问题
这个报错很典型——你在RESTORE语句里指定的逻辑文件名和备份文件里实际存储的逻辑名对不上,SQL Server找不到你写的BICUAT2和BICUAT2_log,自然就抛出错误了。别慌,按下面两步就能搞定:
第一步:先确认备份文件里的真实逻辑文件名
你需要先搞清楚这个备份包到底包含哪些逻辑文件,执行这条SQL语句就能获取详细信息:
RESTORE FILELISTONLY FROM DISK = '\\ServerIP\SQLBackups\BICAP1\BICUAT\BICUAT_20180131220212.bak'
执行后会返回一个结果集,重点看LogicalName列——这就是你后续MOVE参数必须精准匹配的名称,大概率是BICUAT和BICUAT_log(和你要恢复的数据库名一致),而不是你之前写的BICUAT2。
第二步:用正确的逻辑名修改恢复语句
把第一步查到的真实逻辑名替换到你的RESTORE语句里,同时记得给目标文件加上.mdf和.ldf后缀(避免文件识别问题),修改后的语句示例如下:
RESTORE DATABASE BCIUAT FROM DISK = '\\ServerIP\SQLBackups\BICAP1\BICUAT\BICUAT_20180131220212.bak' WITH RECOVERY, MOVE 'BICUAT' TO 'E:\Program Files\Microsoft SQL Server\MSSQL12.DEV\MSSQL\DATA\BICUAT.mdf', MOVE 'BICUAT_log' TO 'E:\Program Files\Microsoft SQL Server\MSSQL12.DEV\MSSQL\DATA\BICUAT_log.ldf'
额外注意事项
- 确保目标路径
E:\Program Files\Microsoft SQL Server\MSSQL12.DEV\MSSQL\DATA\已经存在,并且SQL Server的服务账号对这个路径有读写权限,否则会出现权限相关的报错。 - 如果开发环境已经存在
BCIUAT数据库,你需要在WITH后面加上REPLACE参数(比如WITH RECOVERY, REPLACE, MOVE ...),但这会直接覆盖现有数据库,操作前一定要确认数据可以被覆盖。
内容的提问来源于stack exchange,提问作者Dewitt Harrison
相关产品推荐
相关产品推荐

