啟用數據庫:在當前數據庫下執行命令
USE CDRDB; GO EXEC sys.sp_cdc_enable_db
這個過程會在當前數據庫下創建6個系統表
cdc.captured_columns
cdc.change_tables
cdc.ddl_history
cdc.index_columns
cdc.lsn_time_mapping
dbo.systranschemas
2查詢哪些數據庫啟用了CDC功能
select * from sys.databases where is_cdc_enabled = 1
啟用表,例如表名為”dbo.t1”
EXEC sys.sp_cdc_enable_table @source_schema = 'dbo', @source_name = 't1', @role_name = null;
注:為第一個表啟用CDC后,SQLServer生成兩個Agent作業
cdc.dbname_capture
cdc.dbname_cleanup
查看表是否啟用了CDC
select name, is_tracked_by_cdc from sys.tables where object_id = OBJECT_ID('dbo.t1')
禁用表(“dbo.t1”)
EXEC sys.sp_cdc_disable_table @source_schema = 'dbo', @source_name = 't1', @capture_instance = 'all';
禁用數據庫CDC
EXEC sys.sp_cdc_disable_db;
一些異常情況的處理
(1) 數據庫從2005恢復到2008,打開表級別的附加日志報錯
未針對數據庫 'AdventureWorks2014' 啟用變更數據捕獲。 請確保已設置正確的數據庫上下文,然后重試該操作。若要報告數據庫已啟用變更數據捕獲這一情況, 請查詢 sys.databases 目錄視圖中的 is_cdc_enabled 列.
解決辦法:
ALTER AUTHORIZATION ON DATABASE::[數據庫名] TO [sa]
CDC表狀態的含義:
__$operation=2的情況,表示新增
__$operation=3或者4,表示更新,3表示舊值,4表示新值
__$operation=1的情況,表示刪除
根據發布批量生成表
SELECT 'EXEC sys.sp_cdc_enable_table @source_schema = N'''+b.source_owner+''',' +'@source_name='''+b.source_object+''','+'@role_name=''cdc'',@supports_net_changes = 1' FROM dbo.MSpublications a,dbo.MSarticles b WHERE a.publication_id=b.publication_id AND a.publisher_db=b.publisher_db and a.publication ='his_repl'
根據系統表批量生成表
select 'EXEC sys.sp_cdc_enable_table @source_schema = ''dbo'', @source_name = '''+name+''', @role_name = null;' from sysobjects where xtype='U' and category ='0'