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


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

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

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

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

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

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

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

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

";Failover Partner=PartnerServerName"

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

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

ПримечаниеПримечание

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

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

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

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

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

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

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

ПримечаниеПримечание

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

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

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

Ресурс

Описание

Зеркальное отображение базы данных в электронной документации по SQL Server 2008

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

Зеркальное отображение базы данных в электронной документации по SQL Server 2005.

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