Установка первоначального подключения к сеансу зеркального отображения базы данных
Добавления: 14 апреля 2006 г.
Чтобы выполнить первоначальное подключение к отображаемой базе данных, клиент должен предоставить строку соединения, которая обязательно содержит имя экземпляра сервера. Это необходимое имя сервера должно идентифицировать текущий экземпляр основного сервера, и называется имя изначального участника.
При необходимости строка соединения может также содержать имя другого экземпляра сервера, которое идентифицирует текущий экземпляр зеркального сервера, используемого в том случае, когда изначальный участник недоступен во время первой попытки соединения. Второе имя называется именем участника, являющегося резервным сервером.
В строке соединения должно также содержаться имя базы данных. Это необходимо, чтобы предоставить возможность поставщику доступа к данным пытаться совершать переход на другой ресурс.
После получения строки соединения поставщик доступа к данным сохраняет имя изначального участника и имя участника, являющегося резервным сервером (если оно приведено) в кэше в энергозависимой памяти (для управляемого кода кэш содержится в домене приложения). После кэширования имя изначального участника поставщиком доступа к данным не обновляется. Если клиент предоставляет имя участника, являющегося резервным сервером, то в случае, если поставщик доступа к данным не может подключиться с использованием имени изначального участника, поставщик также сохраняет имя участника, являющегося резервным сервером.
Сеанс зеркального отображения базы данных не обеспечивает защиты от проблем, связанных с доступом клиента к серверам, например, если компьютер клиента испытывает проблемы во взаимодействии с сетью. Попытка соединения с отображаемой базой может завершиться неудачно по множеству причин, не относящихся к поставщику доступа к данным, например попытка соединения может оказаться неудачной, если экземпляр основного сервера неактивен; это происходит, когда выполняется переход на другую базу данных, или по причине ошибки в сети.
При попытке подключения поставщик доступа к данным пытается подключиться сначала с помощью имени изначального участника. Если указанный экземпляр сервера доступен и является текущим экземпляром основного сервера, то попытка соединения обычно завершается успешно.
Примечание. |
---|
Если сеанс зеркального отображения приостановлен, то клиент обычно подключается к основному серверу и загружает имя участника. Однако база данных не будет доступна клиенту до тех пор, пока не возобновится процесс зеркального отображения. |
Если попытка завершилась неудачей, поставщик доступа к данным пытается подключиться с помощью имени участника, являющегося резервным сервером, если оно доступно. Если имя другого участника правильно идентифицирует текущий основной сервер, то поставщику доступа к данным обычно удается открыть первоначальное подключение. После завершения данного подключения поставщик доступа к данным загружает имя экземпляра текущего зеркального сервера. Это имя сохраняется в кэше как имя участника, являющегося резервным сервером; при этом предоставленное клиентом имя участника, являющегося резервным сервером, если оно существует, перезаписывается. После этого поставщик данных .NET Framework Data Provider для SQL Server не обновляет имя участника, являющегося резервным сервером. Однако собственный клиент Microsoft SQL обновляет кэш каждый раз, когда последующее соединение или переустановка соединения возвращает другое имя участника.
На приведенной ниже схеме показано подключение клиента к изначальному участнику Участник А для отображаемой базы данных Db_1. Схема иллюстрирует случай, когда имя изначального участника, предоставленное клиентом, верно идентифицирует текущий основной сервер Участник А. Первоначально подключение завершается успешно, и поставщик доступа к данным сохраняет имя текущего зеркального сервера (Участник Б) в локальном кэше в качестве имени участника, являющегося резервным сервером. Наконец, клиент подключается к основной копии базы данных Db_1.
Попытка первоначального подключения может завершиться неудачно, например в результате ошибки сети или из-за того, что экземпляр сервера неактивен. Так как изначальный участник недоступен, клиент должен предоставить имя участника, являющегося резервным сервером, в строке соединения, чтобы поставщик доступа к данным попытался подключиться к участнику, являющемуся резервным сервером.
В этом случае, если имя участника, являющегося резервным сервером, недоступно, попытки первоначального подключения продолжаются до тех пор, пока не истечет время ожидания подключения к сети или не будет возвращена ошибка (аналогично подключению к неотображаемой базе данных).
Если в строке соединения приведено имя участника, являющегося резервным сервером, то поведение поставщика доступа к данным зависит от сетевого протокола и операционной системы клиента следующим образом:
- Для протокола TCP/IP — в случае, если на клиенте выполняется операционная система Microsoft Windows XP или более поздняя версия — попытки подключения регулируются алгоритмом повторения подключений, специфичным для зеркального отображения базы данных. Алгоритм повторения подключений задает максимальное время (время повторений), отведенное для открытия соединения в рамках данной попытки соединения. Дополнительные сведения см. в разделе Алгоритм повторного соединения (для соединений по протоколу TCP/IP).
- Для других сетевых протоколов и для клиентов, на которых исполняется операционная система, отличная от Microsoft Windows XP или более поздней версии
В случае ошибки или в случае, когда изначальный участник недоступен, попытки первоначального подключения продолжаются до тех пор, пока не истечет время ожидания подключения к сети, или не истечет время ожидания входа на поставщике доступа к данным. Обычно это время ожидания составляет примерно 20—30 секунд. После этого, если время ожидания поставщика доступа к данным не истекло, то поставщик пытается подключиться к участнику, являющемуся резервным сервером. Если время ожидания соединения истекло до успешного завершения подключения, или участник, являющийся резервным сервером, недоступен, попытка подключения завершается неудачно. Если до окончания времени ожидания входа участник, являющийся резервным сервером, доступен и в данный момент является основным сервером, попытка соединения обычно завершается успешно.
Строки соединения с зеркальной базой данных
Сообщаемая клиентом строка соединения содержит сведения, используемые поставщиком доступа к данным для подключения к базе данных. В этом разделе описаны ключевые слова, относящиеся к соединению с отображаемой базой данных с помощью драйвера ODBC для собственного клиента SQL. Дополнительные сведения обо всех ключевых словах строки соединения см. в разделе Using Connection String Keywords with SQL Native Client.
Атрибут Network
Строка соединения должна содержать атрибут Network, указывающий сетевой протокол. Это гарантирует сохранение указанного сетевого протокола при соединении с разными участниками. Протокол TCP/IP — наилучший протокол для соединения с отображаемой базой данных. Чтобы гарантировать запрос протокола TCP/IP клиентом при каждом подключении к участникам, необходимо включить в строку соединения следующий атрибут:
Network=dbmssocn;
Важно! |
---|
Рекомендуется, чтобы протокол TCP/IP был указан в самой верхней строке списка протоколов клиента. Однако, если в строке соединения указан атрибут Network, то он перекрывает порядок элементов списка. |
С другой стороны, чтобы гарантировать запрос именованных каналов клиентом каждый раз при подключении к участникам, необходимо включить в строку соединения следующий атрибут:
Network=dbnmpntw;
Важно! |
---|
Так как именованные каналы не используют алгоритм повторения протокола TCP/IP, во многих случаях время попытки подключения с помощью именованных каналов истекает до соединения с отображаемой базой данных. |
Атрибут Server
В строке соединения должен присутствовать атрибут Server, предоставляющий имя изначального участника, который должен идентифицировать текущий экземпляр основного сервера.
Самый простой способ идентифицировать экземпляр — это указать его имя, <имя_сервера>[\<имя_экземпляра_SQL_Server>]. Например:
Server=Partner_A;
или
Server=Partner_A\Instance_2;
Однако, если используется системное имя, то клиент должен выполнить уточняющий запрос к DNS, чтобы получить IP-адрес сервера и запрос к обозревателю SQL Server, чтобы получить номер порта сервера, на котором расположен участник. Эти уточняющие запросы можно обойти, если указать IP-адрес и номер порта участника в атрибуте Server вместо указания имени сервера. Это рекомендуется для сведения к минимуму возможности внешних задержек при подключении к участнику.
Примечание. |
---|
Запрос к обозревателю SQL Server необходим, если в строке соединения указано имя именованного экземпляра, а не порт. |
Чтобы указать IP-адрес и порт, атрибут Server нужно записать в следующем виде Server=
<ip_адрес>,
<порт>, например:
Server=123.34.45.56,4724;
Примечание. |
---|
IP-адрес может иметь версию 4 (IPv4) или 6 (IPv6). |
Атрибут Database
Кроме того, в строке соединения должен содержаться атрибут Database, который предоставляет имя отображаемой базы данных. Если база данных во время клиентской попытки соединения недоступна, инициируется исключение.
Например, чтобы явно подключиться к базе данных AdventureWorks на основном сервере Участник А, клиент должен указать следующую строку соединения:
" Server=Partner_A; Database=AdventureWorks "
Примечание. |
---|
В данной строке пропущены сведения для проверки подлинности. Дополнительные сведения о ключевых словах для встроенной проверки подлинности см. в разделе Using Connection String Keywords with SQL Native Client. |
Важно! |
---|
Указание префикса протокола с атрибутом Server (Server=tcp: <имя_сервера>) не совместимо с атрибутом Network, и указание протокола в двух местах вероятнее всего приведет к ошибке. Поэтому рекомендуется указывать протокол в строке соединения с помощью атрибута Network, а в атрибуте Server указывать только имя сервера "Network=dbmssocn; Server= <имя_сервера>" ). |
Атрибут Failover Partner
В дополнение к имени изначального участника клиент может также указать имя участника, являющегося резервным сервером, которое должно идентифицировать текущий экземпляр зеркального сервера. Участник, являющийся резервным сервером, задается атрибутом Failover Partner. Самый простой способ идентифицировать экземпляр сервера — это указать его системное имя, <имя_сервера>[\<имя_экземпляра_SQL_Server>].
Либо атрибут Failover Partner может задавать IP-адрес и номер порта. В случае неудачи первоначальной попытки подключения во время первого соединения с базой данных попытка соединения с участником, являющимся резервным сервером, не будет более зависеть от DNS и обозревателя SQL Server. После того, как соединение установлено, имя участника, являющегося резервным сервером, перезаписывается именем участника, являющегося резервным севером; таким образом, в случае сбоя перенаправленные соединения потребуют DNS и обозреватель SQL Server.
Примечание. |
---|
Если указано только имя изначального участника, разработчикам приложения нет необходимости предпринимать какие-либо действия или писать какой-либо код, кроме кода, предназначенного для повторного соединения. |
Примечание. |
---|
Разработчики приложений с управляемым кодом указывают имя участника, являющегося резервным сервером, в свойстве ConnectionString объекта SqlConnection. Дополнительные сведения об использовании данной строки соединения см. в разделе «Поддержка зеркального отображения баз данных в поставщике данных .NET Framework для SQL Server» документации по ADO.NET, являющейся частью пакета Microsoft .NET Framework SDK. |
Пример строки соединения
Например, чтобы явно подключиться к базе данных AdventureWorks с помощью протокола TCP/IP на сервереУчастник А или Участник Б, клиентское приложение должно сообщить следующую строку соединения:
"Server=Partner_A; Failover Partner=Partner_B; Database=AdventureWorks; Network=dbmssocn"
Либо клиент может использовать IP-адрес и номер порта, чтобы идентифицировать изначального участника Участник А; например для IP-адреса 250.65.43.21 и номера порта 4734 строка соединения может быть следующей:
"Server=250.65.43.21,4734; Failover Partner=Partner_B; Database=AdventureWorks; Network=dbmssocn"
См. также
Основные понятия
Сетевые протоколы и конечные точки TDS
Обзор зеркального отображения базы данных
Возможные неполадки при зеркальном отображении базы данных
Другие ресурсы
Подключение к компоненту Database Engine SQL Server
Using Connection String Keywords with SQL Native Client
Использование обозревателя SQL Server