J'ai un serveur aux États-Unis qui devrait se connecter à l'un de nos serveurs en Europe via un courtier de service.
Le serveur en Europe est un groupe de disponibilité dont l'auditeur s'appelle sqlst
.
lorsque j'exécute la commande suivante dans le serveur USA:
declare @sql varchar(1008)
set @sql = 'powershell.exe -command Test-NetConnection sqlst -port 4022'
EXEC xp_cmdshell @sql
Je reçois un message merveilleux disant que toute la connectivité va bien comme vous pouvez le voir sur l'image ci-dessous: le Ip addresses
ont été masqués pour protéger l'innocent.
Pourtant,
quand je vais à mon USA Server
Dans la bonne base de données, et j'exécute la requête suivante 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
Je reçois la raison suivante comme pourquoi elle a échoué:
DNS lookup failed with error: '11001(No such Host is known.)'.
Le compte de service dans le serveur Europe
a été ajouté à Kerberos
et tous les serveurs liés fonctionnent bien .
En regardant le sql error log
Je ne vois aucun message d'erreur correspondant.
Je ne suis pas sûr que cela est lié à - courtier de service et toujours
J'ai fait tout cela - serveur lié au serveur fonctionnant bien.
Je n'ai pas accès en dehors de sql server
à la machine américaine. À l'intérieur SQL Server, je suis sysadmin
.
Comme je l'ai dit ci-dessus quand je courais ce qui suit, je reçois une bonne réponse:
declare @sql varchar(1008)
set @sql = 'powershell.exe -command Test-NetConnection sqlst -port 4022'
EXEC xp_cmdshell @sql
Lorsque je remplace le nom du serveur par son adresse IP et exécutez-le:
declare @sql varchar(1008)
set @sql = 'powershell.exe -command Test-NetConnection 200.1.0.xxx -port 4022'
EXEC xp_cmdshell @sql
J'ai aussi un retour positif.
Cependant, lorsque j'exécute nslookup
à l'aide de l'adresse IP de sqlst
- 200.1.0.xxx i Obtenir l'erreur ci-dessous:
declare @sql varchar(1008)
set @sql = 'powershell.exe -command $ns = (nslookup.exe 200.1.0.xxx )[-4..-3]
$ns'
EXEC xp_cmdshell @sql
Fondamentalement, cela dit, domain controller
Impossible de trouver the sqlst ip address
Je n'ai aucun moyen de courir ipconfig/flushdns
Mais j'ai exécuté la commande suivante à la place:
declare @sql varchar(1008)
set @sql = 'powershell.exe -command Clear-DnsClientCache'
EXEC xp_cmdshell @sql
ce problème a été en fait causé par une manière particulière que les domaines de confiance en Europe ont été configurés (au-delà de la portée de cette question), cependant, à l'aide des scripts que vous pouvez voir sur la question initiale, puis de travailler avec les sysadmins, puis de trouver le serveur. Les noms qui pourraient être authentifiés aux deux extrémités (source et destination) résolus le cas - après modification des routeurs selon cet exemple :
--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