SQL Server 2014备份还原至2016时出错,求故障排查方案
故障原因分析与解决方法
这个问题我之前帮同事排查过,核心原因是你提前手动创建了目标数据库,然后执行还原操作时触发了日志备份的冲突逻辑。
具体原因解释
SQL Server在还原到已存在的数据库时,默认会先尝试执行一次尾日志备份——目的是保留当前数据库的日志链,防止数据丢失。但你刚在2016上创建的TravelEnterDB是全新的,还没有做过任何完整备份,根本不存在可备份的日志链,所以就抛出了BACKUP LOG cannot be performed because there is no current database backup这个错误。
而你在SQL Server 2014上能成功还原,大概率是当时没有提前创建数据库,而是直接通过备份文件还原创建数据库;或者当时的还原选项里手动关闭了尾日志备份的步骤。
解决方法
方法一:删除提前创建的数据库,直接还原备份(推荐)
这是最省心的方式:
- 先删掉SQL Server 2016上你手动创建的
TravelEnterDB - 右键服务器下的「数据库」→「还原数据库」
- 选择你的SQL Server 2014备份文件,指定目标数据库名称为
TravelEnterDB - 直接执行还原即可,SQL Server会自动根据备份文件创建数据库并完成还原
方法二:保留已创建的数据库,调整还原选项
如果因为特殊需求必须保留提前创建的数据库(比如提前指定了文件存储路径),可以这样操作:
- 打开「还原数据库」窗口,切换到选项页签
- 勾选「覆盖现有数据库(WITH REPLACE)」选项
- 取消勾选「在还原前进行尾日志备份」选项(这就是触发错误的关键选项)
- 确认数据库文件的存储路径符合你的需求,然后执行还原
额外提示:还原后登录信息的处理
还原完成后,可能会出现数据库用户和服务器登录名不匹配的「孤立用户」问题,导致原登录无法访问数据库。可以用以下脚本修复:
USE TravelEnterDB GO -- 先查看当前数据库的孤立用户列表 EXEC sp_change_users_login 'Report' -- 自动修复单个孤立用户(替换成你的用户名) EXEC sp_change_users_login 'Auto_Fix', '你的数据库用户名'
内容的提问来源于stack exchange,提问作者hmahdavi
相关产品推荐
相关产品推荐

