跳到主要内容

SQL Server 数据库环境准备

SQL Server 启动部署说明

确认 SQL Server Agent 已启动

方式 1:通过 SSMS 图形界面确认

  1. 使用具备管理权限的账号连接 SQL Server。
  2. 在 Object Explorer 中展开实例节点。
  3. 查看 SQL Server Agent 节点状态。

判断方法:

  • 节点图标正常显示并可展开,一般表示 Agent 已启动。
  • 节点带红色停止标记,或右键菜单中只有 Start,通常表示 Agent 未启动。

如果未启动:

  1. 右键 SQL Server Agent
  2. 点击 Start
  3. 等待节点状态刷新后再次确认。

方式 2:通过 SQL 查询确认

优先使用下面的 DMV 查询:

SELECT
@@SERVERNAME AS server_name,
servicename,
startup_type_desc,
status_desc,
last_startup_time,
service_account
FROM sys.dm_server_services
WHERE servicename LIKE N'SQL Server Agent (%'
OR servicename = N'SQL Server Agent';
GO

结果判断:

  • status_desc = RUNNING:说明 SQL Server Agent 已启动。
  • status_desc = STOPPED:说明 SQL Server Agent 未启动。
  • 查询无结果或权限报错:让 DBA 代查,或者改用 SSMS / SQL Server Configuration Manager 检查服务状态。

确认执行 CDC 初始化的账号具备 db_owner 权限

补齐权限

如果用户已经存在,但没有 db_owner,由具备更高权限的账号执行:

USE [YourDatabase];
GO

ALTER ROLE [db_owner] ADD MEMBER [cdc_init_user];
GO

如果登录名已经存在,但数据库用户还没创建,通常先执行:

USE [YourDatabase];
GO

CREATE USER [cdc_init_user] FOR LOGIN [cdc_init_user];
ALTER ROLE [db_owner] ADD MEMBER [cdc_init_user];
GO

开启数据库级 CDC

建议先在测试库验证,再推广到正式库。

USE AppDb;
GO

IF (SELECT is_cdc_enabled FROM sys.databases WHERE name = DB_NAME()) = 0
EXEC sys.sp_cdc_enable_db;
GO

注意:

  • SQL Server Agent 刚启动时,立即执行 CDC 开启语句可能报错。
  • 如果遇到类似 14258: Cannot perform this operation while SQLServerAgent is starting 的错误,请稍后重试。

开启表级 CDC

IF NOT EXISTS (
SELECT 1
FROM cdc.change_tables
WHERE source_object_id = OBJECT_ID('dbo.CdcTimeTest')
)
BEGIN
EXEC sys.sp_cdc_enable_table
@source_schema = N'dbo',
@source_name = N'CdcTimeTest',
@role_name = NULL,
@supports_net_changes = 1;
END
GO

建议:

  • @role_name 如无专门授权需求,可先使用 NULL
  • 若客户环境对 CDC 访问权限有隔离要求,再按权限模型补充角色授权。