注意:
sqlserver的cdc功能用于获取数据库中数据的变更,开启的话会有一定的资源消耗,尤其是生产系统下一定要先评估其影响,需要cdc功能配合数仓项目使用前一定要开启数据库的SQL代理。
详细步骤:
1、开启具体数据库实例的CDC
USE databaname;
GO
EXEC sys.sp_cdc_enable_db;
2、查询数据库的CDC是否正确开启
select * from sys.databases where is_cdc_enabled = 1;
如果数据库的CDC被正确开启,运行SQL后会返回下列结果
3、添加CDC功能需要的文件组和文件(必要)
注意:这是必要的,创建单独的文件组和文件后会防止其在运行过程中与数据库的主资源争夺
查询现有的文件的位置,直接在此目录下创建即可
SELECT name, physical_name FROM sys.master_files WHERE database_id = DB_ID('databasename');
--添加文件组
ALTER DATABASE databasename ADD FILEGROUP CDC2;
--添加文件
ALTER DATABASE databasename
ADD FILE
(
NAME= 'CDC',
FILENAME = 'F:\CDC.ndf',
SIZE = 100MB
)
TO FILEGROUP CDC2;
上述代码中,databasename是对应数据库的名称,CDC2是文件组的名称可以自定义,括号中NAME文件名的名称可以自定义,FILENAME是文件位置,以上面查询的文件的位置一致即可;上述文件组与文件创建成功后,可以再次使用查询文件位置命令,会看到返回结果中有新建的文件(需要权限够高)
4、开启具体表的CDC
EXEC sys.sp_cdc_enable_table
@source_schema = '表结构',
@source_name = '表名称',
@role_name = NULL,
@supports_net_changes = 1,
@index_name = NULL,
@captured_column_list = NULL,
@filegroup_name = '上述创建文件的名称';
5、验证表的CDC开启
方法一:查询所有开启CDC功能的表(会返回表名和状态:状态为1表示开启CDC功能)
SELECT name,is_tracked_by_cdc FROM sys.tables WHERE is_tracked_by_cdc = '1';
方法二:查询单个表是否开启CDC(返回状态,状态为1表示成功开启CDC功能)
SELECT is_tracked_by_cdc FROM sys.tables WHERE name='表名';
6、关闭表CDC和数据库CDC
也可以直接关掉数据库CDC,对应的表CDC也会关掉
--关闭表CDC
EXEC sys.sp_cdc_disable_table @source_schema = '表结构', @source_name = '表名', @capture_instance = 'all';
--关闭数据库CDC
EXEC sys.sp_cdc_disable_db;
上述步骤为自己总结,如发现问题及时留言,大家一起进步!!