SQL Server LDF文件引发数据库状态异常,修复的方式
表现
分析
查看错误日志 Sp_readerrorlog
发现ldf文件不存在
FileMgr::StartLogFiles: Operating system error 2(系统找不到指定的文件。) occurred while creating or opening file 'D:\Program Files\Microsoft SQL Server\MSSQL16.SQL2022\MSSQL\DATA\test_log_4093951566.ldf'. Diagnose and correct the operating system error, and retry the operation.
处理
1. 重建日志脚本
ALTER DATABASE [test_CLONE] REBUILD LOG ON
(NAME= test_CLONElog, FILENAME='D:\Program Files\Microsoft SQL Server\MSSQL16.SQL2022\MSSQL\DATA\test_CLONElog.ldf')
输出信息如下:说明日志文件已经重现生成
警告: 数据库 'test_CLONE' 的日志已重新生成。已失去事务的一致性。RESTORE 链已断开,服务器不再有以前的日志文件的上下文,因此您需要了解它们的内容。应运行 DBCC CHECKDB 验证物理一致性。数据库已置于 dbo-only 模式。在准备使数据库可用时,需要重置数据库选项,并删除所有多余的日志文件。
2. 查看数据库的当前模式,为受限制用户
3. 设置为多用户模式,执行成功后,说明数据库就可以正常使用了。
ALTER DATABASE [test_CLONE] SET MULTI_USER
4. 根据重建日志的结果,对数据库进行检查,看是否正常。
附:
另外,通过分离附加的模式,也可以创建LDF文件,但不建议。
1. 分离数据库
2. 分离后,将有问题的LDF文件,移动到其他文件夹下,然后通过下面的命令来建立数据库
--附件MDF文件的同时构建LDF文件
CREATE DATABASE [test_CLONE]
ON (FILENAME = 'D:\Program Files\Microsoft SQL Server\MSSQL16.SQL2022\MSSQL\DATA\test_163371344.mdf')
FOR ATTACH_REBUILD_LOG
注:
1:上面的方式,无法确保所有的情况下都能建立成功
2:还原后,可能会发生部分数据丢失的情况