重新启动SQL数据库服务器,最快最稳妥的方法是使用操作系统的服务管理工具或SQL Server自带的配置管理器,先停止服务再启动,而不是直接杀进程。下面按不同场景拆解重启步骤、注意事项和常见坑。
重启SQL Server服务的两种主流方式
通过Windows服务管理器重启(适合Windows服务器)
这是多数生产环境最常用的方式,按Win + R输入services.msc,在服务列表中找到类似SQL Server (MSSQLSERVER)或SQL Server (实例名)的服务项,右键点击,选择“重新启动”即可,整个操作会先停止再自动启动,中间不需要额外干预。
如果只想停掉再手动启动,分两步操作:先右键“停止”,等服务状态变成已停止,再右键“启动”,这种方式适合需要确认旧连接完全断开、临时文件释放的场景。
注意:服务管理器里可能有多个SQL Server相关服务,比如SQL Server Agent、SQL Server Browser,重启数据库引擎时,建议连同SQL Server Agent一起重启,否则作业计划可能处于异常状态。
使用SQL Server配置管理器(推荐给DBA)
打开SQL Server Configuration Manager,在左侧导航栏展开“SQL Server服务”,右侧会列出当前机器的所有SQL Server实例,右键目标实例,选择“重新启动”,配置管理器的优势是能直接看到服务状态和启动模式,而且在集群环境中操作更规范。
如果你更习惯命令行,可以在管理员身份的PowerShell或CMD中执行:
Restart-Service -Name "MSSQLSERVER"
或者用net stop MSSQLSERVER && net start MSSQLSERVER,但要注意,net stop后如果SQL Server服务因为依赖关系或权限问题启动失败,需要去查看Windows事件日志,别急着反复重试。
重启Linux上的SQL Server(systemd方式)
SQL Server从2017版开始支持Linux,重启方式不同于Windows,以Ubuntu和CentOS为例:
sudo systemctl restart mssql-server
这条命令会重新加载配置并启动服务,如果想查看状态,用:
sudo systemctl status mssql-server
如果服务异常,先查看错误日志/var/opt/mssql/log/errorlog,再决定是否需要systemctl stop后手动启动。
注意:Linux环境下重启SQL Server实例,本质上和Windows一样,就是先杀进程或停服务,但千万不要直接kill -9,否则可能造成数据库文件损坏或恢复日志丢失,行业共识认为,任何强制杀掉数据库进程的行为都是高风险操作,只有在服务完全卡死且无法通过正常方式停止时才考虑,并且事后要做完整性检查。
重启前必须做的三件事
很多新手直接重启,结果数据库起不来,或者起来后要等很长时间做恢复,原因往往是跳过了一些基础准备。
检查当前活动连接和未提交事务
重启会中断所有正在执行的SQL语句和事务,如果某个长事务正在写大表,强制重启后SQL Server会根据事务日志做前滚或回滚,耗时可能远超预期,所以重启前最好在SSMS里执行:
SELECT session_id, status, command, login_name FROM sys.dm_exec_sessions WHERE status <> 'sleeping';
如果发现大量running或suspended状态的会话,尤其是长时间运行的查询,尽量让它们自然结束,或者和业务方确认后手动终止,否则重启后的恢复过程可能让你等得怀疑人生。
设置数据库为单用户模式(可选但推荐)
如果你要重启的是承载核心业务库的实例,且重启后希望尽快对外服务,可以先将要重启的数据库设为单用户模式,避免新连接涌入干扰重启过程,操作如下:
ALTER DATABASE 你的数据库名 SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
这个命令会回滚所有未完成事务并踢掉其他连接,但要注意,单用户模式只影响数据库级别,不影响实例服务本身的启停,重启完成后,记得把数据库改回多用户模式:
ALTER DATABASE 你的数据库名 SET MULTI_USER;
记录当前时间和检查点状态
在重启前,执行CHECKPOINT可以尽量把脏页写入磁盘,减少恢复时间:
CHECKPOINT;
不过对于生产数据库,SQL Server本身有自动检查点机制,手动执行只是锦上添花,更重要的是记录重启前的时间点,方便重启后对比错误日志和恢复完成时间。
重启后验证数据库恢复完成
服务启动成功不等于数据库已经就绪,SQL Server在实例启动后会逐个恢复数据库,如果异常关闭,数据库状态可能是“正在恢复”或“可疑”,验证方式很简单:
SELECT name, state_desc FROM sys.databases;
state_desc为ONLINE表示正常,RECOVERING表示还在恢复中,SUSPECT表示有问题,多数情况下,等几分钟再查询即可,如果长时间处于RECOVERING,优先检查磁盘速度、日志文件大小和是否有损坏页。
确认Windows服务启动类型和登录账户是否正确,常见错误是SQL Server服务账户密码过期,导致服务启动后立即停止,这时去服务属性里重新输入密码并确认。
Q:SQL Server服务重启会不会导致数据丢失?
正常运行状态下通过服务管理器或systemctl重启,不会丢失已提交数据,SQL Server的事务日志会确保崩溃后的持久性,但未提交的事务会被回滚,这不等于丢失,而是保持一致性。
Q:重启SQL Server数据库服务器大概需要多长时间?
取决于数据库大小、硬件速度和恢复模式,一个小型实例可能几十秒,大型核心数据库可能几分钟到十几分钟,如果上次是强杀进程,恢复时间会明显拉长,因为SQL Server需要从日志中重放和回滚所有未完成操作。
Q:服务器上跑着多实例,重启一个实例会影响其他实例吗?
不会,每个SQL Server实例是独立的进程和服务,重启一个实例只影响该实例下的数据库,但要注意,如果共享机器资源,重启期间CPU和IO占用可能会飙升,间接影响其他实例性能。
回到最核心的建议:重启SQL数据库服务器不是难事,但别忽略准备工作和事后验证,先查连接,再选对工具,最后盯着状态确认,按这个流程走,能避免绝大多数常见的“重启后起不来”事故。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/787096.html


