SqlServer CDC的使用


啟用數據庫:在當前數據庫下執行命令

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'

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM