变更数据捕获 - sys.dm_cdc_log_scan_sessions

适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例

针对当前数据库中的每个日志扫描会话返回一行。 返回的最后一行表示当前会话。 可以使用此视图返回有关当前日志扫描会话的状态信息,或有关自 SQL Server 实例上次启动以来所有会话的聚合信息。

每当重新启动 SQL Server 实例或在发生故障转移后,将重置这些 sys.dm_cdc_log_scan_sessions 记录。 此外,如果查询的数据库处于 AlwaysOn 可用性组的辅助角色,则不会返回任何记录。

有关详细信息,请查看 什么是变更数据捕获(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:第一次扫描,生成哈希表
3:第二次扫描
4:第二次扫描
5:第二次扫描
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 行。

权限

需要 VIEW DATABASE STATE 权限才能查询 sys.dm_cdc_log_scan_sessions 动态管理视图。 有关动态管理视图权限的详细信息,请参阅动态管理视图和函数 (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  

后续步骤