Поддержка высокого уровня доступности и аварийного восстановления собственного клиента SQL Server

Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure azure Synapse Analytics Analytics Platform System (PDW)

Внимание

SQL Server Native Client (SNAC) не поставляется с:

  • SQL Server 2022 (16.x) и более поздних версий
  • SQL Server Management Studio 19 и более поздних версий

Собственный клиент SQL Server (SQLNCLI или SQLNCLI11) и устаревший поставщик Microsoft OLE DB для SQL Server (SQLOLEDB) не рекомендуется для разработки новых приложений.

Для новых проектов используйте один из следующих драйверов:

Сведения о SQLNCLI, которые поставляется в качестве компонента SQL Server ядро СУБД (версии 2012–2019), см. в этом исключении жизненного цикла поддержки.

В этом разделе рассматривается поддержка собственного клиента SQL Server (добавленная в SQL Server 2012 (11.x)) для групп доступности AlwaysOn. Дополнительные сведения о Группы доступности Always On см. в разделах Прослушиватели групп доступности, возможность подключения клиентов и отработка отказа приложений (SQL Server), Создание и настройка групп доступности (SQL Server), Отказоустойчивая кластеризация и группы доступности Always On (SQL Server) и Активные вторичные реплики. Доступ только для чтения ко вторичным репликам (группы доступности Always On).

Прослушиватель для заданной группы доступности можно задать в строке подключения. Если приложение SQL Server Native Client подключено к базе данных в группе доступности, которая завершается отработкой отказа, исходное подключение нарушено, и приложение должно открыть новое подключение, чтобы продолжить работу после отработки отказа.

Если вы не подключаетесь к прослушивателю группы доступности и если несколько IP-адресов связаны с именем узла, sql Server Native Client будет последовательно выполнять итерацию по всем IP-адресам, связанным с записью DNS. Это может занять много времени, если первый IP-адрес, возвращенный DNS-сервером, не привязан ни к одной из сетевых интерфейсных плат. При подключении к прослушивателю группы доступности sql Server Native Client пытается установить подключения ко всем IP-адресам параллельно и при успешной попытке подключения драйвер отменит все ожидающие попытки подключения.

Примечание.

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

Соединение с помощью MultiSubnetFailover

При установлении соединения с прослушивателем группы доступности SQL Server 2012 или экземпляром отказоустойчивого кластера SQL Server 2012 всегда необходимо указывать MultiSubnetFailover=Yes. MultiSubnetFailover обеспечивает более быструю отработку отказа для всех групп доступности и экземпляра отказоустойчивого кластера в SQL Server 2012 и значительно сокращает время отработки отказа для топологий AlwaysOn с одной и несколькими подсетями. При отработке отказа с в нескольких подсетях клиент будет выполнять попытки соединения параллельно. Во время отработки отказа подсети собственный клиент SQL Server будет агрессивно повторять TCP-подключение.

Свойство подключения MultiSubnetFailover указывает, что приложение развертывается в группе доступности или экземпляре отказоустойчивого кластера, и что собственный клиент SQL Server попытается подключиться к базе данных на основном экземпляре SQL Server, пытаясь подключиться ко всем IP-адресам. Когда для соединения установлено свойство MultiSubnetFailover=Yes, то клиент производит повторные попытки установить TCP-соединение быстрее интервалов повторной отправки TCP-пакетов по умолчанию для операционной системы. Это позволяет ускорить восстановление соединения после отработки отказа в группе доступности Always On или в экземпляре отказоустойчивого кластера Always On; метод может применяться к группам доступности и экземплярам отказоустойчивых кластеров как с одной, так и с несколькими подсетями.

Дополнительные сведения о ключевых словах строки подключения см. в статье Использование ключевых слов строки подключения с SQL Server Native Client.

Указание параметра MultiSubnetFailover=Yes при соединении с объектом, отличным от прослушивателя группы доступности или экземпляра отказоустойчивого кластера, может привести к снижению производительности и не поддерживается.

Следуйте приведенным ниже рекомендациям для подключения к серверу в группе доступности или экземпляру отказоустойчивого кластера.

  • Пользуйтесь свойством соединения MultiSubnetFailover при установлении соединения с одной или несколькими подсетями, это благоприятно скажется на производительности в любом случае.

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

  • При установлении соединения с экземпляром SQL Server, настроенным на работу более чем с 64 IP-адресами, будет возникать ошибка соединения.

  • Поведение приложения, использующего свойство подключения MultiSubnetFailover , не влияет на тип проверки подлинности: проверку подлинности SQL Server, проверку подлинности Kerberos или проверку подлинности Windows.

  • Значение loginTimeout можно увеличить с учетом времени отработки отказа, это уменьшит количество попыток повторного соединения в приложении.

  • Распределенные транзакции не поддерживаются.

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

  1. Если местоположение вторичных реплик не настроено для приема подключений.

  2. Если приложение использует ApplicationIntent=ReadWrite (описано ниже) и расположение вторичных реплик настроено для доступа только для чтения.

При соединении произойдет ошибка, если первичная реплика настроена для отклонения рабочих нагрузок только для чтения, а строка подключения содержит ApplicationIntent=ReadOnly.

Переход с зеркального отображения базы данных на использование кластеров с несколькими подсетями

Если в строке подключения содержатся ключевые слова MultiSubnetFailover и Failover_Partner, то при соединении произойдет ошибка. Ошибка возникает также в том случае, если используется MultiSubnetFailover и SQL Server возвращает ответ партнера по обеспечению отработки отказа, указывающий на то, что он является частью пары зеркальных баз данных.

При обновлении собственного клиентского приложения SQL Server, которое в настоящее время использует зеркальное отображение базы данных в сценарии с несколькими подсетями, необходимо удалить свойство подключения Failover_Partner и заменить его параметром MultiSubnetFailover значение Yes и заменить имя сервера в строка подключения прослушивателем группы доступности. Если в строке подключения используются Failover_Partner и MultiSubnetFailover=Yes, то драйвер выдаст ошибку. Но если в строке подключения используются параметры Failover_Partner и MultiSubnetFailover=No (или ApplicationIntent=ReadWrite), то приложение будет использовать зеркальное отображение базы данных.

Если в базе данных-источнике группы доступности используется зеркальное отображение баз данных, то драйвер вернет ошибку. Это также произойдет в том случае, если используется параметр MultiSubnetFailover=Yes в строке подключения, устанавливающей соединение с базой данных-источником, а не с прослушивателем группы доступности.

Указание намерения приложения

В строке подключения можно указать ключевое слово ApplicationIntent. Присваиваемые значения: ReadWrite (по умолчанию) или ReadOnly.

Если задано значение ApplicationIntent=ReadOnly, при подключении клиент запрашивает рабочую нагрузку чтения. Сервер принудительно реализует намерение в момент соединения и во время выполнения инструкции USE для базы данных.

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

Целевые объекты ReadOnly

Если при подключении выбрано значение ReadOnly, подключение назначается любой из следующих специальных конфигураций, которые могут применяться для базы данных:

Если все эти специальные целевые объекты недоступны, выполняется чтение из обычной базы данных.

Ключевое слово ApplicationIntent активирует маршрутизацию только для чтения.

Маршрутизация только для чтения

Маршрутизация только для чтения — это функция, которая способна обеспечить доступность реплики базы данных только для чтения. Чтобы включить маршрутизацию только для чтения, необходимо выполнить следующие условия:

  • Необходимо установить подключение к прослушивателю группы доступности Always On.

  • Ключевое слово ApplicationIntent строки подключения должно быть установлено в значение ReadOnly.

  • Администратор базы данных должен настроить группу доступности на включение маршрутизации только для чтения.

Возможно, не все соединения, для каждого из которых используется маршрутизация только для чтения, будут подключаться к одной и той же реплике только для чтения. Изменения в синхронизации баз данных или в конфигурации маршрутизации сервера могут привести к тому, что клиент будет подключаться к различным репликам только для чтения.

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

Маршрутизация только для чтения может занять больше времени, чем подключение к первичной реплике. Это происходит потому, что при маршрутизации с правом доступа только для чтения выполняется подключение к первичной реплике, а затем выполняется поиск наиболее подходящей вторичной реплики, доступной для чтения. При выполнении этих нескольких действий время ожидания для операции login нужно увеличить как минимум на 30 секунд.

ODBC

Добавлены два ключевых слова ODBC строка подключения для поддержки групп доступности AlwaysOn в собственном клиенте SQL Server:

  • ApplicationIntent

  • MultiSubnetFailover

Дополнительные сведения о ключевых словах ODBC строка подключения в собственном клиенте SQL Server см. в разделе "Использование ключевых слов строки подключения" с собственным клиентом SQL Server.

Эквивалентными свойствами соединения являются следующие:

  • SQL_COPT_SS_APPLICATION_INTENT

  • SQL_COPT_SS_MULTISUBNET_FAILOVER

Дополнительные сведения о свойствах подключения ODBC в собственном клиенте SQL Server см. в разделе SQLSetConnectAttr.

Функции ключевых слов ApplicationIntent и MultiSubnetFailover будут представлены в администраторе источника данных ODBC для доменных имен, использующих драйвер собственного клиента SQL Server, начиная с SQL Server 2012 (11.x).

Приложение ODBC собственного клиента SQL Server может использовать одну из трех функций для подключения:

Function Description
SQLBrowseConnect Список серверов, возвращаемый SQLBrowseConnect, не содержит имен виртуальных сетей. Вы увидите только список серверов без каких-либо указаний, является ли сервер автономным сервером, или первичным или вторичным сервером в кластере отказоустойчивой кластеризации Windows Server (WSFC), который содержит два или более экземпляров SQL Server, которые были включены для групп доступности AlwaysOn. При возникновении ошибки подключения к серверу причина может заключаться в несоответствии параметра ApplicationIntent конфигурации сервера.

Так как SQLBrowseConnect не распознает серверы в кластере отказоустойчивой кластеризации Windows Server (WSFC), который содержит два или более экземпляров SQL Server, которые были включены для групп доступности AlwaysOn, SQLBrowseConnect игнорирует ключевое слово MultiSubnetFailover строка подключения.
SQLConnect SQLConnect поддерживает как ApplicationIntent , так и MultiSubnetFailover через имя источника данных (DSN) или свойства соединения.
SQLDriverConnect SQLDriverConnect поддерживает ApplicationIntent и MultiSubnetFailover через ключевые слова строки подключения, свойства соединения или имя DSN.

OLE DB

OLE DB в собственном клиенте SQL Server не поддерживает ключевое слово MultiSubnetFailover .

OLE DB в собственном клиенте SQL Server будет поддерживать намерение приложения. Для назначений приложений OLE DB будет поддерживаться тот же режим, что и для приложений ODBC (см. выше).

Одно ключевое слово OLE DB строка подключения добавлено для поддержки групп доступности AlwaysOn в собственном клиенте SQL Server:

  • Application Intent

Дополнительные сведения о ключевых словах строка подключения в собственном клиенте SQL Server см. в разделе "Использование ключевых слов строки подключения" с собственным клиентом SQL Server.

Эквивалентными свойствами соединения являются следующие:

  • SSPROP_INIT_APPLICATIONINTENT

  • DBPROP_INIT_PROVIDERSTRING

Приложение OLE DB собственного клиента SQL Server может использовать один из методов, чтобы указать намерение приложения:

IDBInitialize::Initialize
IDBInitialize::Initialize использует ранее настроенный набор свойств для инициализации источника данных и создания объекта источника данных. Укажите назначение приложения в качестве свойства поставщика или в виде расширенной строки свойств.

IDataInitialize::GetDataSource
IDataInitialize::GetDataSource принимает строку подключения, которая может содержать ключевое слово Application Intent.

IDBProperties::GetProperties
IDBProperties::GetProperties получает значение свойства, которое в настоящее время задано для источника данных. Значение Application Intent можно получить с помощью свойств DBPROP_INIT_PROVIDERSTRING и SSPROP_INIT_APPLICATIONINTENT.

IDBProperties::SetProperties
Чтобы задать значение свойства ApplicationIntent, вызовите IDBProperties::SetProperties, передав свойство SSPROP_INIT_APPLICATIONINTENT со значением "ReadWrite" или "ReadOnly" или свойство DBPROP_INIT_PROVIDERSTRING со значением, содержащим "ApplicationIntent=ReadOnly" или "ApplicationIntent=ReadWrite".

Назначение приложения можно указать в поле "Свойства назначения приложения" на вкладке "Все" в диалоговом окне Свойства канала передачи данных.

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

См. также

Компоненты собственного клиента SQL Server
Использование ключевых слов строки подключения с собственным клиентом SQL Server