ITPub博客

首页 > 数据库 > SQL Server > SQLServer开启CDC功能(1)

SQLServer开启CDC功能(1)

原创 SQL Server 作者:ywxj_001 时间:2020-10-15 18:22:26 0 删除 编辑

开启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


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22996654/viewspace-2727262/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
在零售、金融、互联网行业从事数据库相关工作10余年,有丰富的数据库管理和架构的相关经验。 涉及SQLServer、Oracle、MySQL、PostgreSQL等多种数据库。 目前在一家互联网公司担任数据库负责人。 负责整个集团数据库的架构设计和管理工作。

注册时间:2010-01-19

  • 博文量
    163
  • 访问量
    188831