CDC 功能不显示过去一天的信息

CDC Function not displaying information from past day

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

我在 table 上启用了 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)
)

为什么功能不起作用?

If the specified LSN range does not fall within the change tracking timeline for the capture instance, the function returns error 208 ("An insufficient number of arguments were supplied for the procedure or function cdc.fn_cdc_get_all_changes.").

根据这个解释,您可能需要确定@begin_time@end_time 比如可以根据CDCtable的__$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 |
+------------------------+------------------------+--------------+----------------+----+----------+------------+-------------------------+