1

我正在关注 MSDN 中的Completing a Conversation Between Instances教程。第2 课:创建启动器数据库(最后)展示了如何在启动器站点创建路由(缩短):

...
USE InstInitiatorDB;
CREATE ROUTE InstTargetRoute
WITH SERVICE_NAME =
       N'//TgtDB/2InstSample/TargetService',
     ADDRESS = N'TCP://MyTargetComputer:4022';

...

USE msdb;
CREATE ROUTE InstInitiatorRoute
WITH SERVICE_NAME =
       N'//InstDB/2InstSample/InitiatorService',
     ADDRESS = N'LOCAL'

第 3 课:完成目标对话对象在目标实例上执行相同的操作:

USE InstTargetDB;
CREATE ROUTE InstInitiatorRoute
WITH SERVICE_NAME =
       N'//InstDB/2InstSample/InitiatorService',
     ADDRESS = N'TCP://MyInitiatorComputer:4022';

...

USE msdb
CREATE ROUTE InstTargetRoute
WITH SERVICE_NAME =
        N'//TgtDB/2InstSample/TargetService',
     ADDRESS = N'LOCAL';

但是,本教程假定 SQL Server 实例在单独的硬件上运行。如果两个 SQL Server 实例在同一台机器上运行,我应该如何更改路由或其他方式?

4

1 回答 1

3

两个实例不能共享监听端口。在第 1 课中,你有这个:

...
CREATE ENDPOINT InstTargetEndpoint
STATE = STARTED
AS TCP ( LISTENER_PORT = 4022 )
...

在第 2 课中,你有这个:

...
CREATE ENDPOINT InstInitiatorEndpoint
STATE = STARTED
AS TCP ( LISTENER_PORT = 4022 )
...

这将不起作用,因为两个实例都配置为侦听同一 TCP 端口。一个必须是不同的。让目标在 4023 上监听:

...
CREATE ENDPOINT InstTargetEndpoint
STATE = STARTED
AS TCP ( LISTENER_PORT = 4023 )
...

那么从发起者到目标的路由现在必须指定端口 4023:

...
CREATE ROUTE InstTargetRoute
WITH SERVICE_NAME =
       N''//TgtDB/2InstSample/TargetService'',
     ADDRESS = N''TCP://MyTargetComputer:4023'';';
...

其他一切都保持不变。

于 2012-07-18T20:40:39.207 回答