連載
» 2017年01月05日 05時00分 UPDATE

SQL Serverトラブルシューティング(34):フェイルオーバーポリシー以外で可用性グループがフェイルオーバーした(フェイルオーバートラブル) (1/2)

本連載は、「Microsoft SQL Server」で発生するトラブルを「どんな方法で」「どのように」解決していくか、正しい対処のためのノウハウを紹介します。今回は「可用性グループでフェイルオーバーが発生した、SQL Server 2016に由来する原因の一例」を解説します。

[椎名武史,ユニアデックス株式会社]

連載バックナンバー

 本連載では、「Microsoft SQL Server(以下、SQL Server)」で発生するトラブルについて、「なぜ起こったか」の理由とともに具体的な対処方法を紹介していきます。

トラブル 27(カテゴリー:フェイルオーバー):フェイルオーバーポリシー以外で可用性グループがフェイルオーバーしたが、発生した原因が分からない

 「Windows Server 2012 R2」上に「SQL Server 2016 RTM」をインストールした環境を想定して解説します。

トラブルの実例:SQL Serverの可用性グループの中に複数の可用性データベースを作成している環境でフェイルオーバーが発生した。全てのインスタンスは正常に稼働しており、トラブル26の事例を参考に、SQLDIAGの正常性チェック/Systemの項目も確認したが、エラーは発生しておらず、フェイルオーバーポリシーにも該当していなかった。

 ただし、データベースが格納されている幾つかのドライブの1つに障害が発生していた。WindowsイベントビューアーでWindowsログの「Application」の項目を確認すると、「エラー9001」が記録されていた(図27-1)。

photo 図27-1 Windowsイベントビューアーで「エラー9001」を確認

トラブルの原因を探る

 「エラー9001」と、それに関連するエラーログを深く検証します。

 まずエラー9001には、「データベース 'DB2' のログは使用できません」と表示されています。また、この直後の「エラー41653」に、「データベース 'DB2' でエラー (エラーの種類: 2 'DB_SHUTDOWN') が発生し、可用性グループ 'AG' が失敗しました」と記録されていました(図27-2)。

photo 図27-2 エラー9001に関連するエラーログ「エラー41653」も確認する

 2017年1月時点の最新版であるSQL Server 2016では、新たに「データベースがオフラインになった場合でもフェイルオーバーするように、可用性グループを構成可能」となりました(*1)。可用性グループの設定ウィザードあるいはプロパティで「データベース レベルの正常性検出」を有効にすると、フェイルオーバーポリシーに加えて、データベースに障害が発生した場合にも自動的にフェイルオーバーさせるように設定できます(図27-3)。


photo 図27-3 SQL Server 2016で追加された「データベース レベルの正常性検出」機能

 今回のトラブル事例は、SQL Server 2016の新機能に由来するものと想定されます。ディスク障害の発生を原因とし、フェイルオーバーポリシーとは別のフェイルオーバーさせる条件と定義される、「データベース レベルの正常性検出」が該当したために発生したことになります。

       1|2 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

Focus

- PR -

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。