sys.dm_hadr_database_replica_states (Transact-SQL)

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 = データベースはサーバー インスタンスに対してローカルです。

synchronization_state

tinyint

データ移動の状態。次のいずれかになります。

説明

0

[同期されていません]。

  • プライマリ データベースの場合、データベースがそのトランザクション ログを対応するセカンダリ データベースと同期する準備ができていないことを示します。

  • セカンダリ データベースの場合、データベースが接続の問題によりログの同期を開始していないか、データベースが中断されているか、起動中またはロールの切り替え中にデータベースが遷移状態になっていることを示します。

1

[同期中]。

  • プライマリ データベースについては、このデータベースがセカンダリ データベースからのスキャン要求を受け入れる準備ができることを示します。

  • セカンダリ データベースについては、そのデータベースのアクティブなデータ移動が行われていることを示します。

2

[同期済み]。

  • プライマリ データベースでは、"SYNCHRONIZING" の代わりに、"SYNCHRONIZED" と表示されます。

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

3

[元に戻しています]。 セカンダリ データベースがプライマリ データベースからページをアクティブに取得している場合の元に戻すプロセスのフェーズを示します。

注記注意

セカンダリ レプリカ上のデータベースが REVERTING 状態の場合、セカンダリ レプリカに強制的にフェールオーバーすると、そのデータベースはプライマリ データベースとして起動できない状態のままになります。 データベースにセカンダリ データベースとして再接続するか、ログ バックアップから新しいログ レコードを適用する必要があります。

4

初期化しています。 セカンダリ データベースが元に戻す LSN からの遅れを取り戻すために必要なトランザクション ログがセカンダリ レプリカに配布され、書き込まれている場合の元に戻すフェーズを示します。

注記注意

セカンダリ レプリカ上のデータベースが REVERTING 状態の場合、セカンダリ レプリカに強制的にフェールオーバーすると、そのデータベースはプライマリ データベースとして起動した状態のままになります。 データベースにセカンダリ データベースとして再接続するか、ログ バックアップから新しいログ レコードを適用する必要があります。

synchronization_state_desc

nvarchar(60)

データ移動の状態の説明。次のいずれかになります。

NOT SYNCHRONIZING

SYNCHRONIZING

SYNCHRONIZED

REVERTING

INITIALIZING

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

HEALTHY

database_state

tinyint

0 = オンライン

1 = 復元

2 = 復旧

3 = 復旧保留

4 = 問題あり

5 = 緊急

6 = オフライン

注意

sys.databases の state 列と同じです。

database_state_desc

nvarchar(60)

可用性レプリカの database_state の説明。

ONLINE

RESTORING

RECOVERING

RECOVERY_PENDING

SUSPECT

EMERGENCY

OFFLINE

注意

sys.databases の state 列と同じです。

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 には、0 が埋め込まれたログ ブロック ID が反映されます。 これは実際のログ シーケンス番号 (LSN) ではありません。 この値がどのように派生するかについては、この後の「LSN 列の値について」を参照してください。

truncation_lsn

numeric(25,0)

プライマリ レプリカの場合、プライマリ データベースで、対応するすべてのセカンダリ データベースを対象とする最小のログ切り捨て LSN が反映されます。 ローカル ログの切り捨てが (バックアップ操作などにより) ブロックされている場合、この LSN はローカル切り捨て LSN を超える可能性があります。

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

truncation_lsn には、0 が埋め込まれたログ ブロック ID が反映されます。 これは実際のログ シーケンス番号ではありません。

last_sent_lsn

numeric(25,0)

プライマリによって送信されたすべてのログ ブロックの最後のポイントを示すログ ブロック ID。 これは、最後に送信されたログ ブロックの ID ではなく、次に送信されるログ ブロックの ID です。

last_sent_lsn には、0 が埋め込まれたログ ブロック ID が反映されます。これは実際のログ シーケンス番号ではありません。

last_sent_time

datetime

ログ ブロックが最後に送信された時刻。

last_received_lsn

numeric(25,0)

このセカンダリ データベースをホストするセカンダリ レプリカによって受信されたすべてのログ ブロックの最後のポイントを示すログ ブロック ID。

last_received_lsn には、0 が埋め込まれたログ ブロック ID が反映されます。 これは実際のログ シーケンス番号ではありません。

last_received_time

datetime

最後に受信したメッセージのログ ブロック ID がセカンダリ レプリカで読み取られた時刻。

last_hardened_lsn

numeric(25,0)

セカンダリ データベースで最後に書き込まれた LSN のログ レコードを含むログ ブロックの先頭。

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

注意

last_hardened_lsn には、0 が埋め込まれたログ ブロック 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 の末尾が反映されます。

rend_of_log_lsn には、0 が埋め込まれたログ ブロック ID が反映されます。 これは実際のログ シーケンス番号ではありません。 詳細については、この後の「LSN 列の値について」を参照してください。

last_commit_lsn

Numeric(25,0)

トランザクション ログの最終コミット レコードに対応する実際のログ シーケンス番号。

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

セカンダリ レプリカの場合、これは再実行された最終コミット レコードです。

last_commit_time

datetime

最終コミット レコードに対応する時刻。

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

プライマリ レプリカの場合、各セカンダリ データベースの行に、そのセカンダリ データベースをホストするセカンダリ レプリカがプライマリ レプリカに報告した時刻が表示されます。 プライマリ データベースの行と特定のセカンダリ データベースの行の時刻の違いは、再実行プロセスの遅延が解消され、進行状況がセカンダリ レプリカからプライマリ レプリカに報告されることを想定した、おおよその目標復旧時間 (RPO) を表しています。

low_water_mark_for_ghosts

bigint

プライマリ データベースでの非実体クリーンアップで使用される低レベルのウォーター マークを示すデータベースの単調に増加する数値。 この数値が時間の経過と共に増加しない場合は、非実体クリーンアップが行われない可能性があることを意味します。 プライマリ レプリカでは、クリーンアップする非実体行を決定するために、すべての可用性レプリカ (プライマリ レプリカを含む) でこのデータベースのこの列の最小値を使用します。

LSN 列の値について

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

end_of_log_lsnlast_hardened_lsn、および recovery_lsn は、フラッシュ LSN です。 たとえば、last_hardened_lsn は既にディスク上にあるブロックの次のブロックの先頭を示します。 そのため、last_hardened_lsn の値を下回る LNS はすべてディスク上に存在します。 この値以上の LSN はフラッシュされません。

sys.dm_hadr_database_replica_states によって返される LSN 値の中で last_redone_lsn だけが実際の LSN です。

セキュリティ

権限

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

関連項目

概念

AlwaysOn 可用性グループ (SQL Server)

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