发布于 2020-04-02 16:55:01
在检查和重置所有代理相关的数据库ID之后,我修复了它。
我做的第一件事是看看我们拥有什么(在源服务器和目标服务器上):
--=====================================================================
-- checking what we have and where we point to
--=====================================================================
SELECT @@SERVERNAME
-- my_target_server
USE [master]
GO
SELECT [name]
,[is_broker_enabled]
,[service_broker_guid]
FROM [sys].[databases]
WHERE 1=1
AND is_broker_enabled = 1
ORDER BY NAME
GO
SELECT name,is_broker_enabled,service_broker_guid, is_trustworthy_on FROM sys.databases
order by 2 desc, 3 desc, 1我看到经纪人身份需要更改:
--CD718202-CB34-4DCD-BADC-7800C5F2FF3D
ALTER DATABASE ORCASTG SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE
ALTER DATABASE ORCASTG SET NEW_BROKER with rollback immediate
ALTER DATABASE ORCASTG SET trustworthy on with rollback immediate在目标服务器上:

在源服务器上:

因此,我在路由器内部更改了service。
--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 my target server
GO即使在将数据库的正确boker_ids放在上面的路由器中之后,我仍然没有通过任何通信。
我必须检查路由器,我注意到我使用ip地址代替服务器名,这很好,但是我们在域上做了一些更改,这不再有效,所以使用下面的测试,我首先确定它不再工作(连接),然后使用服务器名称相应地更改它。
declare @sql varchar(1008)
set @sql = 'powershell.exe -command Test-NetConnection 200.1.0.198.:4022'
EXEC xp_cmdshell @sql
在这些变化之后,一切都开始正常工作了。

https://dba.stackexchange.com/questions/264181
复制相似问题