かなり長い間、サービスブローカーを実行してきました(同じサーバーで実行しています)。次に、2台のサーバー間にデータベースミラーリングを追加します。
これを機能させるには、サービスブローカー用の新しいルートと新しいエンドポイントを作成する必要がありました(フェイルオーバーの場合のミラーリングをサポートするため)。
これは、まったく同じバージョンのWindowsとsql-serverを実行している開発環境で試しました。これは:
Microsoft SQL Server 2008 R2(RTM)-10.50.1734.0(X64)2010年8月11日12:51:02 Copyright(c)Windows NT 6.1(Build7600:)上のMicrosoftCorporationEnterprise Edition(64ビット)
1つの違いは、開発環境が仮想システムで実行されていることです。
これを本番環境に実装すると、開発環境では見られなかった問題が発生しました。
サービスブローカーの更新は非常に遅くなりましたが、一部のメッセージが届いたことがわかりました。
表示されるエラーメッセージは次のとおりです。
ミラールートは機能していません。「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'
データベースミラーリングエンドポイントを削除すると、すべてが再び正常に機能し始めます。
何か案は?
ありがとう!