SQLServer開啟CDC功能

ywxj_001發表於2020-10-15

開啟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 BenlaiSales;

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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章