为什么Linux上重启/关机后部分SQL Server数据库进入Recovery Pending状态
Ubuntu 20.04 环境下SQL Server重启后数据库进入Recovery Pending状态解决方案
核心诱因
故障核心原因和数据存放在独立硬盘直接相关:默认配置下SQL Server服务启动时机早于独立硬盘挂载完成,服务启动时无法读取独立硬盘上的数据库文件,就会将对应数据库标记为Recovery Pending状态。
解决方案
步骤1:配置独立硬盘永久挂载
- 首先确认存放数据库的独立硬盘已配置
/etc/fstab永久挂载,避免重启后挂载点失效。配置时需确保mssql用户对挂载目录有完整的读写执行权限,fstab参考配置如下(替换为你自己的磁盘UUID、挂载路径、文件系统格式):
UUID=xxxxxx-xxxx-xxxx-xxxx-xxxxxxxx /mnt/sql_data ext4 defaults,rw 0 2
- 配置完成后执行
sudo mount -a测试挂载是否正常,确认无报错后再进行后续操作,避免fstab配置错误导致系统无法正常启动。
步骤2:调整SQL Server服务启动依赖
修改systemd配置,强制SQL Server等待所有本地磁盘挂载完成后再启动:
- 执行命令
sudo systemctl edit mssql-server.service - 在弹出的编辑窗口中添加如下配置:
[Unit] After=local-fs.target Requires=local-fs.target
- 保存退出后执行
sudo systemctl daemon-reload重载系统服务配置。
步骤3:附加优化配置
- 执行SQL命令关闭对应数据库的AUTO_CLOSE参数,避免数据库自动关闭引发的恢复异常:
ALTER DATABASE [你的数据库名称] SET AUTO_CLOSE OFF WITH NO_WAIT
- 可通过
sudo smartctl -a /dev/磁盘设备名检查独立硬盘健康状态,排除坏道、IO错误等硬件层面故障。 - 如需验证配置效果,可执行
sudo reboot整机重启,查看启动后数据库状态是否正常。
内容的提问来源于stack exchange,提问作者Ha'gel
相关产品推荐
相关产品推荐

