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


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

Скачать ADO.NET

Примечание.

Зеркальное отображение базы данных в SQL Server — это отдельная технология зеркального отображения базы данных Microsoft Fabric.

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

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

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

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

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

";Failover Partner=PartnerServerName"

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

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

Примечание.

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

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

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

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

string activeServer = connection.DataSource;

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

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

Примечание.

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

Следующие шаги

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

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

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