SQL Server 数据库环境准备
SQL Server 启动部署说明
确认 SQL Server Agent 已启动
方式 1:通过 SSMS 图形界面确认
- 使用具备管理权限的账号连接 SQL Server。
- 在 Object Explorer 中展开实例节点。
- 查看
SQL Server Agent节点状态。
判断方法:
- 节点图标正常显示并可展开,一般表示 Agent 已启动。
- 节点带红色停止标记,或右键菜单中只有
Start,通常表示 Agent 未启动。
如果未启动:
- 右键
SQL Server Agent。 - 点击
Start。 - 等待节点状态刷新后再次确认。
方式 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 访问权限有隔离要求,再按权限模型补充角色授权。