web-dev-qa-db-ja.com

SQL Serverのクラッシュ回復力を改善できますか?

SQL Server(2008 SP4および2016 SP1)を実行しているPCには、定期的に電源が切れます。明らかに、これはSQL Serverデータベースの(インデックス)破損につながることがあり、後で復元する必要があります。

SQL Serverはそのようなシナリオ向けに設計されておらず、正しい解決策は停電の原因を修正することです(興味がある場合は、以下で詳しく説明します)。それでも、SQL Serverには、停電時のデータベース破損のリスクを減らすために設定できるチューニングオプションがあります


背景:「PC」はフォークリフトに取り付けられたWindowsタブレットです。ユーザーがフォークリフトをオフにすると、タブレットの電源が切れます。私たちは、フォークリフトをオフにする前にWindowsを適切にシャットダウンするようにユーザーに教えることを試みましたが、失敗しました(おそらくそれをオフにするだけでほとんどの場合「機能する」ためです)。現在、停電時にシャットダウンするようにタブレットに通知するUPSの追加など、他のオプションについても調査中です。

20
Heinzi

SQL Serverはそのようなシナリオ向けに設計されておらず、正しい解決策は停電の原因を修正することです[…]

実際には、電力損失に対処するように設計されているため、起動時の先読みログ(WAL)や起動時のクラッシュ回復(または呼び出したいもの)のようなものがあります。これが行われる方法の1つは、タブレットが実行しているように見える書き込みをキャッシュしないことを選択することです。

それでも、停電時のデータベース破損のリスクを軽減するためにSQL Serverに設定できるチューニングオプションはありますか?

いいえ、SQL Serverは必要な処理を行っています。外部のSQL Server(ドライブキャッシュのWindows設定[SQLはオフにしたいが強制はできません])、ハードウェア/ファームウェアの更新などを確​​認するか、またはEricが言ったように、比較的外部電源を購入する必要があります。症状を解決できる安価なものです(実際の問​​題は、おそらく何らかのタイプのキャッシングまたは実際にはバックアップされていないバッテリバックアップ書き込みです)。

28
Sean Gallardy

タブレットに動作中のバッテリーがある場合、次のことができます バッテリーの電力が低下するとシャットダウンするようにWindowsを構成します

タブレットに機能しないバッテリーがある場合、バッテリーの交換を検討してください。 (私はそのようなラップトップを持っていました-あなたは安価な交換用バッテリーがeBayにあることができることに驚かれることでしょう。それらはOEMと同様に機能しませんが、ちょっと、何でもこの状況では何もないよりはましです。)

タブレットにバッテリー機能がない場合、Windowsと通信してそれを通知できるUSB出力を備えた小さな無停電電源装置(UPS)を追加することを検討してくださいバッテリーで動作しているとき。 (たとえば、私は自分のデスクトップを構成して、UPSのバッテリー電力が低下したときにシャットダウンするように設定しています。これにより、自宅にいなくても停電時にシャットダウンします。)

これらのいずれも選択肢がない場合、あなたはちょっと運が悪いです。これは古いホワイトペーパーですが、Microsoftの SQL Server 2000 I/O Basics は基本的に、停電を適切に処理できるI/Oサブシステムが必要であると説明しています。

Delayed Durability またはメモリのみ(非耐久性)テーブルなど、リスクを高めるために使用できるオプションがありますが、デフォルトでは、SQL Serverは、トランザクションログ。ランダムな停電が原因でトランザクションログの書き込みさえ保証できない場合は、UPSバッテリーに100ドルを費やしてください。

26
Brent Ozar

無線接続が不安定であるため、サーバーではなくフォークリフトにローカルDBがあるとしたら?明らかにフォークリフトからSQLを取得することが望ましい解決策です。

とにかく、ブレントが提案したように、バッテリー電源または同様の基準でx分後にタブレットが自動的に電源が切れるように設定します。

それができない場合、通常のシャットダウンを開始できる小さなUPSがおそらくその場合の最善の策になるでしょう。このようなことをユーザーに依存すると、失敗するように求められます。

6
Marbry Hardin

基礎となるosは、書き込みが成功するか、エラーが返されることを保証する必要があります。 OSは、ハードウェアに依存するファームウェアに依存するドライバーに依存しています。ドライバー、ファームウェア、ハードウェアのいずれかが存在する場合、WindowsまたはSQLサーバーがそれについてできることは何もありません。

このため、ドライバー/ファームウェア/ハードウェアの製造元に確認する必要があります。

また、書き込み順序もすべてのレイヤーで保証される必要があるため、同様に確認する必要があります。

バッテリーでバックアップされたキャッシュでさえ失敗する可能性があります。たとえば、ニューヨークの嵐の間、一部のデータセンターは数日間アクセスできず、バッテリーがなくなり、通勤書き込みが失われる可能性がありました。

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
David Williams

他の答えに拡張するには:

最初に、可能な場合はSQLをフォークリフトから外してみてください。停電からの回復は悪いことだと思う。何時間もの倉庫活動があり、バックアップされていません...

第二に、ラップトップがバッテリーでx時間後に自動シャットダウンを実行するためのメカニズムは、いずれにしても適切に配置されているはずです。

第3に、ラップトップをフォークリフトの非スイッチング電源に接続することはオプションでしょうか?機械のバッテリーの消耗を防ぐために、安全規則(環境によってはフォークリフトキーですべてをオフにする必要がある場合があります)、およびフォークリフトが使用間(特に週末と休日)に留まる時間を必ず考慮してください。

1
GB540