1、docker中安装SqlServer并开启代理:

从 Docker Hub 中拉出 SQL Server 2017 Linux 容器映像。

docker pull microsoft/mssql-server-linux:2017-latest

运行容器映像:

docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=<YourStrong!Passw0rd>' \
   -p 1433:1433 --name sql1 \
   -d microsoft/mssql-server-linux:2017-latest

连接到SqlServer:

下列步骤在容器内部使用 SQL Server 命令行工具 sqlcmd 来连接 SQL Server。

使用 docker exec -it 命令在运行的容器内部启动交互式 Bash Shell。 在下面的示例中,sql1 是在创建容器时由 --name 参数指定的名称。

docker exec -it sql1 "bash"

进入到容器中。

进入到容器中后,开启mssql-server的代理服务:

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

2、在源库执行(开启库级 CDC)

sql

USE MyDB -- 修改为需要开启的数据库

GO

EXEC sys.sp_cdc_enable_db

GO

2. 查询是否成功开启

sql

SELECT is_cdc_enabled 

FROM sys.databases

WHERE NAME = '<数据库名>' -- 库名

3. 开启表级 CDC

> 不确定能否只开启表级别而不开启库级别,看文档说是需要的 `after a database has been enabled

sql

USE MyDB -- 修改为需要开启的数据库

GO

EXEC sys.sp_cdc_enable_table

@source_schema = N'dbo', -- 默认好像是 dbo,不是库名

@source_name = N'MyTable', -- 表名

@role_name = NULL,

@filegroup_name = null,

@supports_net_changes = 1

GO

4.注意事项

1). 需要打开 **SQL Server 代理** 之后才会在 xxx_CT 表中查看到变更信息

> 没打开之前会默认记录,但不会显示,打开之后会补充到 xxx_CT 表。即:对表启用变更数据捕获时,SQL Server 代理不必正在运行。但是,只有当 SQL Server 代理正在运行时,捕获进程才会处理事务日志并将条目写入更改表。

2). 默认 cleanup Job 是没有启动的,需要手动启动

sql

USE cdc_source; -- 数据库名



GO

EXEC sys.sp_cdc_help_jobs;

GO



-- 停止作业

GO

EXEC sys.sp_cdc_stop_job @job_type = N'cleanup';

GO



-- 修改配置

GO

EXECUTE sys.sp_cdc_change_job

@job_type = N'cleanup',

@retention = 1;

GO



-- 开始作业

GO

EXEC sys.sp_cdc_start_job @job_type = N'cleanup';

GO

Logo

云原生社区为您提供最前沿的新闻资讯和知识内容

更多推荐