SQL Server Service Broker - 丢弃服务

SQL Server Service Broker - Drop service

我有几个月来一直在我的数据库中使用的 Service Broker 队列基础结构。我意识到我的 Initiator 队列已达到 200 万条记录,这些记录是 EndDialog 条消息。所以我重新设计了它,多亏了这个 link.

我的问题是我无法删除那 200 万条记录。我使用了下面 link 中指示的方法,并让查询继续执行。它执行了 20 个小时,直到我取消它。

declare @c uniqueidentifier
while(1=1)
begin
    select top 1 @c = conversation_handle from dbo.queuename
    if (@@ROWCOUNT = 0)
    break
    end conversation @c with cleanup
end

现在我正在尝试删除 Service 和 Queue,但似乎又要花很多时间。

drop service initiatorService
drop queue initiatorQueue

有没有其他方法可以立即删除?

队列数据;

据我所知,实现目标没有捷径,除非您愿意:

  • 删除并重新创建数据库,或者
  • 重置该数据库中所有队列中的所有 Service Broker 数据,包括对话框本身(在这种情况下,您可以尝试遵循 Remus 在链接问题中的建议 - ALTER DATABASE ... SET NEW_BROKER WITH ROLLBACK IMMEDIATE;

然而,关于您的代码,我建议使用 receive 而不是 select;否则您可能会多次收到相同的对话框。此外,如果消息出现在队列中,您可能希望将 EndDialog 消息与其他消息区分开来。