Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server Service Broker-删除服务_Sql Server_Service Broker - Fatal编程技术网

Sql server SQL Server Service Broker-删除服务

Sql server SQL Server Service Broker-删除服务,sql-server,service-broker,Sql Server,Service Broker,我在数据库中使用了几个月的ServiceBroker队列基础结构。我意识到我的Initiator队列已达到200万条记录,它们是EndDialog消息。多亏了这个,我重新设计了它 我的问题是我无法删除那200万条记录。如本文所示,我使用了下面的方法,并让查询继续执行。它执行了20个小时,直到我取消它 declare @c uniqueidentifier while(1=1) begin select top 1 @c = conversation_handle from dbo.que

我在数据库中使用了几个月的ServiceBroker队列基础结构。我意识到我的
Initiator
队列已达到200万条记录,它们是
EndDialog
消息。多亏了这个,我重新设计了它

我的问题是我无法删除那200万条记录。如本文所示,我使用了下面的方法,并让查询继续执行。它执行了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
现在我正试图停止服务和排队,但似乎这又需要很多时间

drop service initiatorService
drop queue initiatorQueue
有没有其他方法可以立即删除

队列数据;
据我所知,实现你的目标没有捷径,除非你愿意:

  • 删除并重新创建数据库,或
  • 重置该数据库中所有队列中的所有Service Broker数据,包括对话框本身(在这种情况下,您可以尝试按照链接问题中Remus的建议-
    ALTER database…使用立即回滚设置新的\u Broker;

但是,关于您的代码,我建议使用
receive
而不是
select
;否则,可能会多次出现相同的对话框。此外,如果消息出现在队列中,您可能需要将它们与任何其他消息区分开来。

您是否有数据示例。它不一定是真实的,但是有几行数据和你想要删除的条件会很好。目前,我可以理解为什么这需要一些时间,因为while循环中的代码效率不高,并且一个接一个地占用了SQL资源,如果您查看事件监视器,您可能会发现您的工作是无效的suspended@CodeWarrior我猜投递服务成功地删除了隐藏在代码后面的消息。一个小时后,我看到一半的信息被删除了。第一个代码块,它使用
结束对话
对我的情况没有用,我应该使用
等待接收..
我想,我不确定。我添加了示例数据。您是否尝试过从[表名]中删除消息\u type\u name='1http://schemas.microsoft.com/sql.servicebroker/enddialog“然后是您想要满足的任何其他条件?很遗憾,delete语句在service broker队列上不起作用。您是对的,我明白,如果没有
receive
,我就无法融化队列中的消息。使用上面的代码,您的第二个选项就是我所做的。