Поделиться через


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

Зеркальное отображение базы данных в SQL Server позволяет сохранять копию или зеркальную копию базы данных SQL Server на резервном сервере. Зеркальное отображение гарантирует, что две отдельные копии данных постоянно существуют, обеспечивая высокий уровень доступности и избыточности данных. Поставщик данных .NET для SQL Server предоставляет неявную поддержку зеркального отображения базы данных, поэтому разработчику не надо предпринимать никаких действий или писать код, если он настроен для работы с базой данных SQL Server. Кроме того, объект SqlConnection поддерживает явный режим подключения, который позволяет указать имя сервера-партнера по обеспечению отработки отказа в ConnectionString.

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

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

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

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

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

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

";Failover Partner=PartnerServerName"

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

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

Примечание.

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

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

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

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

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

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

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

Примечание.

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

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

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

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

См. также