- 記事
に適用されます: SQLサーバー
SQL Server 2016 以降、Always On 可用性グループを構成するときにデータベース レベルの正常性検出 (DB_FAILOVER) オプションを使用できるようになりました。データベース レベルの正常性検出は、データベースがオンライン状態でなくなったときや、何か問題が発生したときにそれを認識し、可用性グループの自動フェールオーバーをトリガーします。正常性検出をトリガーする可能性のある例には、データベースが疑わしいモード、データベースがオフライン、データベースが回復中 (回復に失敗した) などがあります。詳細については、を参照してください。sys.databases の状態列。
データベース レベルの正常性検出は可用性グループ全体に対して有効になっているため、データベース レベルの正常性検出は可用性グループ内のすべてのデータベースを監視します。可用性グループ内の特定のデータベースに対して選択的に有効にすることはできません。
データベースレベルの健全性検出オプションの利点
可用性グループのデータベース レベルの正常性検出オプションは、データベースの高可用性を保証するための優れたオプションとして広く推奨されています。すべての可用性グループに対してこれを有効にすることを検討する必要があります。アプリケーションが高可用性を実現するために複数のデータベースに依存している場合は、データベースの正常性オプションをオンにしてそれらを可用性グループにグループ化します。
たとえば、データベース レベルの正常性検出オプションがオンになっている場合、SQL Server がいずれかのデータベースのトランザクション ログ ファイルに書き込むことができなかった場合、そのデータベースのステータスが障害を示すように変化し、可用性グループはすぐにフェールオーバーします。データベースが再びオンラインになると、アプリケーションは再接続し、最小限の中断で動作を継続できます。
データベースレベルの健全性検出の有効化
通常は推奨されますが、データベース ヘルス オプションは次のとおりです。デフォルトではオフになっています、以前のバージョンのデフォルト設定との下位互換性を維持するための取り組みです。
データベース レベルの健全性検出設定を有効にする簡単な方法がいくつかあります。
SQL Server Management Studio で、SQL Server データベース エンジンに接続します。オブジェクト エクスプローラー ウィンドウを使用して、Always On High Availability ノードを右クリックし、次のコマンドを実行します。新しい可用性グループウィザード。チェックしてくださいデータベースレベルの健全性検出[名前の指定]ページのチェックボックスをオンにします。次に、ウィザードの残りのページを完了します。
を表示します。プロパティSQL Server Management Studio の既存の可用性グループの。 SQL Server に接続します。オブジェクト エクスプローラー ウィンドウを使用して、Always On High Availability ノードを展開します。 「可用性グループ」を展開します。可用性グループを右クリックし、[プロパティ] を選択します。オプションを確認してくださいデータベースレベルの健全性検出をクリックし、「OK」をクリックするか、変更をスクリプト化します。
Transact-SQL 構文から可用性グループの作成。 DB_FAILOVER パラメータには、値 ON または OFF を受け入れます。
可用性グループ [Contoso-ag]WITH (DB_FAILOVER=ON)FOR DATABASE [AutoHa-Sample]REPLICA ON N'SQLSERVER-0' WITH (ENDPOINT_URL = N'TCP://SQLSERVER-0.DOMAIN.COM:5022', FAILOVER_MODE = AUTOMATIC、AVAILABILITY_MODE = SYNCHRONOUS_COMMIT)、N'SQLSERVER-1' WITH (ENDPOINT_URL = N'TCP://SQLSERVER-1.DOMAIN.COM:5022'、FAILOVER_MODE = AUTOMATIC、AVAILABILITY_MODE = SYNCHRONOUS_COMMIT);
Transact-SQL 構文から可用性グループの変更。 DB_FAILOVER パラメータには、値 ON または OFF を受け入れます。
ALTER AVAILABILITY GROUP [Contoso-ag] SET (DB_FAILOVER = ON);ALTER AVAILABILITY GROUP [Contoso-ag] SET (DB_FAILOVER = OFF);
注意事項
現在、データベース レベルのヘルス検出オプションによって SQL Server がディスク稼働時間を監視することはなく、SQL Server はデータベース ファイルの可用性を直接監視しないことに注意することが重要です。ディスク ドライブに障害が発生したり、使用できなくなった場合でも、それだけでは必ずしも可用性グループの自動的なフェールオーバーがトリガーされるわけではありません。
たとえば、データベースがアイドル状態でアクティブなトランザクションがなく、物理的な書き込みも発生していない場合、データベース ファイルの一部がアクセスできなくなると、SQL Server はファイルに対して読み取りまたは書き込み IO を実行せず、ステータスを変更しないことがあります。そのデータベースに対してただちに実行されるため、フェイルオーバーはトリガーされません。その後、データベース チェックポイントが発生したり、クエリを実行するために物理的な読み取りまたは書き込みが発生したりすると、SQL Server がファイルの問題に気づき、データベースの状態を変更し、その後データベース レベルの正常性検出がオンに設定された可用性グループを変更することで対応することがあります。データベースの健全性の変化によりフェイルオーバーが発生する可能性があります。
別の例として、SQL Server データベース エンジンがクエリを満たすためにデータ ページを読み取る必要がある場合、データ ページがバッファ プール メモリにキャッシュされている場合、クエリ要求を満たすために物理アクセスによるディスク読み取りは必要ありません。したがって、データベースの状態がすぐに更新されないため、データベースの健全性オプションが有効になっている場合でも、データ ファイルが欠落しているか使用できない場合でも、自動フェイルオーバーがすぐにトリガーされない可能性があります。
データベース フェイルオーバーは、柔軟なフェイルオーバー ポリシーとは別のものです
データベース レベルの正常性検出は、フェールオーバー ポリシーの SQL Server プロセスの正常性のしきい値を構成する柔軟なフェールオーバー ポリシーを実装します。データベース レベルの正常性検出は DB_FAILOVER パラメーターを使用して構成されますが、可用性グループ オプション FAILURE_CONDITION_LEVEL は SQL Server プロセスの正常性検出の構成とは別のものです。 2 つのオプションは独立しています。
データベースレベルの健全性検出の管理と監視
動的管理ビュー
システム DMV sys.availability_groups には、データベース レベルの正常性検出オプションがオフ (0) であるかオン (1) であるかを示す列 db_failover が表示されます。
sys.availability_groups から名前、db_failover を選択します
dmv 出力の例:
名前 | db_フェイルオーバー |
---|---|
Contoso-AG | 1 |
エラーログ
データベース レベルの正常性検出チェックが原因で可用性グループがフェールオーバーすると、SQL Server エラー ログ (または sp_readerrorlog のテキスト) にエラー メッセージ 41653 が表示されます。
たとえば、このエラーログの抜粋は、ディスクの問題によりトランザクション ログの書き込みが失敗し、その後 AutoHa-Sample という名前のデータベースがシャットダウンされ、データベース レベルの正常性検出がトリガーされて可用性グループをフェールオーバーしたことを示しています。
2016-04-25 12:20:21.08 spid1s エラー: 17053、重大度: 16、状態: 1。
2016-04-25 12:20:21.08 spid1s SQLServerLogMgr::LogWriter: オペレーティング システム エラー 21(デバイスの準備ができていません。) が発生しました。2016-04-25 12:20:21.08 spid1s ログ フラッシュ中に書き込みエラーが発生しました。
2016-04-25 12:20:21.08 spid79 エラー: 9001、重大度: 21、状態: 4。
2016-04-25 12:20:21.08 spid79 データベース「AutoHa-Sample」のログは利用できません。イベント ログで関連するエラー メッセージを確認してください。エラーを解決し、データベースを再起動します。
2016-04-25 12:20:21.15 spid79 エラー: 41653、重大度: 21、状態: 1。
2016-04-25 12:20:21.15 spid79 データベース 'AutoHa-Sample' でエラー (エラー タイプ: 2 'DB_SHUTDOWN') が発生し、可用性グループ 'Contoso-ag' の障害が発生しました。発生したエラーについては、SQL Server エラー ログを参照してください。この状態が続く場合は、システム管理者に連絡してください。
2016-04-25 12:20:21.17 spid79 データベース 'AutoHa-Sample' の状態情報 - 強化された LSN: '(34:664:1)' コミット LSN: '(34:656:1)' コミット時間: 'Apr 2016 年 2 月 25 日午後 12 時 19 分
2016-04-25 12:20:21.19 spid15s Always On 可用性グループとセカンダリ データベースの接続が、レプリカ ID: {c4ad5ea4-8a99-41fa-893e- の可用性レプリカ 'SQLServer-0' 上のプライマリ データベース 'AutoHa-Sample' に対して終了しました。 189154c24b49}。これは情報メッセージのみです。ユーザーによるアクションは必要ありません。
2016-04-25 12:20:21.21 spid75 Always On: 可用性グループ 'Contoso-ag' のローカル レプリカは、Windows Server フェールオーバー クラスタリング (WSFC) クラスターからの要求に応じて解決ロールに移行する準備をしています。これは情報メッセージのみです。ユーザーによるアクションは必要ありません。
2016-04-25 12:20:21.21 spid75 可用性グループ 'ag' のローカル可用性レプリカの状態が 'PRIMARY_NORMAL' から 'RESOLVING_NORMAL' に変更されました。可用性グループがオフラインになるため、状態が変わりました。関連付けられた可用性グループが削除されたか、ユーザーが Windows Server フェールオーバー クラスタリング (WSFC) 管理コンソールで関連付けられた可用性グループをオフラインにしたか、可用性グループが別の SQL Server インスタンスにフェールオーバーしているため、レプリカはオフラインになります。詳細については、SQL Server エラー ログ、Windows Server フェールオーバー クラスタリング (WSFC) 管理コンソール、または WSFC ログを参照してください。
拡張イベント sqlserver.availability_replica_database_fault_reporting
SQL Server 2016 以降では、データベース レベルの正常性検出によってトリガーされる新しい拡張イベントが定義されています。イベント名はsqlserver.availability_replica_database_fault_reporting
この XEvent はプライマリ レプリカでのみトリガーされます。この XEvent は、可用性グループでホストされているデータベースでデータベース レベルの正常性の問題が検出されたときにトリガーされます。
このイベントをキャプチャする XEvent セッションを作成する例を次に示します。パスが指定されていないため、XEvent 出力ファイルはデフォルトの SQL Server エラー ログ パスに配置される必要があります。可用性グループのプライマリ レプリカでこれを実行します。
拡張イベント セッション スクリプトの例
CREATE EVENT SESSION [AlwaysOn_dbfault] ON SERVERADD EVENT sqlserver.availability_replica_database_fault_reportingADD TARGET package0.event_file(SET filename=N'dbfault.xel',max_file_size=(5),max_rollover_files=(4))WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE) =ALLOW_SINGLE_EVENT_LOSS, MAX_DISPATCH_LATENCY=30 秒、MAX_EVENT_SIZE=0 KB、MEMORY_PARTITION_MODE=NONE、TRACK_CAUSALITY=OFF、STARTUP_STATE=ON)GOALTER イベント セッション AlwaysOn_dbfault ON SERVER STATE=STARTGO
拡張イベント出力
SQL Server Management Studio を使用してプライマリ SQL Server に接続し、「管理」ノードを展開してから、「拡張イベント」を展開します。セッション (上記のサンプルでは AlwaysOn_dbfault が名前でした) を見つけて展開し、出力ファイルを確認します。出力ファイルを選択すると、イベント ファイルが新しいタブで開きます。
フィールドの説明:
列データ | 説明 |
---|---|
可用性グループ ID | 可用性グループの ID。 |
可用性グループ名 | 可用性グループの名前。 |
可用性_レプリカ_id | 可用性レプリカの ID。 |
可用性_レプリカ_名 | 可用性レプリカの名前。 |
データベース名 | 障害を報告するデータベースの名前。 |
データベースレプリカID | 可用性レプリカ データベースの ID。 |
フェイルオーバー準備完了レプリカ | 同期されている自動フェールオーバー セカンダリ レプリカの数。 |
障害の種類 | 報告された障害 ID。可能な値: 0 - なし 1 - 不明 2 - シャットダウン |
is_critical | SQL Server 2016 以降、この値は XEvent に対して常に true を返す必要があります。 |
この出力例では、fault_type は、データベース名 AutoHa-Sample2 により、可用性グループ Contoso-ag の SQLSERVER-1 という名前のレプリカで重大なイベントが発生し、障害の種類 2-Shutdown が発生したことを示しています。
分野 | 価値 |
---|---|
可用性グループ ID | 24E6FE58-5EE8-4C4E-9746-491CFBB208C1 |
可用性グループ名 | Contoso-AG |
可用性_レプリカ_id | 3EAE74D1-A22F-4D9F-8E9A-DEFF99B1F4D1 |
可用性_レプリカ_名 | SQLサーバー-1 |
データベース名 | オートハサンプル2 |
データベースレプリカID | 39971379-8161-4607-82E7-098590E5AE00 |
フェイルオーバー準備完了レプリカ | 1 |
障害の種類 | 2 |
is_critical | 真実 |
関連資料
可用性グループの作成
可用性グループの変更
可用性グループの自動フェイルオーバーのための柔軟なフェイルオーバー ポリシー (SQL Server)
Always On フェールオーバー ポリシーを強化して SQL Server データベース データとログ ドライブをテストする
延長イベント
データベース データ ファイルが利用できない場合にフェールオーバーを実行するように Always On 可用性グループを構成する方法
FAQs
SQL ServerのミラーリングとAlwaysOn可用性グループの違いは何ですか? ›
AlwaysOn可用性グループはデータベースミラーリングとよく似た機能ですが、いくつか違いがあります。 例えば、データベースミラーリングではセカンダリを1台しか設定できないのに対し、AlwaysOn可用性グループではセカンダリを4台まで追加することが可能です。
Always On 可用性グループとは何ですか? ›SQL Server Always On 可用性グループは、高可用性と障害復旧ソリューションを提供するエンタープライズレベルの高度な機能です。 この機能は、SQL Server 2014 以降のバージョンを使用している場合に使用できます。
Sqlserverの正常性を確認する方法は? ›Windows スタートボタンより「コマンドプロンプト」を起動します。 「sc query MSSQLSERVER」コマンドで SQL Server サービスの状態を確認します。 以下は「STATE」が「RUNNING」になっているので正常に稼働していることが分かります。
SQL Serverのフェールオーバーにかかる時間は? ›WSFC(Windows Server フェールオーバー クラスター)を利用した SQL Server クラスターでは、30秒~1分程度の時間がフェールオーバーにかかるので、可用性グループのほうがダウンタイム(障害発生時の停止時間)を大幅に短縮することができます(これは、可用性グループの大きなメリットです)。
Always Onの前提条件は? ›Always On 可用性グループに参加するために、各サーバー インスタンスで同じバージョンの SQL Server が実行されている必要がある。 特定の可用性グループの可用性レプリカをホストするすべてのサーバー インスタンス間で SQL Server の照合順序を統一する必要があります。
Always On FCIとは何ですか? ›「Always on フェイルオーバークラスタリング」とは何か
FCIは、Windows Serverが提供する「WSFC(Windows Server Failover Clustering)」上で動作する、SQL Serverの可用性を高めるための機能です。