10

我使用向导和 T-SQL 在 SQL Server 2008 中配置了一个发行版,但之后我想使用向导删除它(右键单击复制并选择“禁用发布和分发...”)或在有和没有的情况下执行以下命令其参数:

exec sp_dropdistributor @no_checks = 1 -- no new results with @ignore_distributor = 1

将出现此错误:

Msq 21122,级别 16,状态 1,过程 sp_dropdistributiondb 第 124 行无法删除分发数据库“lobloblob”,因为它当前正在使用中。

我没有发布任何东西,没有配置任何订阅但给出了这个错误我该怎么办?

4

3 回答 3

14

尝试这个:

SELECT spid FROM sys.sysprocesses WHERE dbid = db_id('distribution')

杀死 spid 并重试。现在它应该可以工作了。

于 2012-04-18T17:30:27.260 回答
6

我使用了以下脚本:

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
于 2012-05-06T05:34:08.693 回答
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。

于 2012-04-17T17:40:12.553 回答