Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Примечание.
Зеркальное отображение базы данных в SQL Server — это отдельная технология зеркального отображения базы данных Microsoft Fabric.
Зеркальное отображение базы данных в SQL Server позволяет сохранять копию или зеркальную копию базы данных SQL Server на резервном сервере. Зеркалирование гарантирует, что всегда имеются две отдельные копии данных, обеспечивая высокую доступность и полное резервирование данных. Поставщик SqlClient (Майкрософт) для SQL Server предоставляет неявную поддержку зеркального отображения базы данных. Разработчику не надо предпринимать никаких действий, если клиент настроен для работы с базой данных SQL Server. Кроме того, объект SqlConnection поддерживает явный режим подключения, который позволяет указать имя сервера-партнера по обеспечению отработки отказа в ConnectionString.
Следующая упрощенная последовательность событий возникает для объекта SqlConnection, предназначенного для базы данных, которая настроена для зеркального отображения:
- Клиентское приложение успешно подключается к основной базе данных, а сервер отправляет обратно имя сервера-партнера, которое кэширует клиент.
- Если на сервере с основной базой данных происходит сбой или подключение прерывается, состояние подключения и транзакции будет утеряно. Клиентское приложение пытается восстановить подключение к основной базе данных, и происходит сбой.
- Затем клиентское приложение прозрачно пытается установить подключение к зеркальной базе данных на сервере-партнере. В случае успешной установки подключение перенаправляется в зеркальную базу данных, которая затем становится новой основной базой данных.
Указание партнера по обеспечению отработки отказа в строке подключения
Если в строке подключения указать имя резервного сервера-партнёра, а основная база данных недоступна в момент подключения клиентского приложения, клиентское приложение автоматически попытается подключиться к резервному серверу-партнёру.
";Failover Partner=PartnerServerName"
Если не указано имя сервера-партнера по обеспечению отработки отказа и основная база данных недоступна при первом подключении клиентского приложения, возникает SqlException.
При успешном открытии SqlConnection сервер возвращает имя партнера по обеспечению отработки отказа, которое заменяет все значения, указанные в строке подключения.
Примечание.
Необходимо явно указать имя исходного каталога или базы данных в строке подключения для сценариев зеркального отображения базы данных. Если клиент получает сведения о переходе на другой ресурс во время соединения, которое не содержит явно указанного исходного каталога или базы данных, эти сведения не кэшируются и приложение не делает попытку перехода на другой ресурс в случае выхода основного сервера из строя. Если в строке подключения указано значение для партнера отработки отказа, но не указано значение для начального каталога или базы данных, возникает InvalidArgumentException.
Получение текущего имени сервера
При переключении на резервный сервер можно получить имя сервера, к которому подключено текущее соединение, используя свойство DataSource объекта SqlConnection. Следующий фрагмент кода извлекает имя активного сервера, предполагая, что переменная подключения ссылается на открытый элемент SqlConnection.
При отказе и переключении соединения на зеркальный сервер свойство DataSource обновляется, чтобы отражать имя зеркального сервера.
string activeServer = connection.DataSource;
Поведение SqlClient при зеркалировании
Клиент всегда пытается подключиться к основному серверу. В случае сбоя он пытается обратиться к партнеру по обеспечению отработки отказа. Если зеркальная база данных уже переключена в основную роль на сервере-партнере, подключение успешно устанавливается, а новое сопоставление основной и зеркальной баз данных отправляется клиенту и кэшируется на время жизни вызывающего AppDomain. Оно не сохраняется в постоянном хранилище и недоступно для последующих подключений в другом домене приложения AppDomain или процессе. Однако оно доступно для последующих подключений внутри того же домена приложения AppDomain. Другой AppDomain (домен приложения) или процесс, работающий на том же или на другом компьютере, всегда имеет собственный пул подключений, и эти подключения не сбрасываются. В этом случае, если основная база данных отказывает, каждый процесс или домен AppDomain один раз завершается с ошибкой, и пул автоматически очищается.
Примечание.
Поддержка зеркального отображения на сервере настраивается отдельно для каждой базы данных. Если операции обработки данных выполняются для других баз данных, не входящих в основной или зеркальный набор, с помощью составных имен либо путем изменения текущей базы данных, изменения в этих базах данных не распространяются в случае сбоя. При изменении данных в незеркальной базе данных ошибка не возникает. Разработчик должен оценить возможное воздействие таких операций.