Язык

Зеркальное отображение баз данных в SQL Server

Зеркалирование базы данных в SQL Server позволяет хранить копию или зеркальную копию базы данных SQL Server на резервном сервере. Зеркальное отображение гарантирует, что две отдельные копии данных постоянно существуют, обеспечивая высокую доступность и полную избыточность данных. После настройки зеркалирования базы данных для базы данных SQL Server Microsoft.Data.SqlClient поддерживает его без дополнительного клиентского кода. В свойстве ConnectionString также можно указать сервер партнера по отработке отказа.

Следующая последовательность событий возникает, когда объект SqlConnection нацелен на базу данных, настроенную для зеркального отображения:

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

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

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

Указание резервного участника в строке подключения

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

";Failover Partner=PartnerServerName"

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

При успешном SqlConnection открытии сервер возвращает имя партнера по отказоустойчивости. Это имя заменяет значение в строка подключения.

Примечание.

Необходимо явно указать имя исходного каталога или базы данных в строке подключения для сценариев зеркального отображения базы данных. Если клиент получает сведения о переходе на другой ресурс во время соединения, которое не содержит явно указанного исходного каталога или базы данных, эти сведения не кэшируются и приложение не делает попытку перехода на другой ресурс в случае выхода основного сервера из строя. Если строка подключения имеет значение для партнёра по обеспечению отказоустойчивости, но не имеет значения для исходного каталога или базы данных, возникает InvalidArgumentException.

Получение текущего имени сервера

После аварийного переключения используйте свойство DataSource для получения имени подключенного сервера. В следующем фрагменте кода предполагается, что переменная подключения ссылается на открытый экземпляр класса SqlConnection.

При возникновении события отработки отказа и переключении соединения на зеркальный сервер свойство DataSource обновляется, чтобы отразить имя зеркала.

Dim activeServer As String = connection.DataSource
string activeServer = connection.DataSource;

Поведение SqlClient при зеркальном отображении

Клиент всегда пытается подключиться к текущему основному серверу. В случае сбоя система пытается обратиться к резервному партнеру. Если зеркальная база данных уже переключена на основную роль на сервере-партнере, подключение будет установлено успешно, а новое сопоставление зеркального отображения-субъекта отправляется клиенту и кэшируется на время существования вызова AppDomain. Он не хранится в постоянном хранилище и недоступен для последующих подключений в другом AppDomain или процессе. Однако он доступен для последующих подключений в пределах одного и того же AppDomain. Обратите внимание, что другой AppDomain или процесс, работающий на том же или другом компьютере, всегда имеет свой пул подключений, и эти подключения не сбрасываются. В этом случае, если основная база данных выйдет из строя, каждый процесс или AppDomain по одному разу терпит сбой, и пул автоматически очищается.

Примечание.

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

Ресурсы, посвященные зеркальному отображению баз данных

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

Ресурс Описание
Зеркалирование баз данных Описывается установка и настройка зеркального отображения в SQL Server.

См. также