[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個資料表值函數
如果沒有的話,請確認相關資料表是否有啟用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'
2.確認SQL Server是否有自動建立追蹤異動資料表
一切都沒問題時,來測試一下相關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
正常擷取 DDL 相關陳述式。
如何關閉 CDC(1.先關閉 Table Level 2.關閉 DB Level)
透過sys.sp_cdc_help_change_data_capture 取得啟用異動資料擷取的每個資料表
exec sys.sp_cdc_help_change_data_capture
利用上面相關資訊並透過sys.sp_cdc_disable_table 關閉
exec sys.sp_cdc_disable_table
@source_schema = 'dbo',
@source_name = N'mytest',
@capture_instance = 'dbo_mytest';
這時系統資料表將被刪除(cdc.dbo_mytest_CT)
關閉DB Level
exec sys.sp_cdc_disable_db
這時你的系統資料表、SQL Agent Job和資料表值函數都應該已被刪除