Подключение к базе данных SQL Azure

Скачать драйвер JDBC

В этой статье обсуждаются проблемы, связанные с использованием драйвера Microsoft JDBC Driver для SQL Server для подключения к Базе данных SQL Azure. Дополнительные сведения о подключении к База данных SQL Azure см. в следующем разделе:

Сведения

Чтобы подключиться к База данных SQL Azure, необходимо подключиться к базе данных master для вызова SQLServerDatabaseMetaData.getCatalogs.
База данных SQL Azure не поддерживает возврат всего набора каталогов из пользовательской базы данных. SQLServerDatabaseMetaData.catalog использует представление sys.databases для получения каталогов. Ознакомьтесь с обсуждением разрешений в sys.database (Transact-SQL), чтобы понять поведение SQLServerDatabaseMetaData.getCatalogs в База данных SQL Azure.

Время ожидания входа

При подключении к базам данных SQL Azure рекомендуемое стандартное значение для loginTimeout составляет 30 секунд. Если вы подключаетесь к бессерверному экземпляру, рекомендуется использовать более большое значение для loginTimeout — 60 секунд или более. Если бессерверный экземпляр бездействовал, ему может потребоваться некоторое время для включения при первом подключении. Дополнительные сведения о настройке loginTimeout см. в статье Настройка свойств подключения.

Прерванные подключения

При подключении к База данных SQL Azure неактивные подключения могут быть прерваны сетевым компонентом (например, брандмауэром) после периода бездействия. В данном контексте существует два типа бездействующих соединений.

  • Бездействующие на уровне TCP, которые сбрасываются многими сетевыми устройствами.

  • Бездействующие на уровне шлюза SQL Azure, где, вероятно, отправляются TCP-сообщения keepalive (что делает соединение небездействующим на уровне TCP), не выполняющие активных запросов в течение 30 минут. В этом случае шлюз определит, что соединение TDS бездействует в течение 30 минут, и прервет его.

Во втором случае, чтобы предотвратить прекращение шлюзом бездействующих подключений, можно сделать следующее:

  • Для настройки источника данных Azure SQL используйте политику подключенияRedirect.

  • Обеспечьте активность подключения за счет выполнения простых действий. Этот метод не рекомендуется использовать только в том случае, если нет других возможных вариантов.

В первом случае, чтобы избежать разрыва связи простаивающих подключений сетевыми компонентами, задайте следующие параметры в реестре (или их аналоги для систем, отличных от Windows) той операционной системы, где загружается драйвер:

Параметр реестра Рекомендуемое значение
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Parameters \ KeepAliveTime 30 000
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Parameters \ KeepAliveInterval 1000
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Parameters \ TcpMaxDataRetransmissions 10

Перезагрузите компьютер, чтобы новые параметры вступили в силу.

Значения KeepAliveTime и KeepAliveInterval задаются в миллисекундах. Применение этих параметров позволяет установить период в 10–40 секунд, по истечении которого бездействующее подключение разрывается. Если после отправки пакета проверки активности ответ не получен, отправка будет повторятся каждую секунду до 10 раз. Если в течение этого времени ответ не получен, сокет на стороне клиента отключается. Вам может потребоваться увеличить значение KeepAliveInterval в соответствии с прерываниями, характерными для вашей среды (например, миграциями виртуальных машин), которые могут привести к тому, что сервер не будет отвечать на запросы дольше 10 секунд.

Примечание.

Параметр TcpMaxDataRetransmissions нельзя задать в Windows Vista, Windows 2008 и более поздних версиях.

Чтобы настроить его на виртуальной машине Azure, создайте задачу запуска для добавления разделов реестра. Например, в файл определения службы добавьте следующую задачу, выполняемую при запуске.

<Startup>  
    <Task commandLine="AddKeepAlive.cmd" executionContext="elevated" taskType="simple">  
    </Task>  
</Startup>  

Затем добавьте в проект файл AddKeepAlive.cmd. Выберите для параметра "Копировать в выходной каталог" значение "Всегда копировать". Следующий скрипт представляет собой пример файла AddKeepAlive.cmd.

if exist keepalive.txt goto done  
time /t > keepalive.txt  
REM Workaround for JDBC keep alive on Azure SQL  
REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v KeepAliveTime /t REG_DWORD /d 30000 >> keepalive.txt  
REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v KeepAliveInterval /t REG_DWORD /d 1000 >> keepalive.txt  
REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v TcpMaxDataRetransmissions /t REG_DWORD /d 10 >> keepalive.txt  
shutdown /r /t 1  
:done  

Добавление имени сервера к идентификатору пользователя UserId в строке подключения

До версии 4.0 драйвера Microsoft JDBC для SQL Server для подключения к База данных SQL Azure необходимо добавить имя сервера в идентификатор пользователя в строка подключения. Например, user@servername. Начиная с версии 4.0 драйвера Microsoft JDBC для SQL Server, больше не нужно добавлять @servername идентификатор пользователя в строка подключения.

Для использования шифрования необходимо задать hostNameInCertificate

До версии Microsoft JDBC Driver для SQL Server 7.2 для подключения к База данных SQL Azure нужно указывать hostNameInCertificate, если указано значение encrypt=true (если в строке подключения указано имя сервера shortName.domainName, установите для свойства hostNameInCertificate значение *.domainName.). Это свойство является необязательным, начиная с версии драйвера 7.2.

Например:

jdbc:sqlserver://abcd.int.mscds.com;databaseName=myDatabase;user=myName;password=myPassword;encrypt=true;hostNameInCertificate=*.int.mscds.com;

См. также

Подключение к SQL Server с помощью JDBC Driver