SQL Server 的崩溃恢复能力可以提高吗?

Hei*_*nzi 20 sql-server crash

我们有运行 SQL Server(2008 SP4 和 2016 SP1)的 PC,它们经常断电。显然,这有时会导致 SQL Server 数据库的(索引)损坏,我们需要稍后恢复。

我知道 SQL Server 不是为这种情况设计的,正确的解决方案是修复断电的原因(如果您好奇,请在下面详细介绍)。尽管如此,我可以设置 SQL Server 中的任何调整选项来降低断电时数据库损坏的风险吗?


背景:“PC”是安装在叉车上的 Windows 平板电脑。当用户关闭叉车时,平板电脑就会断电。我们曾尝试教用户在关闭叉车之前正确关闭 Windows,但失败了(可能是因为在大多数情况下只是将其关闭“有效”)。我们目前还在研究其他选项,例如添加一个 UPS,它会在断电时向平板电脑发出信号关闭。

Sea*_*ser 28

我知道 SQL Server 不是为这种情况设计的,正确的解决方案是修复断电的原因 [...]

实际上,它是为处理掉电而设计的,这就是为什么有预写日志 (WAL) 和启动时崩溃恢复(或任何您想称呼的)之类的东西。完成此操作的方法之一是选择不缓存写入,这似乎是平板电脑正在执行的操作,因此会损坏。

尽管如此,我可以设置 SQL Server 中的任何优化选项来降低断电时数据库损坏的风险吗?

不,SQL Server 正在做它应该做的。您应该查看 SQL Server 之外的内容(用于驱动器缓存的 Windows 设置 [哪个 SQL 想要关闭,但我们不能强迫您]、硬件/固件更新等),或者如 Eric 所说,购买外部电源便宜,可以解决症状(实际问题可能是某种类型的缓存或电池支持的写入,但实际上并未支持)。

  • 一篇有用的文章:https://support.microsoft.com/en-us/help/234656/information-about-using-disk-drive-caches-with-sql-server-that-every-d (2认同)

Bre*_*zar 26

如果平板电脑有可用的电池,您可以将 Windows 配置为在电池电量低时关闭

如果平板电脑的电池无法正常工作,请考虑更换电池。(我有过这样的笔记本电脑 - 你会惊讶于 eBay 上更换电池的价格是多么便宜。它们不像 OEM 那样好用,但是嘿,在这种情况下,有总比没有好。)

如果平板电脑根本不具备电池功能,请考虑添加一个带有 USB 输出的小型不间断电源 (UPS),它可以与 Windows 通信以告诉它何时使用电池供电。(例如,我将自己的台式机配置为在 UPS 电池电量不足时关闭 - 这样即使我不在家,它也会在停电时关闭。)

如果这些都不是一个选项,那你就有点不走运了。这是一份旧白皮书,但Microsoft的SQL Server 2000 I/O Basics基本上解释了您需要一个可以优雅地处理断电的 I/O 子系统。

您可以使用一些选项来增加风险——比如延迟持久性或仅内存(非持久)表——但默认情况下,SQL Server 已经在尽最大努力最大限度地提高每次写入事务日志的可靠性。如果由于随机断电而无法保证事务日志写入,请花 100 美元购买 UPS 电池。


小智 6

假设您在叉车上有一个本地数据库而不是服务器,因为无线连接不稳定?显然,让 SQL 脱离叉车将是更可取的解决方案。

无论如何,就像布伦特建议的那样,将平板电脑设置为在电池供电 x 分钟或某些类似标准后自行关闭。

否则,在这种情况下,可以启动正常关机的小型 UPS 可能是您的最佳选择。在这样的事情上依赖用户是要求失败的。