アメリカにサーバーがあり、ヨーロッパのサーバーの1つにService Brokerを介して接続する必要があります。
ヨーロッパのサーバーは可用性グループであり、そのリスナーはsqlst
と呼ばれます。
uSAサーバーで次のコマンドを実行すると、
declare @sql varchar(1008)
set @sql = 'powershell.exe -command Test-NetConnection sqlst -port 4022'
EXEC xp_cmdshell @sql
下の画像を見るとわかるように、すべての接続が正常であるという素晴らしいメッセージが表示されます:Ip addresses
は、無実を保護するためにマスクされています。
しかしながら、
正しいデータベースのUSA Server
に移動し、次のクエリafter I have been told that the broker has not worked
を実行すると、
-- Error messages in the queue
SELECT *
FROM sys.transmission_queue
where service_contract_name = 'ORCACOLAContract'
order by enqueue_time desc
失敗した理由として、次の理由がわかります。
DNS lookup failed with error: '11001(No such Host is known.)'.
Europe
サーバーのサービスアカウントがKerberos
に追加され、 すべてのリンクサーバーが正常に動作します 。
sql error log
を見ると、関連するエラーメッセージは表示されません。
これが service brokerとalwayson に関連していることはわかりません
私は これらすべてを行っています -リンクサーバーは正常に動作しています。
USAマシンのsql server
の外にはアクセスできません。 SQL Serverの内部では、私はsysadmin
です。
上記で述べたように、次のコマンドを実行すると、適切な応答が得られます。
declare @sql varchar(1008)
set @sql = 'powershell.exe -command Test-NetConnection sqlst -port 4022'
EXEC xp_cmdshell @sql
サーバー名をIPアドレスに置き換えて実行すると、次のようになります。
declare @sql varchar(1008)
set @sql = 'powershell.exe -command Test-NetConnection 200.1.0.xxx -port 4022'
EXEC xp_cmdshell @sql
私はまた、ポジティブなリターンを得ます。
ただし、nslookup
-200.1.0.xxxのIPアドレスを使用してsqlst
を実行すると、次のエラーが発生します。
declare @sql varchar(1008)
set @sql = 'powershell.exe -command $ns = (nslookup.exe 200.1.0.xxx )[-4..-3]
$ns'
EXEC xp_cmdshell @sql
基本的には、domain controller
はthe sqlst ip address
を見つけることができません
ipconfig/flushdns
を実行する方法はありませんが、代わりに次のコマンドを実行しました。
declare @sql varchar(1008)
set @sql = 'powershell.exe -command Clear-DnsClientCache'
EXEC xp_cmdshell @sql
この問題は実際には、信頼できるドメインUS-Europeが(この質問の範囲を超えて)構成された特定の方法によって引き起こされましたが、元の質問で確認できるスクリプトを使用してから、sysadminsを操作し、サーバーを見つけました両端(送信元と宛先)で認証された名前がケースを解決しました-ルーターを変更した後 この例 :
--targer server
USE [cola]
GO
IF EXISTS (SELECT * FROM sys.routes WHERE name = N'rou_ORCARoute')
DROP ROUTE [rou_ORCARoute]
CREATE ROUTE [rou_ORCARoute]
WITH SERVICE_NAME = N'svc_SendStatusChangeService' ,
BROKER_INSTANCE = N'CD718202-CB34-4DCD-BADC-7800C5F2FF3D' , --BROKER ID OF ORCASTG
ADDRESS = N'TCP://mysourceserver.mycompany.com:4022' --IP address of my source server
GO
--source server
USE [ORCASTG]
GO
IF EXISTS (SELECT * FROM sys.routes WHERE name = N'rou_CAUKRoute')
DROP ROUTE [rou_CAUKRoute]
CREATE ROUTE [rou_CAUKRoute]
WITH SERVICE_NAME = N'svc_receiveStatusChangeService' ,
BROKER_INSTANCE = N'452711F3-60CD-47E6-BFA4-3BD8C9D6AB56' , --BROKER_ID OF COLA
ADDRESS = N'TCP://mytargetserver.mycompany.com:4022'--IP address of target server
GO