笔者的一个大小为2 TB的SQL Server的database的LDF文件在玩存储盘映射的过程中莫名其妙的丢失了. 好在MDF文件还在. 笔者慌了, Bruce Ye告诉笔者, 不用着急, 光用MDF也可以把数据库弄回来的. 笔者就问Bruce, 假设我可以容忍LDF中信息的丢失的话, 那么该如何恢复这个数据库呢?
我们执行了下面的步骤:
已知:我的数据库名称为:TestDB
1.在SQL Server Management Studio中删除状态为Recovery Pending的(即丢失了LDF的)问题数据库.
2.重命名老的MDF文件.
3.重建一个新的数据库, 名字跟刚刚删除的数据库完全一样. 注意, 新的MDF的位置跟我们老的MDF的文件的位置相同. 这里的LDF文件的位置选在你想要存放的最终位置上(这个就是你所要的被恢复的LDF文件了).
4.停掉SQL Server服务, 将新的MDF重命名掉, 老的MDF命名回原来的名字.
5.启动SQL Server服务, 这时这个数据库的状态会变为Recovery Pending. 我们开始执行下面的脚本.
alter database TestDB set emergencyalter database TestDB set single_user with rollback immediatealter database TestDB rebuild log on (name=TestDB_log, filename='D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\TestDB_log.ldf')alter database TestDB set multi_user with rollback immediate
这时数据库的状态就应该恢复正常了.
问题解决.
笔者在运行上面的脚本的时候, 遇到了一个报错. 在运行了命令alter database TestDB set single_user with rollback immediate之后, 运行alter database TestDB rebuild log on 的时候说数据库在single user mode, 我的当前用户无法执行命令.
我使用了命令exec sp_who2, 发现我的TestDB上有个suspend的session, 执行命令kill XY 杀掉这个死掉的session之后, 问题解决.
如果觉得《SqlServer的LDF文件丢失 如何仅用MDF文件恢复数据库呢?(已解决)》对你有帮助,请点赞、收藏,并留下你的观点哦!