2012-04-30 97 views
1

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

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

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

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

谢谢!

+0

请提供您用来连接服务器的代码。有机会,你需要聪明的连接到你的位置;至少两台服务器应解析为两个不同的ip:port组合。 –

回答

0

您需要在连接字符串中指定IP地址(和端口,如果不使用默认值)。您的连接字符串必须包含的链接参数,与(至少)以下选项:如果远程服务器使用的默认端口号,2638

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

,你并不需要指定的端口号连接字符串。 DoBroadcast=None告诉客户端库它应该直接连接到该主机。默认(对于版本11和更旧版本)是在网络上广播寻找该服务器名称,并且服务器首先响应的任何一个获胜。由于本地计算机上有服务器,因此很可能首先响应。

对于12版,你可以用新的主机参数更换整个LINKS参数:

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

这将有相同的行为上面的链接参数。

P.S.建议您为每个服务器分配一个唯一的服务器名称,从而避免需要对主机的IP地址进行硬编码。更不用说,你必须使用一些欺骗手段来欺骗第二台服务器:(a)认为它的名字是唯一的,或者(b)不检查它是否是唯一的,它是默认做的。如果您使用唯一的服务器名称,则不需要这些额外的东西。

声明:我在SQL Anywhere工程中为Sybase工作。

+0

好的,我将LINKS和ENG标志添加到连接字符串中。现在它连接到本地数据库,而不是“链接部分”中指定的服务器上的数据库。这是我现在使用的连接字符串。 dbConn = DatabaseConnectionFactory.createDatabaseConnection('ianywhere.ml.jdbcodbc.jdbc3.IDriver','jdbc:ianywhere:Driver = SQL Anywhere 11; Eng = Bass; uid = dba; pwd = *; LINKS = tcpip(HOST = 192.192 .11.11; PORT = 12345)' 为什么它仍然在看本地服务器? 另外,我没有控制服务的命名,我只是幸运的人必须连接到这些东西: )。 –

+0

SQL Anywhere 11驱动程序还允许您使用DBF字符串直接连接到数据库文件吗?我也尝试过,但我还没有完全访问该份额。我已要求完全访问该份额。 –

+0

啊哈 - 你正在使用V11。如果升级到V12,你会被罚款,但V11和老年人有不同的效果,相对于HOST选项。将更新我的答案。 –