変更データ キャプチャ - sys.dm_cdc_log_scan_sessions

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

現在のデータベース内のログ スキャン セッションごとに 1 行のデータを返します。 返された最後の行は、現在のセッションを表します。 このビューを使用すると、現在のログ スキャン セッションのステータス情報を取得できます。SQL Server のインスタンスが開始されてからのすべてのセッションの集計情報を取得することもできます。

sys.dm_cdc_log_scan_sessionsレコードは、SQL Serverのインスタンスが再起動されたとき、またはフェールオーバーが発生するたびにリセットされます。 さらに、クエリ対象のデータベースがAlways On可用性グループのセカンダリ ロールにある場合、レコードは返されません。

詳細については、「変更データ キャプチャ (CDC) とは」を参照してください。

列名 データ型 説明
session_id int セッションの ID。

0 = この行で返されるデータは、SQL Server のインスタンスが最後に開始してからのすべてのセッションの集計です。
start_time datetime セッションの開始時刻です。

session_id = 0 の場合、集計対象データの収集が開始された時刻を表します。
end_time datetime セッションが終了した時刻です。

NULL は、セッションがアクティブであることを表します。

session_id = 0 の場合、最後のセッションが終了した時刻を表します。
duration int セッションの実行時間 (秒単位) です。

0 = セッションには、変更データ キャプチャ トランザクションが含まれていません。

session_id = 0 の場合、変更データ キャプチャ トランザクションを持つすべてのセッションの実行時間の合計 (秒単位) を表します。
scan_phase nvarchar(200) セッションの現在のフェーズです。 次に、使用される値とその説明を示します。

1: 構成の読み取り
2: 1 回目のスキャン、ハッシュ テーブルの構築
3: 2 回目のスキャン
4: 2 回目のスキャン
5: 2 回目のスキャン
6: スキーマのバージョン管理
7: 最後のスキャン
8: 完了

session_id = 0 の場合、この値は常に "Aggregate" になります。
error_count int 発生したエラーの数。

session_id = 0 の場合、すべてのセッション内のエラーの合計数を表します。
start_lsn nvarchar(23) セッションの開始 LSN です。

session_id = 0 の場合、最後のセッションの開始 LSN を表します。
current_lsn nvarchar(23) スキャン中の現在の LSN。

session_id = 0 の場合、現在の LSN は 0 です。
end_lsn nvarchar(23) セッションの最終 LSN です。

NULL は、セッションがアクティブであることを表します。

session_id = 0 の場合、最後のセッションの終了 LSN を表します。
tran_count bigint 処理された変更データ キャプチャ トランザクションの数。 このカウンターは、フェーズ 2 で設定されます。

session_id = 0 の場合、すべてのセッション内の処理されたトランザクションの数を表します。
last_commit_lsn nvarchar(23) 処理された最後のコミット ログ レコードの LSN です。

session_id = 0 の場合、任意のセッションの最後のコミット ログ レコード LSN を表します。
last_commit_time datetime 最後のコミット ログ レコードが処理された時刻です。

session_id = 0 の場合、任意のセッションの最後のコミット ログ レコードの時刻を表します。
log_record_count bigint スキャンされたログ レコードの数。

session_id = 0 の場合、すべてのセッションでスキャンされたレコードの数を表します。
schema_change_count int 検出されたデータ定義言語 (DDL) 操作の数。 このカウンターは、フェーズ 6 で設定されます。

session_id = 0 の場合、すべてのセッション内の処理された DDL 操作の数を表します。
command_count bigint 処理されたコマンドの数。

session_id = 0 の場合、すべてのセッション内の処理されたコマンドの数を表します。
first_begin_cdc_lsn nvarchar(23) 変更データ キャプチャ トランザクションを含んでいた最初の LSN です。

session_id = 0 の場合、変更データ キャプチャ トランザクションを含んでいた最初の LSN です。
last_commit_cdc_lsn nvarchar(23) 変更データ キャプチャ トランザクションを含んでいた最終コミット ログ レコードの LSN です。

session_id = 0 の場合、変更データ キャプチャ トランザクションを含んでいた任意のセッションの最終コミット ログ レコード LSN を表します。
last_commit_cdc_time datetime 変更データ キャプチャ トランザクションを含んでいた最終コミット ログ レコードが処理された時刻です。

session_id = 0 の場合、変更データ キャプチャ トランザクションを含んでいた任意のセッションの最終コミット ログ レコードの時刻を表します。
latency int セッション内の、end_timelast_commit_cdc_time の間の、秒単位の差です。 このカウンターは、フェーズ 7 の最後に設定されます。

session_id = 0 の場合、あるセッションによって記録された、最後のゼロ以外の待機時間の値を表します。
empty_scan_count int 変更データ キャプチャ トランザクションが含まれない、連続するセッションの数。
failed_sessions_count int 失敗したセッションの数。

注釈

sys.dm_cdc_log_scan_sessions DMV には、最大 32 個のスキャン セッションと、 を含むすべてのスキャン セッションsession_id= 0の集計が含まれます。 そのため、この動的管理ビューには、いつでも最大 33 行を含めることができます。

アクセス許可

sys.dm_cdc_log_scan_sessions 動的管理ビューに対してクエリを実行するには、VIEW DATABASE STATE 権限が必要です。 動的管理ビューの権限について詳しくは、動的管理ビューと関数 (Transact-SQL) に関する記事を参照してください。

SQL Server 2022 以降でのアクセス許可

データベースに対する VIEW DATABASE PERFORMANCE STATE 権限が必要です。

次の例では、最新のセッションの情報が取得されます。

USE AdventureWorks2022;  
GO  
SELECT session_id, start_time, end_time, duration, scan_phase,  
    error_count, start_lsn, current_lsn, end_lsn, tran_count,  
    last_commit_lsn, last_commit_time, log_record_count, schema_change_count,  
    command_count, first_begin_cdc_lsn, last_commit_cdc_lsn,   
    last_commit_cdc_time, latency, empty_scan_count, failed_sessions_count  
FROM sys.dm_cdc_log_scan_sessions  
WHERE session_id = (SELECT MAX(b.session_id) FROM sys.dm_cdc_log_scan_sessions AS b);  
GO  

次の手順