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
消息与其他消息区分开来。
我有几个月来一直在我的数据库中使用的 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
消息与其他消息区分开来。