【问题标题】:How to get incremental change from SQL Server CDC如何从 SQL Server CDC 获取增量更改
【发布时间】:2011-03-29 05:22:38
【问题描述】:

例如,我如何从 SQL Server CDC 获得增量更改:

我在数据库中有客户表,任何插入、更新或删除都将保存在 CDC 表客户中。

我希望有一张表可以告诉我接下来应该进行哪些更改。

例如每 10 分钟我会只读取最后 10 分钟的更改并保存这个时间范围,所以下次我会得到最后的时间加上 10 分钟。 (增量读取)

任何人都有 CDC 的好榜样

谢谢

【问题讨论】:

    标签: sql-server-2008 change-data-capture


    【解决方案1】:

    您需要将上次处理的 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 ;
    

    【讨论】:

      猜你喜欢
      • 2020-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-21
      相关资源
      最近更新 更多