AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 212435
Accepted
Heinzi
Heinzi
Asked: 2018-07-18 05:03:29 +0800 CST2018-07-18 05:03:29 +0800 CST 2018-07-18 05:03:29 +0800 CST

能否提高 SQL Server 的崩溃恢复能力?

  • 772

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

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


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

sql-server crash
  • 5 5 个回答
  • 4218 Views

5 个回答

  • Voted
  1. Best Answer
    Sean Gallardy
    2018-07-18T06:10:19+08:002018-07-18T06:10:19+08:00

    我知道 SQL Server 不是为这种情况而设计的,正确的解决方案是解决掉电的原因 […]

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

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

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

    • 31
  2. Brent Ozar
    2018-07-18T06:13:25+08:002018-07-18T06:13:25+08:00

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

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

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

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

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

    • 30
  3. Marbry Hardin
    2018-07-18T12:49:10+08:002018-07-18T12:49:10+08:00

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

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

    如果做不到这一点,那么在这种情况下,可以启动正常关机的小型 UPS 可能是你最好的选择。依靠用户来做这样的事情是要求失败。

    • 6
  4. David Williams
    2018-07-18T11:38:13+08:002018-07-18T11:38:13+08:00

    底层操作系统必须保证写入成功或返回错误。操作系统反过来依赖于驱动程序,而驱动程序又依赖于依赖于硬件的固件如果驱动程序、固件或硬件存在,则 Windows 或 sql server 对此无能为力。

    这就是为什么您需要咨询驱动程序/固件/硬件制造商的原因。

    此外,必须保证所有层的写入顺序,因此也需要检查。

    即使是电池支持的缓存也可能出现故障,例如在纽约风暴期间,一些数据中心数天都无法访问,电池可能会耗尽,可能会丢失通勤写入

    https://www.postgresql.org/docs/devel/static/wal-reliability.html

    https://brad.livejournal.com/2116715.html

    http://rhaas.blogspot.com/2010/10/wal-reliability.html?m=1

    • 2
  5. GB540
    2018-07-18T16:53:51+08:002018-07-18T16:53:51+08:00

    要扩展其他答案:

    首先,如果可能的话,试着把 SQL 从叉车上拿下来。认为从断电中恢复是不好的,在笔记本电脑被 7,000 多磅碾压后尝试这样做。有数小时的仓库活动,没有备份......

    其次,笔记本电脑在电池使用 x 次后自动关机的机制无论如何都应该到位。

    第三,将笔记本电脑连接到叉车上的非开关电源是否是一种选择?一定要考虑安全规定(环境可能要求使用叉车钥匙关闭所有东西),以及叉车在两次使用之间放置多长时间(尤其是在周末和节假日),以避免耗尽机器电池。

    • 1

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve