Устойчивость соединений в режиме ожидания в драйвере OLE DB
Область применения: SQL Server 2014 (12.x) и более поздних версий База данных SQL Azure
Обзор
Начиная с Microsoft OLE DB Driver for SQL Server версии 18.6.0 устойчивость соединения позволяет драйверу автоматически восстанавливать разорванные соединения в режиме ожидания.
На следующей схеме объясняется, как работает отказоустойчивость подключения в драйвере OLE DB:
- В T1 соединение устанавливается с помощью IDBInitialize::Initialize.
- Между драйвером и сервером между T2 и T3 есть период отсутствия связи, что приводит к соединению в режиме ожидания. В течение этого времени сетевое подключение может быть прервано. Например, сетевое устройство закрывает бездействующий сокет или переходит в режим ожидания на короткий период.
- В T3 клиентское приложение пытается выполнить команду с помощью драйвера OLE DB (например, используя ICommand::Execute. Драйвер обнаруживает, что соединение разорвано и прозрачно повторно устанавливает соединение.
Ключевые слова и свойства
Ключевое слово | Свойство | Values | По умолчанию. | Description |
---|---|---|---|---|
ConnectRetryCount | SSPROP_INIT_CONNECT_RETRY_COUNT | Целочисленное значение от 0 до 255 (включительно) | 1 | Определяет максимальное число попыток повторного подключения, если соединение разорвано. По умолчанию выполняется одна попытка восстановить разорванное подключение. Значение 0 означает, что повторное подключение не будет устанавливаться. |
ConnectRetryInterval | SSPROP_INIT_CONNECT_RETRY_INTERVAL | Целое число от 1 до 60 (включительно). | 10 | Время в секундах между попытками повторного подключения. Это ключевое слово игнорируется, если ConnectRetryCount равен 0. |
Дополнительные сведения об определении этих свойств см. на следующих страницах:
- Использование ключевых слов строки подключения с драйвером OLE DB для SQL Server
- Свойства инициализации и авторизации
Если приложение устанавливает соединение с DBPROP_INIT_PROMPT, а затем пытается выполнить инструкцию через разорванное соединение, драйвер OLE DB не отображает это диалоговое окно повторно.
При получении состояния соединения через свойство DBPROP_CONNECTIONSTATUS:
- Во время восстановления свойство возвратит DBPROPVAL_CS_INITIALIZED.
- Если восстановление завершилось сбоем, свойство возвратит DBPROPVAL_CS_COMMUNICATIONFAILURE.
Примечание.
Если время ожидания команды (DBPROP_COMMANDTIMEOUT в DBPROPSET_ROWSET) имеет ненулевое значение, а восстановление соединения занимает больше времени, чем время ожидания команды, соединение не будет восстановлено.
Восстановление соединения с асинхронным выполнением
Если используется асинхронное выполнение и необходимо восстановить соединение, восстановление соединения происходит синхронно до выполнения асинхронного вызова. Дополнительные сведения об асинхронном выполнении см. в разделе Выполнение асинхронных операций.
Ожидаемые ошибки
Если восстановление соединения завершается сбоем, может возникнуть одна из следующих ошибок:
- Подключение разорвано, и восстановление невозможно. Драйвер клиента один или несколько раз попытался восстановить соединение, и все попытки завершились со сбоем. Увеличьте значение ConnectRetryCount, чтобы увеличить количество попыток восстановления.
- Сервер не подтвердил попытку восстановления, восстановление соединения невозможно.
- Сервер не сохранил точную версию TDS клиента, запрошенную во время попытки восстановления, восстановление соединения невозможно.
- Сервер не сохранил точный основной номер версии сервера, запрошенный во время попытки восстановления, восстановление соединения невозможно.
- Подключение разорвано, и восстановление невозможно. Соединение помечено сервером как невосстанавливаемое. Попытки восстановить соединение не предпринимались.
- Подключение разорвано, и восстановление невозможно. Соединение помечено клиентом как невосстанавливаемое. Попытки восстановить соединение не предпринимались.
- Сервер не сохранял шифрования SSL при попытке восстановления. Восстановление соединения невозможно.