数据库镜像和服务代理,镜像路由不可操作

时间:2011-03-23 11:40:05

标签: sql-server-2008 service-broker database-mirroring

我们有一个服务代理运行了很长时间(在同一台服务器上运行)。现在我们要在两台服务器之间添加数据库镜像。

为此,我们必须为服务代理创建新路由和新端点(以便在发生故障转移时支持镜像)。

我们在运行完全相同版本的windows和sql-server的开发环境中尝试过这个。这是:

Microsoft SQL Server 2008 R2(RTM) - 10.50.1734.0(X64)2010年8月11日12:51:02版权所有(c)Windows NT 6.1上的Microsoft Corporation Enterprise Edition(64位)(Build 7600:)

一个区别是开发环境在虚拟系统中运行。

当我们在生产环境中实现这一点时,我们遇到了在开发环境中从未见过的问题。

服务代理更新变得非常缓慢,但我们可以看到一些消息传来。

我们得到的错误消息是:

镜像路径无效。 'TCP://server1.domain.local:4022'充当'未知' []。 'TCP://server2.domain.local:4022'充当'未知' []。

镜像路由可操作,但仅连接到主体。 'TCP://server1.domain.local:4022'充当'Principal'[]。 'TCP://server2.domain.local:4022'充当'未知'[]。

在我们的开发服务器上,我们收到了类似的消息:

镜像路线正常运作。 'TCP://server1.devdomain.local:4022'充当'镜像' []。 'TCP://server2.devdomain.local:4022'充当'Principal' []。

镜像路由可操作,但仅连接到主体。 'TCP://server1.devdomain.local:4022'充当'未知'[]。 'TCP://server2.devdomain.local:4022'充当'Principal'[]。

正如您所看到的,我们收到的消息是镜像路由在我们的生产服务器上无法运行,但在我们的开发服务器上无法运行。

数据库镜像通过端口5022设置,服务代理设置为4022。

如何创建路由/端点的一些示例:

--created on booth principal and mirror
CREATE ENDPOINT [Mirroring] 
    AUTHORIZATION [domain\sqlservice]
    STATE=STARTED
    AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)
    FOR DATA_MIRRORING (ROLE = PARTNER, AUTHENTICATION = WINDOWS NEGOTIATE, ENCRYPTION = DISABLED)

--created on booth principal and mirror
CREATE ENDPOINT [BrokerEndpoint] 
    AUTHORIZATION [domain\sqlservice]
    STATE=STARTED
    AS TCP (LISTENER_PORT = 4022, LISTENER_IP = ALL)
    FOR SERVICE_BROKER (MESSAGE_FORWARDING = DISABLED, MESSAGE_FORWARD_SIZE = 10, AUTHENTICATION = WINDOWS NEGOTIATE, ENCRYPTION = DISABLED)

--created in DB1 (on principal)
CREATE ROUTE [RouteToDB2]  AUTHORIZATION [dbo]  WITH SERVICE_NAME = N'ExecSPReceiveService' , BROKER_INSTANCE = N'DF46452B-97F3-4924-AD2A-A130FDC2016F' , ADDRESS = N'TCP://server1.domain.local:4022' , MIRROR_ADDRESS = N'TCP://server2.domain.local:4022' 

--created in DB2 (on principal)
CREATE ROUTE [RouteToDB1]  AUTHORIZATION [dbo]  WITH SERVICE_NAME = N'ExecSPSendService' , BROKER_INSTANCE = N'91CBA730-48A2-47A8-95C8-0558706250AB' , ADDRESS = N'TCP://server1.domain.local:4022' , MIRROR_ADDRESS = N'TCP://server2.domain.local:4022' 

当我们删除数据库镜像端点时,一切都开始恢复正常。

有什么想法吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

据我所知,这些消息不是错误,而是在主体与镜像服务器建立连接时记录的预期信息消息。镜像未使用的连接会在90秒不活动后丢失,然后按需重新连接,因此根据镜像数据移动模式,您可能会或多或少地看到这些路由消息。

当您说Service Broker更新变得非常缓慢时,您能否提供一些数字,说明它与基线相比有多慢?

答案 1 :(得分:0)

问题是由于我们为服务经纪人设置了“即发即忘”模式。

http://rusanu.com/2006/04/06/fire-and-forget-good-for-the-military-but-not-for-service-broker-conversations/

我们实施了一个更好的解决方案,rusanu推广,之后一切都在工作。

我们还使用了此处显示的“快速数据推送”示例http://msftsbprodsamples.codeplex.com/