要安全地重新启动承载Microsoft SQL Server的计算机,必须执行哪些步骤?


23

重新启动承载MS SQL Server实例的服务器时,是否有必要采取特殊步骤来防止数据损坏?

例如,最近我遇到了手动停止SQL服务的建议。我的理解是,这是由Windows shutdown进程处理的。

我敢肯定,就像我刚才提到的那样,每个人都可以推荐不计其数的步骤,但是我想避免重复过时或迷信的做法。是否有Microsoft的建议或广泛的行业标准?


此问题与重新启动计算机的短期过程有关。还有一个长期问题,那就是在永久性关闭机器之前,确保机器不被使用的长期程序。


我要求“广泛的行业标准”,而不想要“个人可以推荐的成千上万的步骤”,这是没有道理的。那大概是他们对行业标准的解释。这两个问题似乎都是有效的问题,但是权威来源将是指向Microsoft文章的链接。
埃文·卡罗尔

Answers:


14

重新启动sql server时,您不必花哨/担心或害怕。

只要确保您没有任何长期运行的交易即可。最好的方法是在活动量少/最少的活动期(也称为维护时段)中使用控制台或关闭命令重新启动sql服务器,以最大程度地减少对您的业务的影响。

如果您有任何灾难恢复设置,但又不想宕机,那么最好是进行故障转移,然后重新启动被动或辅助节点。

干净关闭SQL Server在以下情况下发生:

  • 使用服务控制台停止SQL Server。
  • 关闭服务器
  • 在SSMS中运行SHUTDOWN命令

在所有情况下,SQL Server都会干净地关闭其所有数据库,然后终止服务,该服务包括提交或回滚所有事务,将所有脏页写入磁盘,然后将条目写入事务日志。

sql server关闭不当:

  • 不等待而关闭
  • 从服务器上拉出电源电缆(如果可以访问)。
  • 从任务管理器中杀死sqlserver.exe
  • sql server二进制文件,exe,系统数据库所在的Windows故障或Windows系统驱动器故障..通常为C:\驱动器。
  • 服务器过热导致服务器关闭(应该很少发生!)

SQL Server将始终尝试执行干净的关闭操作...除非您进行了上述不适当的操作

有关恢复阶段幕后发生情况的一些非常好的阅读链接:


非常详细,谢谢。“ DR设置”是什么意思?
所有行业的乔恩

@JonofAllTrades灾难恢复..例如日志传送,数据库镜像,或者您甚至可以想到像群集这样的高可用性
Kin Shah

1
尽管我完全同意“不正确的”关机方案清单,但由于提前写入日志功能,即使在那时也不会发生数据损坏。
约翰·艾伦

5

本页上将对此进行详尽详尽的介绍。

作为您的问题专门询问“ Microsoft是否有任何建议 ”,我倾向于认为在此进行讨论会适得其反。文章详细介绍了其过程

  • 使用任一
    • 命令行
    • 电源外壳,
    • SQL Server管理Studio(GUI)
  • 对于2008年,2012年,2014年,2016年。
  • 对于两者之一
    • 数据库引擎
    • 或,代理

这些步骤是否令人满意将是我的看法,您不希望这样做。因此,正确的答案将永远是最新的。

断电之前停止服务

在关闭恰巧正在运行SQL服务的服务器之前是否有必要或建议这样做。

不,这是没有必要的。当Windows内核将要关闭的信号发送到SQL Server时,它将以安全的方式执行此操作,系统将等待它完成。一般而言,构建具有安全关闭功能的任何东西都不必手动关闭,这足以说明所有Microsoft应用程序都遵循他们自己的API和PRESHUTDOWNSHUTDOWN阶段相关的过程。根据PRESHUTDOWN我假设他们正在使用的文档,

通知服务系统将关闭。需要更多时间来执行清理任务的服务超出了系统关闭时的严格时间限制,可以使用此通知。服务控制管理器在将通知发送到已注册该通知的应用程序之前,先将该SERVICE_CONTROL_SHUTDOWN通知发送给已为其注册的应用程序。

处理该通知的服务将阻止系统关闭,直到该服务停止或通过指定的关闭前超时间隔SERVICE_PRESHUTDOWN_INFO到期为止。因为这会影响用户体验,所以只有在绝对有必要避免下次系统启动时丢失数据或显着恢复时间的情况下,服务才应使用此功能

我可能认为这就是SQL Server的工作方式。


几乎就是我要问的。该文档描述了如何关闭SQL Server引擎,但是没有回答在关闭恰好正在运行SQL服务的服务器之前是否有必要或建议这样做。
所有行业的乔恩'18

@JonofAllTrades再次更新。
埃文·卡罗尔

3

关闭和防止数据库损坏的时间不完全相同。MS SQL Server是一种非常成熟的产品,通过简单的“关闭”导致损坏问题的可能性很小。您不运行CHECK DB或在数据库上设置校验和验证的可能性更大。

也许让外部工具直接触摸MDF / NDF / LDF文件可能会引起问题,例如尝试在两次关闭之间“移动”文件,或者让某些软件尝试在关闭期间锁定文件。我已经看到托管数据库文件的磁盘已满时Windows Clustering崩溃了,但不是专门导致“数据库损坏”。

如果要帮助确保顺利关闭或故障转移,则可以运行检查点,确保经常运行DBCC CHECKDB(至少有足够的时间能够从备份中恢复损坏的数据),并检查是否存在任何外部依赖项。照顾诸如镜像。

但是,如果有任何专家确实有其他“最佳实践”,我很想听听他们的意见,但是在过去几年中搜寻博客和在线资源时,我在数据损坏和简单的“关闭/重新启动”方面并没有看到太多。


-1

我的操作方式:1)禁用所有作业。2)确保当前没有作业正在执行。3)经常运行SP_Who3来检查活动,也可以运行sp_whoisactive以获取更多信息。4)如果没有活动,并且您看到的唯一是您当前的sp_who3查询5)使DB脱机6)右键单击数据库顶部,然后单击Stop 7)验证services.msc中服务是否处于停止状态8完成

PS。如果您有PAGEIOLATCH / IOCOMPLETION或SP_Who3中的任何其他活动,请不要执行上述操作,因为这可能会使数据库处于恢复模式。


对于大多数人来说,停止到数据库的所有流量几乎是不可行或不值得的。我还要注意,确保使所有数据库脱机有什么好处-这只会增加更多时间。
LowlyDBA

这根本不是一个好建议。您为什么建议使数据库脱机-如果数据库位于HADR中,例如镜像或AG,您将无法做到这一点。
Kin Shah
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.