sqlServer 开启CDC

1.为了测试,在容器中启动了一个sqlServer,版本为开发版,注意:只有开发版和企业版才支持cdc

docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=123456aA??" -p 1433:1433 -v /E/docker_data/sqlserverdata:/var/opt/mssql/data --name sqlserver19 -d mcr.microsoft.com/mssql/server:2019-CU2-ubuntu-16.04

账号:sa

密码:123456aA??

2.下载SSMS官方的管理工具

地址:https://download.microsoft.com/download/8/a/8/8a8073d2-2e00-472b-9a18-88361d105915/SSMS-Setup-CHS.exesqlServer 开启CDC_第1张图片

 创建连接

3.创建测试数据

create database myDb;
use myDb;
CREATE TABLE [dbo].[test] (
  [id] int  NOT NULL,
  [name] varchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS  NULL,
  [create_time] datetime2(7)  NULL
);

4.开启cdc

-- 为指定的数据库库开启CDC
USE myDb
GO
EXEC sys.sp_cdc_enable_db;

--检查指定的库是否开启CDC,结果为1表示开启了CDC,为0表示没有开启。'myDb'表示要查询的库名,如果要查别的库只需更改库名
SELECT is_cdc_enabled,
       CASE
           WHEN is_cdc_enabled = 0 THEN 0
           ELSE 1
           END status
FROM sys.databases
WHERE NAME = 'myDb';




-- 开启表的CDC
USE myDb
IF EXISTS(SELECT 1 FROM sys.tables WHERE name='test' AND is_tracked_by_cdc = 0)
BEGIN
    EXEC sys.sp_cdc_enable_table
        @source_schema = 'dbo', -- source_schema
        @source_name = 'test', -- table_name
        @capture_instance = NULL, -- capture_instance
        @supports_net_changes = 1, -- supports_net_changes
        @role_name = NULL -- role_name
END

执行建表cdc的时候,可能会报错

消息 22832,级别 16,状态 1,过程 sys.sp_cdc_enable_table_internal,行 673 [批起始行 18]
Could not update the metadata that indicates table [dbo].[test] is enabled for Change Data Capture. The failure occurred when executing the command '[sys].[sp_cdc_add_job] @job_type = N'capture''. The error returned was 22836: 'Could not update the metadata for database myDb to indicate that a Change Data Capture job has been added. The failure occurred when executing the command 'sp_add_jobstep_internal'. The error returned was 14234: 'The specified '@srv' is invalid (valid values are returned by sp_helpserver).'. Use the action and error to determine the cause of the failure and resubmit the request.'. Use the action and error to determine the cause of the failure and resubmit the request.

cdc - SQL Server 2012 Change Data Capture Error 14234 - Stack Overflow

相关解决方案见上

SELECT srvname AS OldName FROM master.dbo.sysservers
SELECT SERVERPROPERTY('ServerName') AS NewName

-- 替换OldName
sp_dropserver '2d6ac68406c4';  
GO
-- 替换NewName
sp_addserver 'bc3a42d3d2f6', local;  
GO  

继续执行cdc



-- 查询表是否开启CDC
SELECT name,
       is_tracked_by_cdc
FROM sys.tables
where object_id = OBJECT_ID('dbo.test');


-- 禁用表的CDC
USE myDb
GO
EXEC sys.sp_cdc_disable_table
     @source_schema = N'dbo',
     @source_name = N'test',
     @capture_instance = N'all'
GO

创建完后 会自动增加视图,系统表等cdc相关的东西

sqlServer 开启CDC_第2张图片

相关参考文档

配置SQL Server CDC_应用与数据集成平台 ROMA Connect_用户指南_数据集成指导_创建数据集成任务(组合任务)_华为云

你可能感兴趣的:(sql,server,cdc,sqlserver,数据库,microsoft)