我们已经有一个服务代理运行了很长一段时间(在同一台服务器上运行)。现在我们要在两台服务器之间添加数据库镜像。
为此,我们必须为服务代理创建新路由和新端点(以在故障转移的情况下支持镜像)。
我们已经在运行完全相同版本的 windows 和 sql-server 的开发环境中进行了尝试。这是:
Microsoft SQL Server 2008 R2 (RTM) - 10.50.1734.0 (X64) 2010 年 8 月 11 日 12:51:02 版权所有 (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 (Build 7600: )
一个区别是开发环境在虚拟系统中运行。
当我们在生产环境中实现这一点时,我们遇到了在开发环境中从未见过的问题。
服务代理更新变得非常缓慢,但我们可以看到一些消息通过了。
我们得到的错误信息是:
镜像路由不可用。'TCP://server1.domain.local:4022' 充当'未知' []。'TCP://server2.domain.local:4022' 充当'未知' []。
镜像路由是可操作的,但只连接到主体。“TCP://server1.domain.local:4022”充当“主体”[]。'TCP://server2.domain.local:4022' 充当'未知' []。
在我们的开发服务器上,我们收到了类似的消息:
镜像路由是可操作的。“TCP://server1.devdomain.local:4022”充当“镜像” []。“TCP://server2.devdomain.local:4022”充当“主体” []。
镜像路由是可操作的,但只连接到主体。'TCP://server1.devdomain.local:4022' 充当'未知' []。“TCP://server2.devdomain.local:4022”充当“主体”[]。
如您所见,我们收到有关镜像路由在我们的生产服务器上无法运行的消息,但在我们的开发服务器上却没有。
数据库镜像通过端口 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'
当我们删除数据库镜像端点时,一切又开始正常工作。
有任何想法吗?
谢谢!