1

这是我的情况。我有一个应用程序 (Mirth Connect) 在与 SQL Anywhere 11 相同的服务器上运行。同一网络上还有另一台服务器在运行 SQL Anywhere 11。我需要连接到它们。它们都使用相同的 SQL Anywhere“服务器名称”。

我需要在任何给定时刻使用 JDBC 连接来连接它们中的任何一个。我可以很好地连接到本地实例。

我尝试建立到远程服务器的 ODBC 连接。当我测试连接时,它说一切都很好。然后,当我尝试运行查询时,我注意到我已连接到本地服务器。这一定是因为两个 SQL Anywhere 服务器都使用相同的“服务器名称”。

如何强制 ODBC 连接连接到远程服务器?

谢谢!

4

1 回答 1

0

您需要在连接字符串中指定 IP 地址(和端口,如果不使用默认值)。您的连接字符串必须包含 LINKS 参数,并带有(至少)以下选项:

LINKS=tcpip(HOST=<remote IP address>;PORT=<remote port>;DoBroadcast=None)

如果远程服务器使用默认端口号 2638,则无需在连接字符串中指定端口号。DoBroadcast=None告诉客户端库它应该直接连接到该主机。默认(对于版本 11 和更早版本)是在网络上广播以查找该服务器名称,并且首先响应的服务器获胜。由于本地机器上有服务器,所以很有可能先响应。

对于版本 12 及更高版本,您可以将整个 LINKS 参数替换为新的 HOST 参数:

HOST=<remote IP address>:<remote port>

这将与上面的 LINKS 参数具有相同的行为。

PS 建议您给每个服务器一个唯一的服务器名称,从而避免硬编码主机的 IP 地址。更不用说您必须使用一些技巧来欺骗第二台服务器(a)认为它的名称是唯一的,或者(b)不检查它是否是唯一的,默认情况下它会这样做。如果您使用唯一的服务器名称,则不需要这些额外的东西。

免责声明:我在 Sybase 的 SQL Anywhere 工程部门工作。

于 2012-05-02T02:22:01.357 回答