[SQL SERVER][CDC]SQL2008新特性-Change Data Capture#3補充

[SQL SERVER][CDC]SQL2008新特性-Change Data Capture#3補充

很久之前我為了ETL工具而測試SQL2008 CDC新特性,

[SQL SERVER][CDC]SQL2008新特性-Change Data Capture#1簡介

[SQL SERVER][CDC]SQL2008新特性-Change Data Capture#2測試

如果你還不知道該如何啟用CDC的話,

可以參考測試文章,那裡有整個啟用和測試CDC過程,

這裡順便補充一下擷取 DDL要注意的地方以及該如何關閉CDC。

 

1.確定你有以下2個資料表值函數

clip_image002

如果沒有的話,請確認相關資料表是否有啟用CDC

exec sys.sp_cdc_enable_table

@source_schema='dbo',

@source_name='mytest',

@role_name='cdc_admin',

@capture_instance='dbo_mytest',

@supports_net_changes=1

 

select name, type, type_desc, is_tracked_by_cdc

from sys.tables

where name='mytest'

clip_image004

 

2.確認SQL Server是否有自動建立追蹤異動資料表

clip_image006

 

一切都沒問題時,來測試一下相關DDL的擷取。

alter table mytest add c2 varchar(10)

alter table mytest add c3 nvarchar(50)

 

查看結果

select OBJECT_NAME(source_object_id) as 'TableName',

OBJECT_NAME(object_id) As 'CDC TableName',

ddl_command,ddl_lsn As 'Log SequenceNumber',

ddl_time As 'DateModified'

From cdc.ddl_history

clip_image008

正常擷取 DDL 相關陳述式。

 

 

如何關閉 CDC(1.先關閉 Table Level 2.關閉 DB Level)

透過sys.sp_cdc_help_change_data_capture 取得啟用異動資料擷取的每個資料表

exec sys.sp_cdc_help_change_data_capture

clip_image010

 

利用上面相關資訊並透過sys.sp_cdc_disable_table 關閉

exec sys.sp_cdc_disable_table

@source_schema = 'dbo',

@source_name = N'mytest',

@capture_instance = 'dbo_mytest';

clip_image012

 

這時系統資料表將被刪除(cdc.dbo_mytest_CT)

clip_image014

 

關閉DB Level

exec sys.sp_cdc_disable_db

這時你的系統資料表、SQL Agent Job和資料表值函數都應該已被刪除

clip_image016clip_image018clip_image020

clip_image022