Sql server ServiceBroker对话:结束还是不结束™;
专家时间(等待@RemusRusanu和mates^^) 上下文 我构建了一个ServiceBroker,主要基于SQLTeam的blog示例(),以模拟同一SQLServer实例上两个数据库之间的ETL行为。在经历了几个小时与代理、对话、禁用队列、中毒消息、激活问题等的技巧后,我终于成功了 问题 为了让它更适合生产,我只需要处理以下主题:Sql server ServiceBroker对话:结束还是不结束™;,sql-server,service-broker,stability,Sql Server,Service Broker,Stability,专家时间(等待@RemusRusanu和mates^^) 上下文 我构建了一个ServiceBroker,主要基于SQLTeam的blog示例(),以模拟同一SQLServer实例上两个数据库之间的ETL行为。在经历了几个小时与代理、对话、禁用队列、中毒消息、激活问题等的技巧后,我终于成功了 问题 为了让它更适合生产,我只需要处理以下主题: 消息队列清空时,未从sys.conversation_终结点清除已关闭的状态对话:SQLTeam的示例未在启动器端或接收方端提供任何结束对话,因此添加了类似
非常感谢你把我带到原力的黑暗面:)把四个问题塞进一个问题里是不好的做法。看起来答案根本没有关系。例如,我认为#2的答案可能与外部事务仍处于活动状态且未提交有关,但我们需要更多的上下文来确定,要求澄清(以及由此产生的编辑)将与其他问题一起运行。请随意1)慢慢来,2)必要时重复上下文,3)如果你真的觉得问题有实质性的联系,请链接到问题,但不要把它变成一个“我能想到的一切都在这里”的问题。@Jeroemoster我明白了,即使我感到有点沮丧。为什么要打开4个可能相互关联的线程,而不需要拆分就可以完成这个任务?主要原因可能是清晰,好的。顺便说一句,由于我没有答案,我在我这方面做了更多的研究,从这条线索来看,我只保留最后一个关于Windows事件日志的问题,它意外地填满了死亡。有什么想法吗?ThanksIt将取决于记录的事件类型,但即使如此,您仍然可以根据大小和持续时间限制事件日志(检查其属性)。您可以完全关闭SQL Server事件日志记录,但这可能不是您想要做的。关于您的信息,我使用生命周期来结束对话,因为他们会陷入“关闭”状态并停留在那里。如果我们的应用程序与数据库断开连接的时间太长,那么它可以从头开始重新加载所有内容,所以我不需要这些消息case@tivivi,我和你有同样的错误。你找到解决办法了吗?
;SEND ON CONVERSATION @dlgId
MESSAGE TYPE [//Sync/Message] (@syncedData)
END TRY
BEGIN CATCH
IF (XACT_STATE()) = -1
ROLLBACK;
INSERT INTO SyncErrors(ErrorProcedure, ErrorLine, ErrorNumber, ErrorMessage, ErrorSeverity, ErrorState, SyncedData)
SELECT ERROR_PROCEDURE(), ERROR_LINE(), ERROR_NUMBER(), ERROR_MESSAGE(), ERROR_SEVERITY(), ERROR_STATE(), @syncedData
END CATCH