You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server删除分发器失败:分发数据库被占用问题求助

解决SQL Server分发器删除失败(数据库正在使用)的问题

操作步骤(生产环境低峰期执行)

1. 停止复制相关代理作业

先终止所有与复制关联的SQL Server代理作业,避免它们持续连接分发数据库:

-- 列出所有复制相关作业
SELECT name FROM msdb.dbo.sysjobs 
WHERE name LIKE '%distribution%' OR name LIKE '%log reader%' OR name LIKE '%snapshot%';

-- 逐个停止复制作业(替换[作业名称]为查询结果中的作业名)
EXEC msdb.dbo.sp_stop_job @job_name = N'[作业名称]';

2. 断开分发数据库的活动连接

查询并终止所有连接到prod_database的会话:

-- 查询当前连接到目标数据库的会话
SELECT spid, loginame, hostname, program_name
FROM sys.sysprocesses
WHERE dbid = DB_ID('prod_database');

-- 终止指定会话(将<spid>替换为查询到的会话ID)
KILL <spid>;

注意:执行KILL前需确认会话非关键业务连接,务必在业务低峰时段操作。

3. 移除数据库的分发配置(保留生产库)

执行以下命令,仅取消prod_database作为分发数据库的身份,不会删除数据库本身:

EXEC sp_dropdistributiondb @database = N'prod_database', @keep_db = 1;

4. 删除分发器整体配置

最后清除分发器的全局配置:

EXEC sp_dropdistributor @no_checks = 0, @ignore_distributor = 0;

验证结果

操作完成后,在SQL Server Management Studio中确认:

  • prod_database已从“系统数据库”文件夹移至“用户数据库”
  • 复制相关的代理作业、分发器配置已完全清除

内容的提问来源于stack exchange,提问作者Jose Luis Valdez de la Cruz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 22:22:45