SQL 服务器也就是 SQL Server 无法启动,是运维和开发经常遇到的故障,绝大多数情况是服务账号权限异常,数据库文件损坏,端口占用,磁盘空间不足,注册表配置错误这几类原因造成,故障表现一般是在服务管理器里面点启动之后立刻停止,或者启动报错提示超时,部分情况还会伴随系统日志和 SQL Server 错误日志弹出错误代码,排查的时候核心思路就是优先读取 SQL 错误日志,根据报错代码定位根源,不要盲目重装数据库,很多时候只需要调整权限或者修复损坏文件就能恢复,SQL Server 是依赖 Windows 服务运行的应用,底层和操作系统磁盘账号注册表都强关联,任何一项配置变动都有可能造成 SQL 服务器不能启动,比如系统更新,修改密码,磁盘扩容,杀毒软件拦截之后都容易触发这个问题。
常见故障原因汇总表
| 故障类别 | 典型现象 |
|---|---|
| 服务登录账号问题 | 提示登录失败,账号密码修改之后服务直接无法启动 |
| 数据库文件异常 | master 系统库损坏,日志报错无法打开主数据库 |
| 磁盘空间不足 | 磁盘满,错误日志提示无法分配空间 |
| 端口冲突 | 1433 端口被其他程序占用,服务启动失败 |
| 内存相关 | 服务器内存过低,或者最大内存配置不合理 |
| 杀毒软件防火墙拦截 | 安全软件锁定数据文件,阻止服务读取 mdf ldf 文件 |
| 补丁升级异常 | 累积更新安装失败,升级之后 SQL 服务器不能启动 |
详细排查步骤
第一步,查看 SQL Server 错误日志,默认日志路径一般在实例安装目录下的 Log 文件夹,找到 ERRORLOG 文件,打开文件查看第一条报错信息,里面会记录错误编号,这是定位故障最关键的一步,不要跳过日志直接操作。
第二步,检查 Windows 服务状态,打开服务管理器,找到对应的 SQL Server 实例服务,查看服务的启动类型,确认是不是被设置成禁用,同时检查登录身份,很多人修改了 Windows 账号密码之后,原来配置的服务账号旧密码失效,就会启动失败,这个时候更新账号密码,或者改成本地系统账户测试启动。
第三步,检查磁盘剩余空间,确认数据盘和系统盘是否已经占满,master 库所在磁盘空间不足会直接导致 SQL 服务器不能启动,清理无用文件,释放磁盘空间之后再尝试启动服务。
第四步,排查端口占用情况,确认默认 1433 端口有没有被其他程序占用,如果端口冲突,可以修改 SQL Server 监听端口,或者结束占用端口的进程。
第五步,处理 master 系统数据库损坏,如果日志提示 master 库损坏,优先使用最近的 master 备份进行恢复,没有备份的情况下,可以尝试用单用户模式启动实例,执行修复操作,操作前务必备份原有 mdf 和 ldf 文件。
第六步,检查内存配置,之前手动设置过最大服务器内存参数,如果数值设置过小,实例会启动失败,可以通过命令行参数以最小配置模式启动 SQL Server,之后重新调整内存参数。
第七步,临时关闭杀毒软件和安全防护,部分安全软件会锁定数据库文件,造成 SQL 服务器读取文件失败,临时停用之后再次测试启动,确认是安全软件拦截之后,再添加数据库目录白名单。
第八步,补丁异常处理,如果是更新补丁之后才出现不能启动,回滚对应的累积更新补丁,或者重新安装完整补丁包修复升级残留错误。
进阶处理方案
单用户模式启动命令,在命令提示符使用 sqlservr exe 加上 m 参数启动实例,这个模式适合修复系统库,修改错误配置,正常业务不要长期保持单用户模式,修复完成之后恢复正常多用户启动。
最小配置启动,使用 f 参数启动,适合内存配置错误,资源不足导致无法启动的场景,启动成功之后修改错误配置项,再重启服务。
不同错误代码参考
错误 18456 服务账号登录认证失败,优先修改服务账号密码。
错误 3417 master 数据库损坏,需要恢复 master 备份。
错误 17120 端口监听失败,端口冲突相关问题。
错误 823 磁盘 IO 错误,存储硬件或者磁盘坏道导致数据库文件读取失败。
【常见问题】
问题 1 SQL 服务器不能启动是不是一定要重装
回答 1 SQL 服务器不能启动不需要优先重装,大部分故障通过错误日志定位之后,调整账号权限,修复系统库,释放磁盘空间就可以解决,重装会丢失原有配置,只有所有修复手段都无效的时候才考虑重装 SQL 服务器。
问题 2 修改域账号密码之后 SQL 服务器不能启动怎么办
回答 2 修改域账号密码之后 SQL 服务器不能启动,是因为服务里面保存的还是旧密码,打开服务属性,在登录页更新新的账号密码,保存之后重新启动 SQL 服务器服务即可恢复。
问题 3 master 库损坏导致 SQL 服务器不能启动没有备份怎么处理
回答 3 master 库损坏并且没有备份的时候 SQL 服务器不能启动,可以尝试单用户模式启动实例进行修复,但是修复成功率不能保证,重要生产环境建议日常定期备份 master 系统数据库,避免无备份的极端故障。
【免责申明】
本内容基于 SQL Server 通用故障排查经验整理,不同版本 SQL Server 2016 2019 2022 报错细节存在差异,生产环境操作前务必备份数据库文件,操作风险自行评估,本内容仅作为技术排查参考,不替代微软官方技术文档与专业工程师现场处理方案。


