Использование зеркального отображения базы данных

Зеркальное отображение базы данных, впервые представленное в SQL Server 2005, — это преимущественно программное решение, предназначенное для повышение надежности и избыточности базы данных. Собственный клиент SQL Server обеспечивает явную поддержку зеркального отображения базы данных, чтобы разработчикам не пришлось писать дополнительный код или предпринимать другие действия после ее настройки.

Зеркальное отображение базы данных, реализованное отдельно для каждой базы данных, хранит копию производственной базы данных SQL Server на резервном сервере. Это или «горячий», или «теплый» резервный сервер, в зависимости от конфигурации и состояния сеанса зеркального отображения базы данных. «Горячий» резервный сервер поддерживает быстрый переход на другой ресурс без потери зафиксированных транзакций, а «теплый» резервный сервер поддерживает принудительное обслуживание (с возможной потерей данных).

Производственная база данных называется основной, а резервная копия – зеркальной базой данных. Производственная и зеркальная база данных должны находиться на разных экземплярах SQL Server (экземплярах сервера), а по возможности и на разных компьютерах.

Производственный экземпляр сервера называется основным сервером, он соединен с резервным экземпляром сервера, который называется зеркальным сервером. Основной и зеркальный сервер выступают в роли участников в сеансе зеркального отображения базы данных. Если основной сервер дает сбой, зеркальный сервер делает свою базу данных основной с помощью процесса, который называется переходом на другой ресурс. Например, имеется два сервера-участника, Partner_A and Partner_B, при этом основная база данных изначально находится на сервере Partner_A (основной сервер), а зеркальная база данных размещается на сервере Partner_B (зеркальный сервер). Если сервер Partner_A переходит в автономный режим, база данных на сервере Partner_B становится текущей основной базой данных. Когда сервер Partner_A возвращается в сеанс зеркального отображения, он становится зеркальным сервером, а его база данных – зеркальной базой данных.

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

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

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

Дополнительные сведения о начальных попытках соединения и повторного соединения к зеркальной базе данных см. в разделе Клиентские соединения с зеркальной базой данных.

Замечания по программированию

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

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

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

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

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

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

Поставщик OLE DB для собственного клиента SQL Server

Поставщик OLE DB для собственного клиента SQL Server поддерживает зеркальное отображение базы данных с помощью атрибутов соединения и строки соединения. К набору свойств DBPROPSET_SQLSERVERDBINIT было добавлено свойство SSPROP_INIT_FAILOVERPARTNER, а ключевое слово FailoverPartner является новым атрибутом строки соединения для DBPROP_INIT_PROVIDERSTRING. Дополнительные сведения см. в разделе Использование ключевых слов строки соединения с собственным клиентом SQL Server.

Кэш перехода на другой ресурс хранится, пока загружен поставщик, то есть до вызова функции CoUninitialize или пока приложение имеет ссылку на некоторый объект, управляемый поставщиком OLE DB для собственного клиента SQL Server, например, объект источника данных.

Дополнительные сведения о поддержке поставщиком OLE DB для собственного клиента SQL Server зеркального отображения базы данных см. в разделе Свойства инициализации и авторизации.

Драйвер ODBC для собственного клиента SQL Server

Драйвер ODBC для собственного клиента SQL Server поддерживает зеркальное отображение базы данных с помощью атрибутов соединения и строки соединения. А именно, добавлен атрибут SQL_COPT_SS_FAILOVER_PARTNER для использования с функциями SQLSetConnectAttr и SQLGetConnectAttr, а ключевое слово Failover_Partner добавлено в качестве нового атрибута строки соединения.

Кэш перехода на другой ресурс хранится, пока в приложении имеется хотя бы один дескриптор среды. Он теряется при освобождении дескриптора среды.

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

Диспетчер драйвера ODBC расширен для поддержки спецификации имени резервного сервера.