sys.dm_hadr_database_replica_states (Transact-SQL)
適用対象: SQL Server
Azure SQL Managed Instance
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 = オンライン 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_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 のログ レコードを含むログ ブロックの先頭。 非同期コミット プライマリ データベース、または現在のポリシーが "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 が書き込まれた後の秒数として計算されます。 適用対象: SQL Server 2016 (13.x) 以降。 |
LSN 列の値について
end_of_log_lsn、last_hardened_lsn、last_received_lsn、last_sent_lsn、recovery_lsn、およびtruncation_lsnの列の値は、実際のログ シーケンス番号 (LSN) ではありません。 これらの各値には、0 が埋め込まれたログ ブロック ID が反映されます。
end_of_log_lsn、 last_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 権限が必要です。
SQL Server 2022 以降でのアクセス許可
サーバーに対する VIEW SERVER PERFORMANCE STATE アクセス許可が必要です。