次の方法で共有


sys.dm_hadr_database_replica_states (Transact-SQL)

適用対象: SQL Server Azure SQL Managed Instance

SQL Server のローカル インスタンスが可用性レプリカをホストしている AlwaysOn 可用性グループに参加しているデータベースごとに 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
REVERTING
INITIALIZING
is_commit_participant bit 0 = トランザクション コミットは、このデータベースに対して同期されません。

1 = トランザクション コミットは、このデータベースに対して同期されます。

非同期コミット可用性レプリカ上のデータベースの場合、この値は常に 0

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

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

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

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

NOT_HEALTHY
PARTIALLY_HEALTHY
HEALTHY
database_state tinyint 0 = オンライン
1 = 復元中
2 = 回復中
3 = 回復が保留中
4 = Suspect
5 = 緊急
6 = オフライン

注:state 列と同じ sys.databases.
database_state_desc nvarchar(60) 可用性レプリカの database_state の説明。

ONLINE
RESTORING
RECOVERING
RECOVERY_PENDING
SUSPECT
EMERGENCY
OFFLINE

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

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

0 = ユーザー アクション
1 = パートナーからの一時停止
2 = やり直し
3 = Capture
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 のログ レコードを含むログ ブロックの先頭。

非同期コミット プライマリ データベース、または現在のポリシーが delayされている同期コミット データベースでは、値は 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/秒)。

redo_rate は、データベース エンジンの起動以降に再実行されたログ バイトの合計を、再実行がアクティブに実行されていた時間範囲で割ることによって計算されます(経過時間ではなく)。 再実行が継続的に実行されない可能性があるため、結果の値はパフォーマンス カウンターの値とは異なる (高い) Database Replica:Redone Bytes/sec 可能性があります。
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 同期中にセカンダリ レプリカがプライマリ レプリカの背後にある秒数。

プライマリ レプリカでは、各セカンダリ データベースの同期遅延 (lag) は、セカンダリ レプリカでまだ強化されていないプライマリ レプリカで最も早く強化された LSN が書き込まれた後の秒数として計算されます。 この値は、データ移動が中断された場合に 0 として表示されます。 この値がアクティブなラグを表示するには、データ移動が中断されていない状態である必要があります。

適用対象: SQL Server 2016 (13.x) 以降のバージョン。

LSN 列の値について

end_of_log_lsnlast_hardened_lsnlast_received_lsnlast_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 です。

アクセス許可

SQL Server 2019 (15.x) 以前のバージョンでは、サーバーに対する VIEW SERVER STATE アクセス許可が必要です。

SQL Server 2022 (16.x) 以降のバージョンでは、サーバーに対する VIEW SERVER PERFORMANCE STATE アクセス許可が必要です。