SQLServer开启CDC功能(1)

来源:这里教程网 时间:2026-03-02 12:05:59 作者:

开启SQLServer代理。对数据库启用CDC数据库级别功能。

USE  dbname

GO

EXEC  sys . sp_cdc_enable_db

GO检查是否开启:

SELECT   is_cdc_enabled  ,

         CASE  WHEN  is_cdc_enabled  = 0  THEN  'CDC 功能禁用 '

              ELSE  'CDC 功能启用 '

         END  描述

FROM     sys . databases

WHERE    NAME  =  'dbname'

对某些表开启捕获:

USE dbname; GO EXECUTE sys.sp_cdc_enable_table     @source_schema = N'dbo'   , @source_name = N'dept'   , @role_name = N'cdc_Admin'--可以自动创建   , @capture_instance=DEFAULT GO

检查是否开启成功: SELECT  name ,         is_tracked_by_cdc ,         CASE WHEN is_tracked_by_cdc = 0 THEN 'CDC功能禁用'              ELSE 'CDC功能启用'         END 描述 FROM    sys.tables WHERE   OBJECT_ID IN( OBJECT_ID('dbo.dept')                      )

可以对表insert数据,查看数据变化:

select * from [cdc].[dbo_dept_CT];

如果有数据的插入、更新、删除会在这里记录。

对于__$operation列:1 = 删除、2= 插入、3= 更新(旧值)、4= 更新(新值)对于__$start_lsn列:由于更改是来源与数据库的事务日志,所以这里会保存其事务日志的开始序列号(LSN)

但是微软不建议直接查询这类表,建议使用cdc.fn_cdc_get_all_changes_<捕获实例> 和cdc.fn_cdc_get_net_changes_<capture_instance>  来查询

查询已经开启的捕获: EXECUTE sys.sp_cdc_help_change_data_capture;GO

USE Sales; GO cdc.fn_cdc_get_all_changes_<捕获实例>用法: DECLARE @from_lsn binary(10), @to_lsn binary(10) SET @from_lsn =    sys.fn_cdc_get_min_lsn('dbo_dept') SET @to_lsn   = sys.fn_cdc_get_max_lsn() SELECT * FROM cdc.fn_cdc_get_all_changes_dbo_dept   (@from_lsn, @to_lsn, N'all'); GO

相关推荐