Подключение к нескольким серверам SQL Anywhere 11 с JDBC или ODBC
Вот моя ситуация. У меня есть приложение (Mirth Connect), работающее на том же сервере, что и SQL Anywhere 11. В той же сети есть еще один сервер, на котором выполняется SQL Anywhere 11. Мне нужно подключиться к ним обоим. Они оба используют одно и то же SQL Anywhere "Имя сервера".
Мне нужно использовать соединение JDBC для подключения к любому из них в любой момент. Я могу подключиться к локальному экземпляру просто отлично.
Я попытался установить соединение ODBC с удаленным сервером. Когда я проверяю соединение, он говорит, что все хорошо. Затем, когда я пытаюсь выполнить запрос, я замечаю, что я подключен к локальному серверу. Это должно быть потому, что оба сервера SQL Anywhere используют одно и то же "Имя сервера".
Как заставить соединение ODBC подключиться к удаленному серверу?
Спасибо!
1 ответ
Вам необходимо указать 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-адреса хоста. Не говоря уже о том, что вы должны использовать какую-то хитрость, чтобы обмануть второй сервер, либо (а) думая, что его имя уникально, либо (б) не проверяя, является ли он уникальным, что он делает по умолчанию. Если вы используете уникальные имена серверов, вам не нужны эти дополнительные материалы.
Отказ от ответственности: я работаю на Sybase в разработке SQL Anywhere.