Строка соединения JDBC для кластера SQL Server - PullRequest
3 голосов
/ 21 июля 2009

Мне нужно установить строку подключения JDBC к SQL Server. Этот вопрос похож на вопрос о C # ADO.Net подключении . Это специфично для строк соединения JDBC.

Обычный формат для строки JDBC: «jdbc: sqlserver: // {host}: {port}». Теперь для кластера серверов SQL у меня есть имя кластера vvv \ iii ({виртуальный сервер} {имя экземпляра}).

Нет проблем с установкой соединения ODBC с помощью мастера «Новый источник данных для SQL Server» при использовании строки vvv \ iii в качестве имени сервера. Однако кажется, что строка соединения JDBC требует определенного хоста и порта.

Есть ли способ сделать строку подключения JDBC к кластеру SQL Server?

Ответы [ 5 ]

7 голосов
/ 22 июля 2009

оказывается, что вы можете использовать свойство instanceName в строке JDBC, как описано на странице Microsoft Technet в разделе «Именованные и несколько экземпляров SQL Server». В моем случае сработала следующая строка для виртуального сервера vvv и имя экземпляра базы данных iii:

"JDBC: SQLServer: // VVV; имя_экземпляр = III"

2 голосов
/ 28 сентября 2013

При использовании именованного экземпляра SQL Server в кластерной или автономной среде каждому экземпляру SQL Server динамически назначается номер порта при запуске. Сервер браузера SQL Server обрабатывает запросы к каждому экземпляру, поскольку каждый перезапуск сервера может изменить номер порта, используемого каждым экземпляром. Первому экземпляру, запускаемому при перезагрузке сервера, назначается 1433, но нет гарантии, если у вас есть 2 экземпляра, один из которых всегда получит 1433. Существует несколько проверяемых параметров, которые влияют на время запуска и восстановления, необходимое для запуска экземпляра. Это может меняться каждый раз.

Это печально ... при подключении к именованному экземпляру строка подключения jdbc должна выглядеть так: JDBC: SQLServer: // имя_сервера / db_name; экземпляр = instance_name

а не это JDBC: SQLServer: // имя_сервера: 1433 / db_name; экземпляр = instance_name

обратите внимание, что база данных по умолчанию "/ db_name" является необязательной. Если исключено, соединение будет использовать базу данных по умолчанию, назначенную для входа в SQL Server.

0 голосов
/ 07 февраля 2014

Убедитесь, что вы оставили определение порта отключенным, поскольку кластер определит это для вас.

Итак, мое определение источника данных выглядит так:

jdbc:sqlserver://sqlcluster_hostname\instancename;DATABASENAME=databasename;sendStringParametersAsUnicode=false;SelectMethod=direct

Я столкнулся с этой проблемой, пытаясь настроить источник данных Railo для подключения к кластеру MSSQL.

Немного не по теме ... Стандартная опция драйвера MSSQL для источника данных Railo устанавливает порт в «-1», если вы оставляете поле порта пустым, однако, если вы устанавливаете его в «0», он полностью удаляет определение порта, а затем все работает. Но лучше всего выбрать «Другой - Драйвер JDBC», чтобы полностью определить строку соединения JDBC, как указано выше.

0 голосов
/ 04 декабря 2013

Я бы прокомментировал замечание Марка Стюарта , но репутации не хватает. Мой источник не упоминает / db_name, и я тоже не могу заставить его работать. Может быть, другой случай запутанных имен экземпляров ?

0 голосов
/ 21 июля 2009

Ресурс кластера имеет имя хоста и порт прослушивания. Используйте j dbc:sqlserver://{virtualserver}:1433 (или соответствующий порт прослушивания, если не прослушивает порт по умолчанию).

...