SQLServer CDC

要捕获某个表的变更,必须先开启数据库级别的捕获,再开启表级的捕获

1. 启用数据库:在当前数据库下执行命令

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

3. 启用表,例如表名为"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

4. 查看表是否启用了CDC

select name, is_tracked_by_cdc from sys.tables where object_id = OBJECT_ID('dbo.t1')


5. 禁用表("dbo.t1")

EXEC sys.sp_cdc_disable_table
	@source_schema = 'dbo',
	@source_name = 't1',
	@capture_instance = 'all';

6. 禁用数据库

EXEC sys.sp_cdc_disable_db;

7. 一些异常情况的处理

(1) 数据库从2005恢复到2008,打开表级别CDC报错

未针对数据库 'AdventureWorks2014' 启用变更数据捕获。  
请确保已设置正确的数据库上下文,然后重试该操作。若要报告数据库已启用变更数据捕获这一情况,  
请查询 sys.databases 目录视图中的 is_cdc_enabled 列.  

或者打开数据库CDC时就报错

无法更新元数据来指示已对数据库 XXX 启用了变更数据捕获。执行命令 'SetCDCTracked(Value = 1)' 时失败。返回的错误为 15517: '无法作为数据库主体执行,因为主体 "dbo" 不存在、无法模拟这种类型的主体,或您没有所需的权限。'

解决办法:

ALTER AUTHORIZATION ON DATABASE::[数据库名] TO [sa] 



参考: <>

你可能感兴趣的:(数据库,SQL,Server)