首页 > 解决方案 > CDC 功能不显示过去一天的信息

问题描述

我正在使用 SQL Server 2014 (SP2)。

我在一张桌子上启用了 CDC。然后我想查看过去 24 小时内发生的所有事情,所以我使用以下内容:

DECLARE @begin_time DATETIME, @end_time DATETIME, @begin_lsn BINARY(10), @end_lsn BINARY(10); 
SELECT @begin_time = GETDATE()-1, @end_time = GETDATE(); 
SELECT @begin_lsn = sys.fn_cdc_map_time_to_lsn('smallest greater than', @begin_time); 
SELECT @end_lsn = sys.fn_cdc_map_time_to_lsn('largest less than or equal', @end_time); 
SELECT * 
FROM [MyDatabase].cdc.fn_cdc_get_all_changes_dbo_MyTable(@begin_lsn,@end_lsn,'all') 
GO

但我不断收到以下错误:

An insufficient number of arguments were supplied for the procedure or function cdc.fn_cdc_get_all_changes_ ... .

但是,上述函数是我启用 CDC 时系统生成的,仅包含 3 个参数:

ALTER function [cdc].[fn_cdc_get_all_changes_dbo_MyTable]
(   @from_lsn binary(10),
    @to_lsn binary(10),
    @row_filter_option nvarchar(30)
)

为什么该功能不起作用?

标签: sql-serverfunctiontsqlsql-server-2014cdc

解决方案


如果指定的 LSN 范围不在捕获实例的更改跟踪时间线内,则函数返回错误 208(“为过程或函数 cdc.fn_cdc_get_all_changes 提供的参数数量不足。”)。

根据这个解释,你可能需要确定@begin_time和,@end_time 比如你可以根据 CDC 表的 __$start_lsn 来指定开始时间和结束时间。如果您执行以下查询,您将不会遇到错误。

DECLARE @begin_time DATETIME, @end_time DATETIME, @begin_lsn BINARY(10), @end_lsn BINARY(10); 
--SELECT @begin_time = GETDATE()-1, @end_time = GETDATE(); 
SELECT @begin_time=sys.fn_cdc_map_lsn_to_time(MIN(__$start_lsn))  FROM AdventureWorks2017.cdc.dbo_MyTable_CT
SELECT @end_time = sys.fn_cdc_map_lsn_to_time(MAX(__$start_lsn)) FROM AdventureWorks2017.cdc.dbo_MyTable_CT
SELECT @begin_lsn = sys.fn_cdc_map_time_to_lsn('smallest greater than', @begin_time); 
SELECT @end_lsn = sys.fn_cdc_map_time_to_lsn('largest less than or equal', @end_time); 
SELECT * 
FROM AdventureWorks2017.cdc.fn_cdc_get_all_changes_dbo_MyTable(@begin_lsn, @end_lsn, N'all') 

+------------------------+------------------------+--------------+----------------+----+----------+------------+-------------------------+
|      __$start_lsn      |       __$seqval        | __$operation | __$update_mask | Id | SomeText | ModifiedBy |      ModifiedDate       |
+------------------------+------------------------+--------------+----------------+----+----------+------------+-------------------------+
| 0x0000002E000070F80004 | 0x0000002E000070F80003 |            2 | 0x0F           |  2 | SomeText | Matt       | 2020-02-18 14:38:00.120 |
+------------------------+------------------------+--------------+----------------+----+----------+------------+-------------------------+

推荐阅读