我使用向导和T-SQL在SQL Server 2008中配置了一个分发,但在我想要删除它之后使用向导(右键单击复制并选择“禁用发布和分发...”)或执行以下命令有和没有参数:
exec sp_dropdistributor @no_checks = 1 -- no new results with @ignore_distributor = 1
将出现此错误:
Msq 21122,Level 16,State 1,Procedure sp_dropdistributiondb Line 124 不能删除分发数据库'lobloblob',因为它是 目前正在使用中。
我没有发布任何内容,没有配置任何订阅但是给出了这个错误 我该怎么办?
答案 0 :(得分:8)
试试这个:
SELECT spid FROM sys.sysprocesses WHERE dbid = db_id('distribution')
杀死spid并再试一次。现在应该可以了。
答案 1 :(得分:3)
我使用了以下脚本:
SELECT spid FROM sys.sysprocesses WHERE dbid = db_id('distribution')
并发现当前会话的session_id(包含分发配置脚本)不允许禁用分发,因此我建议此脚本终止运行spid以丢弃分发:
use [master]
declare @spid varchar(10)
select @spid=spid from sys.sysprocesses where dbid = DB_ID('distribution')
while @@ROWCOUNTS <> 0
exec ('KILL ' + @spid)
exec sp_dropdistributor @no_checks = 1
答案 2 :(得分:1)
我的猜测是分发清理工作导致问题。但是,要检查,准备在SSMS中的一个窗口中执行sp_dropdistributor并记下窗口的session_id。在一秒钟内,准备运行select session_id from sys.dm_os_waiting_tasks where blocked_session_id = <spid from window 1>
。回到窗口1,运行proc然后切换回窗口2并运行select。它会告诉你阻止数据库丢弃的会话的session_ids。