sys.dm_hadr_database_replica_states (Transact-SQL)

適用対象:yesSQL Server (サポートされているすべてのバージョン)

SQL Server のローカル インスタンスが可用性レプリカをホストしている AlwaysOn 可用性グループに参加しているデータベースごとに 1 行のデータを返します。 この動的管理ビューは、プライマリ レプリカとセカンダリ レプリカの両方の状態情報を公開します。 セカンダリ レプリカの場合、このビューはサーバー インスタンス上のセカンダリ データベースごとに 1 行のデータを返します。 プライマリ レプリカの場合、このビューはプライマリ データベースごとに 1 行のデータと、対応するセカンダリ データベースについての追加の行のデータを返します。

重要

アクションと上位レベルの状態によっては、データベースの状態情報が使用できないか、古くなっている可能性があります。 また、値はローカルに関連しているものに限られます。 たとえば、プライマリ レプリカでは、 last_hardened_lsn 列の値には、セカンダリ レプリカが現在持っている可能性がある実際のセキュリティ強化された LSN 値ではなく、プライマリ レプリカで現在使用できる特定のセカンダリ データベースに関する情報が反映されます。

列名 データ型 説明 (プライマリ レプリカ上)
database_id int SQL Server のインスタンス内で一意な、データベースの識別子。 これは、 sys.databases カタログ ビューに表示される値と同じです。
group_id uniqueidentifier データベースが属する可用性グループの識別子。
replica_id uniqueidentifier 可用性グループ内の可用性レプリカの識別子。
group_database_id uniqueidentifier 可用性グループ内のデータベースの識別子。 この識別子は、このデータベースが参加しているすべてのレプリカで同じです。
is_local bit 可用性データベースがローカルであるかどうか。次のいずれかになります。

0 = データベースは、SQL Server インスタンスに対してローカルではありません。

1 = データベースはサーバー インスタンスに対してローカルです。
is_primary_replica bit レプリカがプライマリの場合は 1、セカンダリ レプリカの場合は 0 を返します。

適用対象: SQL Server 2014 (12.x) 以降。
synchronization_state tinyint データ移動状態。次のいずれかの値。

0 = 同期していません。 プライマリ データベースの場合、データベースがそのトランザクション ログを対応するセカンダリ データベースと同期する準備ができていないことを示します。 セカンダリ データベースの場合、データベースが接続の問題によりログの同期を開始していないか、データベースが中断されているか、起動中またはロールの切り替え中にデータベースが遷移状態になっていることを示します。

1 = 同期中。 プライマリ データベースの場合、データベースがセカンダリ データベースからのスキャン要求を受け入れる準備ができていることを示します。 セカンダリ データベースについては、そのデータベースのアクティブなデータ移動が行われていることを示します。

2 = 同期済み。 プライマリ データベースでは、"SYNCHRONIZING" の代わりに、"SYNCHRONIZED" と表示されます。 同期コミットのセカンダリ データベースでは、データベース レプリカでフェールオーバーの準備ができていることをローカル キャッシュが示している場合、およびデータベース レプリカが同期中である場合、"同期済み" と表示されます。

3 = 元に戻す。 セカンダリ データベースがプライマリ データベースからページをアクティブに取得している場合の元に戻すプロセスのフェーズを示します。
注意: セカンダリ レプリカ上のデータベースが REVERTING 状態の場合、セカンダリ レプリカへのフェールオーバーを強制すると、データベースはプライマリ データベースとして起動できない状態になります。 データベースをセカンダリ データベースとして再接続する必要があるか、ログ バックアップから新しいログ レコードを適用する必要があります。

4 = 初期化中。 セカンダリ データベースが元に戻す LSN からの遅れを取り戻すために必要なトランザクション ログがセカンダリ レプリカに配布され、書き込まれている場合の元に戻すフェーズを示します。
注意: セカンダリ レプリカ上のデータベースが INITIALIZING 状態の場合、セカンダリ レプリカへのフェールオーバーを強制すると、データベースはプライマリ データベースとして起動できない状態になります。 データベースをセカンダリ データベースとして再接続する必要があるか、ログ バックアップから新しいログ レコードを適用する必要があります。
synchronization_state_desc nvarchar(60) データ移動の状態の説明。次のいずれかになります。

NOT SYNCHRONIZING

SYNCHRONIZING

SYNCHRONIZED

戻す

初期化
is_commit_participant bit 0 = トランザクション コミットは、このデータベースに対して同期されません。

1 = このデータベース レプリカに対してトランザクションのコミットが同期されています。

非同期コミットの可用性レプリカにあるデータベースの場合、この値は常に 0 になります。

同期コミット可用性レプリカ上のデータベースの場合、この値はプライマリ データベースでのみ正確です。
synchronization_health tinyint 可用性レプリカ上の可用性グループに参加しているデータベースの同期状態と、可用性レプリカの可用性モード (同期コミットまたは非同期コミット モード) の積集合を反映します。値は次のいずれかです。

0 = 正常ではありません。 データベースの synchronization_state は 0 (NOT SYNCHRONIZING) です。

1 = 部分的に正常です。 同期コミット可用性レプリカ上のデータベースは、 synchronization_state が 1 (SYNCHRONIZING) の場合、部分的に正常であると見なされます。

2 = 正常。 同期コミット可用性レプリカ上のデータベースは 、synchronization_state が 2 (SYNCHRONIZED) の場合は正常であると見なされ、非同期コミット可用性レプリカ上のデータベースは 、synchronization_state が 1 (SYNCHRONIZING) の場合は正常と見なされます。
synchronization_health_desc nvarchar(60) 可用性データベースの synchronization_health の説明。

NOT_HEALTHY

PARTIALLY_HEALTHY

健康
database_state tinyint 0 = Online

1 = 復元

2 = 回復中

3 = 復旧保留

4 = 問題あり

5 = 緊急

6 = オフライン

メモ: sys.databases の 状態 列と同じです。
database_state_desc nvarchar(60) 可用性レプリカの database_state の説明。

ONLINE

RESTORING

RECOVERING

RECOVERY_PENDING

SUSPECT

EMERGENCY

OFFLINE

メモ: sys.databases の列と state_desc 同じです。
is_suspended bit データベースの状態。次のいずれかになります。

0 = 再開

1 = 中断
suspend_reason tinyint データベースが中断されている場合、中断状態の理由は次のいずれかです。

0 = ユーザー アクション

1 = パートナーからの中断

2 = やり直し

3 = キャプチャ

4 = 適用

5 = 再起動

6 = 元に戻す

7 = 再検証

8 = セカンダリ レプリカの同期ポイントの計算エラー
suspend_reason_desc nvarchar(60) データベース中断状態の理由の説明。次のいずれか。

SUSPEND_FROM_USER: ユーザーが手動でデータ移動を中断しました

SUSPEND_FROM_PARTNER = 強制フェールオーバー後にデータベース レプリカが中断される

SUSPEND_FROM_REDO: 再実行フェーズ中にエラー発生しました

SUSPEND_FROM_APPLY = ログをファイルに書き込むときにエラーが発生しました (エラー ログを参照)

SUSPEND_FROM_CAPTURE: プライマリ レプリカのログをキャプチャ中にエラーが発生しました

SUSPEND_FROM_RESTART: データベースを再起動する前にデータベース レプリカが中断されました (エラー ログを参照してください)

SUSPEND_FROM_UNDO: 元に戻すフェーズ中にエラー発生しました (エラー ログを参照してください)

SUSPEND_FROM_REVALIDATION = 再接続時にログ変更の不一致が検出されました (エラー ログを参照)

SUSPEND_FROM_XRF_UPDATE: 共通のログ ポイントが見つかりません (エラー ログを参照してください)
recovery_lsn numeric(25,0) プライマリ レプリカの場合、復旧後またはフェールオーバー後、プライマリ データベースが新しいログ レコードを書き込む前のトランザクション ログの末尾。 特定のセカンダリ データベースの場合、この値が現在のセキュリティで強化された LSN (last_hardened_lsn) recovery_lsn より小さい場合、このセカンダリ データベースを再同期する必要がある値 (つまり、元に戻して再初期化する) です。 この値が現在の堅牢化された LSN 以上の場合、再同期は不要であり、発生しません。

これは recovery_lsn 、ゼロで埋め込まれたログ ブロック ID を反映します。 実際のログ シーケンス番号 (LSN) ではありません。 この値の派生方法については、このトピックで後述 する「LSN 列の値について」を参照してください。
truncation_lsn numeric(25,0) プライマリ レプリカでは、プライマリ データベースに対して、対応するすべてのセカンダリ データベースの最小ログ切り捨て LSN が反映されます。 ローカル ログの切り捨てが (バックアップ操作などにより) ブロックされている場合、この LSN はローカル切り捨て LSN を超える可能性があります。

特定のセカンダリ データベースでは、対象となるデータベースの切り捨てポイントが反映されます。

truncation_lsn は、ゼロで埋め込まれたログ ブロック ID を反映します。 これは実際のログ シーケンス番号ではありません。
last_sent_lsn numeric(25,0) プライマリ レプリカに対してクエリを実行すると、 last_sent_lsn セカンダリ レプリカ データベース行ごとに報告されます。 すべてのログ ブロックがプライマリによって送信されたポイントを示すログ ブロック識別子。 これは、最後に送信されたログ ブロックの ID ではなく、次に送信されるログ ブロックの ID です。

last_sent_lsn は、ゼロで埋め込まれたログ ブロック ID を反映します。実際のログ シーケンス番号ではありません。
last_sent_time datetime プライマリ レプリカに対してクエリを実行すると、 last_sent_time セカンダリ レプリカ データベース行ごとに報告されます。 最後のログ ブロックが送信された時刻。
last_received_lsn numeric(25,0) セカンダリ レプリカに対してクエリを実行すると、 last_received_lsn ローカル セカンダリ レプリカ データベースの行が報告されます。 このセカンダリ データベースをホストするセカンダリ レプリカによってすべてのログ ブロックが受信されたポイントを識別するログ ブロック ID。

これは last_received_lsn 、ゼロで埋め込まれたログ ブロック ID を反映します。 これは実際のログ シーケンス番号ではありません。
last_received_time datetime セカンダリ レプリカに対してクエリを実行すると、 last_received_time ローカル セカンダリ レプリカ データベースの行が報告されます。 最後に受信したメッセージのログ ブロック ID がセカンダリ レプリカで読み取られた時刻。
last_hardened_lsn numeric(25,0) セカンダリ データベースで最後に強化された LSN のログ レコードを含むログ ブロックの先頭。

非同期コミット プライマリ データベースまたは現在のポリシーが "遅延" である同期コミット データベースでは、値は NULL です。 他の同期コミット プライマリ データベースの場合は、 last_hardened_lsn すべてのセカンダリ データベースで強化された LSN の最小値を示します。

注: これは last_hardened_lsn 、ゼロで埋め込まれたログ ブロック ID を反映しています。 これは実際のログ シーケンス番号ではありません。 詳細については、このトピック で後述する「LSN 列の値について」を参照してください。
last_hardened_time datetime セカンダリ データベースでは、最後に強化された LSN (last_hardened_lsn) のログ ブロック識別子の時刻。 プライマリ データベースの場合、書き込まれた LSN の最小値に対応する時刻が反映されます。
last_redone_lsn numeric(25,0) セカンダリ データベースで再実行された最後のログ レコードの実際のログ シーケンス番号。 は last_redone_lsn 常に last_hardened_lsn未満です。
last_redone_time datetime セカンダリ データベースでログ レコードが最後に再実行された時刻。
log_send_queue_size bigint セカンダリ データベースに送信されていない、プライマリ データベースのログ レコードの量 (KB 単位)。
log_send_rate bigint プライマリ レプリカ インスタンスが前回アクティブな期間中にデータを送信した平均レート (キロバイト (KB)/秒)。
redo_queue_size bigint まだ再実行されていないセカンダリ レプリカのログ ファイル内のログ レコードの量 (KB 単位)。
redo_rate bigint 特定のセカンダリ データベースでログ レコードが再実行される平均レート (キロバイト (KB)/秒)。
filestream_send_rate bigint FILESTREAM ファイルがセカンダリ レプリカに配布される速度 (KB/秒)。
end_of_log_lsn numeric(25,0) ログ LSN のローカル終了。 プライマリ データベースとセカンダリ データベースのログ キャッシュ内の最後のログ レコードに対応する実際の LSN。 プライマリ レプリカの場合、セカンダリ行には、セカンダリ レプリカがプライマリ レプリカに送信した最新の進捗状況メッセージからのログ LSN の末尾が反映されます。

end_of_log_lsn には、ゼロが埋め込まれたログ ブロック ID が反映されます。 これは実際のログ シーケンス番号ではありません。 詳細については、このトピック で後述する「LSN 列の値について」を参照してください。
last_commit_lsn Numeric(25,0) トランザクション ログの最終コミット レコードに対応する実際のログ シーケンス番号。

プライマリ データベースの場合、これは処理された最終コミット レコードに対応します。 セカンダリ データベースの行には、セカンダリ レプリカがプライマリ レプリカに送信したログ シーケンス番号が反映されます。

セカンダリ レプリカの場合、これは再実行された最終コミット レコードです。
last_commit_time datetime 最終コミット レコードに対応する時刻。

セカンダリ データベースの場合、この時刻はプライマリ データベースと同じになります。

プライマリ レプリカの場合、各セカンダリ データベースの行に、そのセカンダリ データベースをホストするセカンダリ レプリカがプライマリ レプリカに報告した時刻が表示されます。 プライマリ データベース行と特定のセカンダリ データベース行の時間の差は、再実行プロセスがキャッチアップされ、進行状況がセカンダリ レプリカによってプライマリ レプリカに報告されたと仮定して、目標復旧ポイント (RPO) の約を表します。
low_water_mark_for_ghosts bigint プライマリ データベースのゴースト クリーンアップで使用されるウォーター マークが低いことを示す、データベースの単調に増加する数。 この数が時間の経過と同時に増加していない場合は、ゴーストクリーンアップが発生しない可能性があることを意味します。 プライマリ レプリカでは、クリーンアップする非実体行を決定するために、すべての可用性レプリカ (プライマリ レプリカを含む) でこのデータベースのこの列の最小値を使用します。
secondary_lag_seconds bigint 同期中にセカンダリ レプリカがプライマリ レプリカの背後にある秒数。

適用対象: SQL Server 2016 (13.x) 以降。

LSN 列の値について

end_of_log_lsnlast_hardened_lsnlast_received_lsn、last_sent_lsnrecovery_lsntruncation_lsnの列の値は、実際のログ シーケンス番号 (LSN) ではありません。 これらの各値には、0 が埋め込まれたログ ブロック ID が反映されます。

end_of_log_lsnlast_hardened_lsnおよびrecovery_lsn は、フラッシュ LSN です。 たとえば、 last_hardened_lsn は、ディスク上に既に存在するブロックを超える次のブロックの開始を示します。 そのため、LSN <last_hardened_lsnの値 はディスク上にあります。 この値に = である >LSN はフラッシュされません。

sys.dm_hadr_database_replica_statesによって返される LSN 値のうち、last_redone_lsnのみが実際の LSN です。

セキュリティ

アクセス許可

サーバーに対する VIEW SERVER STATE 権限が必要です。

参照

Always On 可用性グループ (SQL Server)
可用性グループの監視 (Transact-SQL)