0
增量变化我怎样才能从SQL Server CDC例如增量变化:如何获得从SQL Server CDC
我有数据库和任何插入,更新表的客户或删除将被保存在CDC表顾客。
我想要一张表格告诉我接下来应该做些什么改变。
例如,每10分钟我只会读取最近10分钟的更改并保存此时间范围,因此下次我将最后一次加10分钟。 (增量读)
任何一个与CDC
任何很好的例子,由于
增量变化我怎样才能从SQL Server CDC例如增量变化:如何获得从SQL Server CDC
我有数据库和任何插入,更新表的客户或删除将被保存在CDC表顾客。
我想要一张表格告诉我接下来应该做些什么改变。
例如,每10分钟我只会读取最近10分钟的更改并保存此时间范围,因此下次我将最后一次加10分钟。 (增量读)
任何一个与CDC
任何很好的例子,由于
您需要保存您在数据库中的某个地方处理的最后一个LSN。
CREATE TABLE cdc_consumer
(cdc_consumer_id SMALLINT NOT NULL CONSTRAINT PK_cdc_consumer PRIMARY KEY CLUSTERED
, [description] VARCHAR(200) NOT NULL
, capture_instance SYSNAME NOT NULL
, last_start_lsn BINARY(10) NULL
, last_seqval BINARY(10) NULL
, date_last_consumed DATETIME NULL
, CONSTRAINT UQ_cdc_consumer UNIQUE NONCLUSTERED ([description], capture_instance));
当您完成处理一批CDC记录时更新此表。
为了得到起点和终点使用:
CREATE PROCEDURE cdc_consumer_start_batch
@cdcConsumerId SMALLINT
, @startLsn BINARY(10) OUTPUT
, @seqval BINARY(10) OUTPUT
, @endLsn BINARY(10) OUTPUT
AS
BEGIN
DECLARE @lastLsn BINARY(10) ;
DECLARE @captureInstance SYSNAME ;
SELECT @lastLsn = last_start_lsn,
@seqval = last_seqval,
@captureInstance = capture_instance
FROM cdc_consumer
WHERE cdc_consumer_id = @cdcConsumerId ;
IF (@captureInstance IS NULL)
BEGIN
DECLARE @errorText VARCHAR(50) ;
SET @errorText = 'Cannot find a cdc consumer with id: "' + CAST(@cdcConsumerId AS VARCHAR(10)) + '"';
RAISERROR(@errorText,16,1) ;
END
SET @startLsn = sys.fn_cdc_get_min_lsn(@captureInstance) ;
IF (@lastLsn > @startLsn)
SET @startLsn = @lastLsn;
SET @endLsn = sys.fn_cdc_get_max_lsn() ;
IF (@endLsn < @startLsn)
RETURN 1 ;
ELSE
RETURN 0 ;
END ;