本文介绍: 校验。
docker安装
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=Zcyc123456" -p 1433:1433 --name sqlserver -d mcr.microsoft.com/mssql/server:2017-latest
开启库cdc模式
选择你自己的数据库,执行以下sql语句
EXEC sys.sp_cdc_enable_db;
校验
SELECT is_cdc_enabled FROM sys.databases WHERE name = YourDatabaseName
开启表cdc
原因:即使您在数据库级别启用了CDC(Change Data Capture)功能,对于要捕获变更的特定表,仍然需要在表级别单独启用CDC。启动数据库级别的CDC功能为该数据库开启了使用CDC技术的基础环境,但不会自动对任何用户表进行变更数据捕获。
批量开启表cdc
-- 确保当前数据库已启用CDC
USE test;
GO
-- 获取dbo架构下所有用户表名(可以根据需要修改查询以选择不同架构或添加其他过滤条件)
DECLARE @TableNames TABLE (TableName SYSNAME);
INSERT INTO @TableNames (TableName)
SELECT t.name
FROM sys.tables t
WHERE t.is_ms_shipped = 0 -- 排除系统表和临时表
AND t.schema_id = SCHEMA_ID('dbo') -- 只考虑dbo架构下的表
-- AND t.some_column IS NOT NULL -- 添加任何其他你想要应用的筛选条件
-- 遍历表格并启用CDC
DECLARE @CurrentTableName SYSNAME;
DECLARE TableCursor CURSOR FOR
SELECT TableName FROM @TableNames;
OPEN TableCursor;
FETCH NEXT FROM TableCursor INTO @CurrentTableName;
WHILE @@FETCH_STATUS = 0
BEGIN
IF NOT EXISTS (SELECT 1 FROM sys.change_tracking_tables WHERE object_id = OBJECT_ID(@CurrentTableName) AND is_track_columns_updated_on = 1)
BEGIN
DECLARE @Sql NVARCHAR(MAX) = N'EXEC sys.sp_cdc_enable_table
@source_schema = N''dbo'',
@source_name = N''' + @CurrentTableName + ''',
@role_name = NULL,
@capture_instance = N''dbo_' + @CurrentTableName + '''';
EXEC sp_executesql @Sql;
END
FETCH NEXT FROM TableCursor INTO @CurrentTableName;
END
CLOSE TableCursor;
DEALLOCATE TableCursor;
docker中启动SQL Server Agent
还需要开启SQL Server Agent才能够使用cdc功能
docker exec -it sql1 "bash"
root@b9a09ce17c02:/# /opt/mssql/bin/mssql-conf set sqlagent.enabled true
SQL Server needs to be restarted in order to apply this setting. Please run
'systemctl restart mssql-server.service'.
root@b9a09ce17c02:/# exit
exit
[root@localhost ~]#
[root@localhost ~]# docker stop sql1
sql1
[root@localhost ~]# docker start sql1
sql1
检查是否开启成功
-- Check if CDC is enabled on the database
SELECT name, is_cdc_enabled FROM sys.databases WHERE name = 'your_database_name';
-- Check if CDC is enabled on the tables
SELECT s.name AS schema_name, t.name AS table_name, t.is_tracked_by_cdc
FROM sys.tables t
JOIN sys.schemas s ON t.schema_id = s.schema_id
WHERE t.is_tracked_by_cdc = 1;
原文地址:https://blog.csdn.net/weixin_42842069/article/details/135971977
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_66597.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。