重新启动承载MS SQL Server实例的服务器时,是否有必要采取特殊步骤来防止数据损坏?
例如,最近我遇到了手动停止SQL服务的建议。我的理解是,这是由Windows shutdown
进程处理的。
我敢肯定,就像我刚才提到的那样,每个人都可以推荐不计其数的步骤,但是我想避免重复过时或迷信的做法。是否有Microsoft的建议或广泛的行业标准?
重新启动承载MS SQL Server实例的服务器时,是否有必要采取特殊步骤来防止数据损坏?
例如,最近我遇到了手动停止SQL服务的建议。我的理解是,这是由Windows shutdown
进程处理的。
我敢肯定,就像我刚才提到的那样,每个人都可以推荐不计其数的步骤,但是我想避免重复过时或迷信的做法。是否有Microsoft的建议或广泛的行业标准?
Answers:
重新启动sql server时,您不必花哨/担心或害怕。
只要确保您没有任何长期运行的交易即可。最好的方法是在活动量少/最少的活动期(也称为维护时段)中使用控制台或关闭命令重新启动sql服务器,以最大程度地减少对您的业务的影响。
如果您有任何灾难恢复设置,但又不想宕机,那么最好是进行故障转移,然后重新启动被动或辅助节点。
干净关闭SQL Server在以下情况下发生:
在所有情况下,SQL Server都会干净地关闭其所有数据库,然后终止服务,该服务包括提交或回滚所有事务,将所有脏页写入磁盘,然后将条目写入事务日志。
sql server关闭不当:
SQL Server将始终尝试执行干净的关闭操作...除非您进行了上述不适当的操作。
有关恢复阶段幕后发生情况的一些非常好的阅读链接:
本页上将对此进行详尽详尽的介绍。
作为您的问题专门询问“ Microsoft是否有任何建议 ”,我倾向于认为在此进行讨论会适得其反。文章详细介绍了其过程
这些步骤是否令人满意将是我的看法,您不希望这样做。因此,正确的答案将永远是最新的。
在关闭恰巧正在运行SQL服务的服务器之前是否有必要或建议这样做。
不,这是没有必要的。当Windows内核将要关闭的信号发送到SQL Server时,它将以安全的方式执行此操作,系统将等待它完成。一般而言,构建具有安全关闭功能的任何东西都不必手动关闭,这足以说明所有Microsoft应用程序都遵循他们自己的API和与PRESHUTDOWN
或SHUTDOWN
阶段相关的过程。根据PRESHUTDOWN
我假设他们正在使用的文档,
通知服务系统将关闭。需要更多时间来执行清理任务的服务超出了系统关闭时的严格时间限制,可以使用此通知。服务控制管理器在将通知发送到已注册该通知的应用程序之前,先将该
SERVICE_CONTROL_SHUTDOWN
通知发送给已为其注册的应用程序。处理该通知的服务将阻止系统关闭,直到该服务停止或通过指定的关闭前超时间隔
SERVICE_PRESHUTDOWN_INFO
到期为止。因为这会影响用户体验,所以只有在绝对有必要避免下次系统启动时丢失数据或显着恢复时间的情况下,服务才应使用此功能。
我可能认为这就是SQL Server的工作方式。
关闭和防止数据库损坏的时间不完全相同。MS SQL Server是一种非常成熟的产品,通过简单的“关闭”导致损坏问题的可能性很小。您不运行CHECK DB或在数据库上设置校验和验证的可能性更大。
也许让外部工具直接触摸MDF / NDF / LDF文件可能会引起问题,例如尝试在两次关闭之间“移动”文件,或者让某些软件尝试在关闭期间锁定文件。我已经看到托管数据库文件的磁盘已满时Windows Clustering崩溃了,但不是专门导致“数据库损坏”。
如果要帮助确保顺利关闭或故障转移,则可以运行检查点,确保经常运行DBCC CHECKDB(至少有足够的时间能够从备份中恢复损坏的数据),并检查是否存在任何外部依赖项。照顾诸如镜像。
但是,如果有任何专家确实有其他“最佳实践”,我很想听听他们的意见,但是在过去几年中搜寻博客和在线资源时,我在数据损坏和简单的“关闭/重新启动”方面并没有看到太多。
我的操作方式:1)禁用所有作业。2)确保当前没有作业正在执行。3)经常运行SP_Who3来检查活动,也可以运行sp_whoisactive以获取更多信息。4)如果没有活动,并且您看到的唯一是您当前的sp_who3查询5)使DB脱机6)右键单击数据库顶部,然后单击Stop 7)验证services.msc中服务是否处于停止状态8完成
PS。如果您有PAGEIOLATCH / IOCOMPLETION或SP_Who3中的任何其他活动,请不要执行上述操作,因为这可能会使数据库处于恢复模式。