Устойчивость соединений в режиме ожидания в драйвере OLE DB

Применимо к: SQL Server 2014 (12.x) и более поздних версий Azure SQL Database

Скачать драйвер OLE DB

Обзор

Начиная с Microsoft OLE DB Driver for SQL Server версии 18.6.0 устойчивость соединения позволяет драйверу автоматически восстанавливать разорванные соединения в режиме ожидания.

На следующей схеме показано, как работает устойчивость соединения в режиме ожидания в драйвере OLE DB: схема сведений об устойчивости соединения

  1. В T1 соединение устанавливается с помощью IDBInitialize::Initialize.
  2. Между драйвером и сервером между T2 и T3 есть период отсутствия связи, что приводит к соединению в режиме ожидания. В течение этого времени сетевое подключение может быть прервано. Например, сетевое устройство закрывает бездействующий сокет или переходит в режим ожидания на короткий период.
  3. В T3 клиентское приложение пытается выполнить команду с помощью драйвера OLE DB (например, используя ICommand::Execute. Драйвер обнаруживает, что соединение разорвано и прозрачно повторно устанавливает соединение.

Ключевые слова и свойства

Ключевое слово Свойство Значения По умолчанию Описание
ConnectRetryCount SSPROP_INIT_CONNECT_RETRY_COUNT Целочисленное значение от 0 до 255 (включительно) 1 Определяет максимальное число попыток повторного подключения, если соединение разорвано. По умолчанию выполняется одна попытка восстановить разорванное подключение. Значение 0 означает, что повторное подключение не будет устанавливаться.
ConnectRetryInterval SSPROP_INIT_CONNECT_RETRY_INTERVAL Целое число от 1 до 60 (включительно). 10 Время в секундах между попытками повторного подключения. Это ключевое слово игнорируется, если ConnectRetryCount равен 0.

Дополнительные сведения об определении этих свойств см. на следующих страницах:

Если приложение устанавливает соединение с DBPROP_INIT_PROMPT, а затем пытается выполнить инструкцию через разорванное соединение, драйвер OLE DB не отображает это диалоговое окно повторно.

При получении состояния соединения через свойство DBPROP_CONNECTIONSTATUS:

  • Во время восстановления свойство возвратит DBPROPVAL_CS_INITIALIZED.
  • Если восстановление завершилось сбоем, свойство возвратит DBPROPVAL_CS_COMMUNICATIONFAILURE.

Примечание

Если время ожидания команды (DBPROP_COMMANDTIMEOUT в DBPROPSET_ROWSET) имеет ненулевое значение, а восстановление соединения занимает больше времени, чем время ожидания команды, соединение не будет восстановлено.

Восстановление соединения с асинхронным выполнением

Если используется асинхронное выполнение и необходимо восстановить соединение, восстановление соединения происходит синхронно до выполнения асинхронного вызова. Дополнительные сведения об асинхронном выполнении см. в разделе Выполнение асинхронных операций.

Ожидаемые ошибки

Если восстановление соединения завершается сбоем, может возникнуть одна из следующих ошибок:

  • Подключение разорвано, и восстановление невозможно. Драйвер клиента один или несколько раз попытался восстановить соединение, и все попытки завершились со сбоем. Увеличьте значение ConnectRetryCount, чтобы увеличить количество попыток восстановления.
  • Сервер не подтвердил попытку восстановления, восстановление соединения невозможно.
  • Сервер не сохранил точную версию TDS клиента, запрошенную во время попытки восстановления, восстановление соединения невозможно.
  • Сервер не сохранил точный основной номер версии сервера, запрошенный во время попытки восстановления, восстановление соединения невозможно.
  • Подключение разорвано, и восстановление невозможно. Соединение помечено сервером как невосстанавливаемое. Попытки восстановить соединение не предпринимались.
  • Подключение разорвано, и восстановление невозможно. Соединение помечено клиентом как невосстанавливаемое. Попытки восстановить соединение не предпринимались.
  • Сервер не сохранял шифрования SSL при попытке восстановления. Восстановление соединения невозможно.