重新启动托管 MS SQL Server 实例的服务器时,是否需要采取任何特殊步骤来防止数据损坏?
比如我最近遇到了手动停止 SQL 服务的建议。我的理解是,这是由 Windowsshutdown
进程处理的。
我确信个人可能会推荐无数的步骤,就像我刚才提到的那样,但我想避免重复过时或迷信的做法。是否有来自 Microsoft 的建议或广泛的行业标准?
这个问题与重新启动机器的短期过程有关。还有一个问题是关于在永久关闭机器之前确保机器未被使用的长期程序。
重新启动托管 MS SQL Server 实例的服务器时,是否需要采取任何特殊步骤来防止数据损坏?
比如我最近遇到了手动停止 SQL 服务的建议。我的理解是,这是由 Windowsshutdown
进程处理的。
我确信个人可能会推荐无数的步骤,就像我刚才提到的那样,但我想避免重复过时或迷信的做法。是否有来自 Microsoft 的建议或广泛的行业标准?
这个问题与重新启动机器的短期过程有关。还有一个问题是关于在永久关闭机器之前确保机器未被使用的长期程序。
当您重新启动 sql server 时,您不必幻想/担心或害怕。
只要确保您没有任何长时间运行的事务。最好是在低/最小活动期间(也称为维护窗口)使用控制台或关闭命令重新启动 sql server,以尽量减少对您的业务的影响。
如果您有任何 DR 设置并且您不想停机,那么最好是进行故障转移,然后重新启动被动或辅助节点。
干净关闭 SQL Server 在以下情况下发生:
在上述所有情况下,sql server 都会干净地关闭其所有数据库,然后终止服务,该服务涉及提交或回滚所有事务,将所有脏页写入磁盘,然后将条目写入事务日志。
sql server 关闭不当:
SQL Server 将始终尝试彻底关闭...除非您执行上述不当操作。
关于恢复阶段幕后发生的事情的一些非常好的阅读链接:
这在此页面上详尽无遗。
由于您的问题特别询问“微软有没有推荐的”,我倾向于认为在这里进行讨论会适得其反。文章详细介绍了整个过程
这些步骤是否令人满意将是我的意见,你不想要。因此,正确的答案将永远是最新的。
在断电之前停止服务
不,这是没有必要的。当 Windows 内核向 SQL Server 发送关闭信号时,它将以安全的方式执行此操作,系统将等待它完成。一般而言,任何具有安全关闭功能的东西都不必手动关闭,因此所有 Microsoft 应用程序都遵循自己的 API 和绑定到
PRESHUTDOWN
、 或SHUTDOWN
阶段的过程。从PRESHUTDOWN
我认为他们正在使用的文档中,可能有必要,我假设这就是 SQL Server 的工作方式。
不完全是在关闭和防止数据库损坏方面。MS SQL Server 是一个非常成熟的产品,通过简单的“关闭”导致损坏问题的可能性将是一个边缘场景。通过不运行 CHECK DB 或在您的数据库上设置校验和验证,您更有可能导致损坏。
也许让外部工具直接接触 MDF/NDF/LDF 文件可能会导致问题,例如尝试在关闭之间“移动”文件或让某些软件在关闭期间尝试锁定文件。当托管数据库文件的磁盘已满时,我已经看到 Windows 集群搞砸了,但并没有特别导致“数据库损坏”。
如果您想帮助确保顺利关闭或故障转移,您可以运行一个检查点,确保您经常运行 DBCC CHECKDB(至少有足够的时间能够从备份中恢复损坏的数据),并检查是否有任何外部依赖项照顾如镜像。
但是,如果任何专家确实有其他“最佳实践”,我很想听听他们,但是在过去几年中搜索博客和在线资源,我没有看到太多数据损坏和简单的“关闭/重启”。
我这样做的方式:1)禁用所有工作。2) 确保当前没有作业正在执行。3) 经常运行 SP_Who3 以检查活动,同时运行 sp_whoisactive 以获取更多信息。4) 如果没有活动并且您看到的唯一内容是您当前的 sp_who3 查询 5) 使数据库脱机 6) 右键单击数据库顶部并单击停止 7) 验证 services.msc 中的服务是否处于停止状态 8 ) 完毕
PS。如果您在 SP_Who3 中有 PAGEIOLATCH / IOCOMPLETION 或任何其他活动,请不要执行上述操作,因为它可能会使您的数据库处于恢复模式。