Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения:SQL Server
В этом разделе описываются синхронный и асинхронный режимы работы для сеансов зеркального отображения базы данных.
Примечание.
Базовые сведения о зеркальном отображении базы данных см. в разделе Зеркальное отображение базы данных (SQL Server).
Условия и определения
В данном разделе описывается несколько терминов, которые имеют центральное значение для этой темы.
Высокопроизводительный режим
Сеанс зеркального отображения базы данных работает асинхронно и использует только основной сервер и зеркальный сервер. Единственной формой переключения ролей является принудительное обслуживание (с возможной потерей данных).
Режим высокой безопасности
Сеанс зеркального отображения базы данных работает синхронно, и в нем в случае необходимости используются следящий сервер, а также основной сервер и зеркальный сервер.
Безопасность транзакций
Характерное для зеркального отображения свойство базы данных, которое определяет, будет работать сеанс зеркального отображения базы данных в синхронном или асинхронном режиме. Предусмотрены два уровня безопасности: FULL и OFF.
Свидетель
Необязательный экземпляр SQL Server, используемый только в режиме повышенной безопасности, который позволяет зеркальному серверу определять, следует ли инициировать автоматическое переключение на резервный сервер. В отличие от двух партнеров по аварийному переключению, свидетель не обслуживает базу данных. Единственная роль свидетеля — поддержка автоматического переключения при отказе.
Асинхронное зеркальное отображение баз данных (режим высокой производительности)
В этом разделе описываются принципы работы асинхронного зеркального отображения базы данных, ситуации, когда можно использовать режим высокой производительности, и меры, принимаемые в случае сбоя основного сервера.
Примечание.
Большинство выпусков SQL Server поддерживают только синхронное зеркальное отображение базы данных ("Только безопасность"). Сведения о выпусках, которые полностью поддерживают зеркальное отображение базы данных, см. в разделе "Высокий уровень доступности (AlwaysOn)" в выпусках и поддерживаемых функциях SQL Server 2022.
Если безопасность транзакций отключена, сеанс зеркального отображения базы данных выполняется в асинхронном режиме. Асинхронные операции поддерживаются только в режиме высокой производительности. В этом режиме производительность повышается за счет высокого уровня доступности. В режиме высокой производительности задействованы только основной сервер и зеркальный сервер. Проблемы, возникающие на зеркальном сервере, никогда не влияют на основной сервер. При потере соединения с основным сервером зеркальная база данных переходит в состояние DISCONNECTED, но остается доступной в режиме «горячего» резервирования.
Режим высокой производительности поддерживает только одну форму переключения ролей: принудительное обслуживание (с возможной потерей данных), при котором зеркальный сервер используется в качестве сервера «горячего» резервирования. Принудительное обслуживание — одна из возможных реакций на ошибку основного сервера. Поскольку возможна потеря данных, прежде чем принудительно переключать обслуживание на зеркальный сервер, следует рассмотреть другие варианты. Дополнительные сведения см. в разделе Действия при отказе основного сервера, далее в этом разделе.
На следующем рисунке показана конфигурация сеанса в режиме высокой производительности.
В режиме высокой производительности, как только основной сервер отправляет журнал транзакций зеркальному серверу, основной сервер отправляет подтверждение клиенту, не дожидаясь ответа от зеркального сервера. Транзакции фиксируются без ожидания записи журнала на диск на зеркальном сервере. Асинхронный режим позволяет основному серверу работать с минимальной задержкой транзакций.
Зеркальный сервер пытается не отставать от записей журнала транзакций, которые отправляет основной сервер. Но зеркальная база данных может несколько отставать от основной базы данных, хотя обычно расхождение между базами данных невелико. Однако этот разрыв может стать существенным, если основной сервер сильно загружен или перегружена система зеркального сервера.
В этом разделе.
Когда рекомендуется использовать режим высокой производительности?
Режим высокой производительности может быть полезен в сценарии аварийного восстановления, когда основной и зеркальный серверы значительно удалены друг от друга и когда необходимо, чтобы мелкие ошибки не влияли на основной сервер.
Примечание.
Доставка журналов может дополнять зеркальное отображение базы данных и является подходящей альтернативой для асинхронного зеркального отображения базы данных. Дополнительные сведения о преимуществах доставки журналов см. в разделе Решения высокого уровня доступности (SQL Server). Сведения об использовании функционала доставки журналов совместно с зеркальным отображением базы данных см. в разделе Зеркальное отображение баз данных и доставка журналов (SQL Server).
Влияние свидетеля на работу в режиме высокой производительности
При использовании Transact-SQL для настройки высокопроизводительного режима, если для параметра SAFETY установлено значение OFF, настоятельно рекомендуется также установить параметр WITNESS в значение OFF. Сервер-свидетель может сосуществовать с режимом высокой производительности, но сервер-свидетель не дает никаких преимуществ и создает риск.
Если свидетель отсоединен от сеанса, и любой из партнеров выходит из строя, база данных становится недоступной. Это связано с тем, что, хотя для высокопроизводительного режима свидетель не требуется, если он настроен, для сеанса необходим кворум, состоящий из двух или более экземпляров сервера. Если сеанс теряет кворум, он не может обслуживать базу данных.
Если свидетель настроен для сеанса, работающего в режиме высокой производительности, принудительное обеспечение кворума означает, что:
Если зеркальный сервер недоступен, основной сервер должен быть подключен к серверу-свидетелю. В противном случае основной сервер переводит свою базу данных в режим «вне сети» до тех пор, пока следящий или зеркальный сервер не восстановит соединение с сеансом;
Если основной сервер становится недоступен, для принудительного переключения обслуживания на зеркальный сервер необходимо, чтобы зеркальный сервер был подключен к свидетелю.
Примечание.
Сведения о типах кворумов см. в разделе Кворум: как свидетель влияет на доступность базы данных (зеркальное отображение базы данных).
Реагирование на отказ основного узла
Если на основном сервере произошла ошибка, у владельца базы данных есть несколько вариантов действия:
Оставить базу данных недоступной, пока основной сервер снова не станет доступным.
Если основная база данных и ее журнал транзакций не повреждены, этот вариант позволяет сохранить все подтвержденные транзакции ценой снижения доступности.
Завершить сеанс зеркального отображения базы данных, вручную обновив базу данных, а затем начать новый сеанс зеркального отображения.
Если основная база данных недоступна, но основной сервер все еще запущен, попытайтесь сразу сохранить резервную копию заключительного фрагмента журнала основной базы данных. Если резервное копирование хвостового журнала выполнено успешно, удаление зеркалирования может оказаться наилучшим вариантом. После удаления зеркального отображения можно восстановить журнал на бывшей зеркальной базе данных, сохранив при этом все данные.
Примечание.
Если создать резервную копию заключительного фрагмента журнала не удается и нельзя ждать восстановления основного сервера, можно воспользоваться режимом вынужденного обслуживания, преимущество которого в продолжении сеанса в текущем состоянии.
Принудительное обслуживание (с возможной потерей данных) зеркальным сервером.
Принудительное обслуживание является исключительно методом аварийного восстановления и должно использоваться ограниченно. Принудительный запуск службы возможен только в том случае, если основной сервер недоступен, сеанс является асинхронным (параметр безопасности транзакций имеет значение OFF), и либо у сеанса нет свидетеля (свойство WITNESS имеет значение OFF), либо свидетель подключен к зеркальному серверу (то есть они имеют кворум).
При принудительном обслуживании зеркальный сервер играет роль основного и предоставляет клиентам свою копию базы данных. При принудительном вводе в эксплуатацию будут потеряны все журналы транзакций, которые основной сервер еще не отправил на зеркальный сервер. Поэтому принудительное обслуживание следует ограничить ситуациями, когда возможная потеря данных приемлема, но важна доступность базы данных. Сведения о принудительном обслуживании и об оптимальных методах его использования см. в разделе Переключение ролей во время сеанса зеркального отображения базы данных (SQL Server).
Синхронное зеркальное отображение базы данных (режим высокой безопасности)
В этом разделе описывается, как работает синхронное зеркальное отображение базы данных, включая альтернативные режимы повышенной безопасности (с автоматическим переключением на резервный сервер и без автоматического переключения на резервный сервер), а также содержатся сведения о роли свидетеля в автоматическом переключении на резервный сервер.
Если параметр безопасности транзакций установлен в значение FULL, сеанс зеркального отображения базы данных выполняется в режиме высокой безопасности и после начальной синхронизации работает в синхронном режиме. В этом разделе описываются подробности сеансов зеркального отображения базы данных, которые конфигурируются для выполнения в синхронном режиме.
Чтобы сеанс проходил в синхронном режиме, зеркальный сервер должен синхронизировать зеркальную базу данных с основной базой данных. Когда начинается сеанс, основной сервер начинает отправлять свой активный журнал на зеркальный сервер. Зеркальный сервер записывает все поступающие записи журнала на диск с максимально возможной скоростью. Как только все полученные записи журнала оказываются записанными на диск, происходит синхронизация баз данных. До тех пор пока связь между участниками не прекращается, синхронизация баз данных сохраняется.
Примечание.
Для контроля за изменениями состояния в сеансе зеркального отображения базы данных воспользуйтесь классом событий Database Mirroring State Change . Дополнительные сведения см. в статье Database Mirroring State Change Event Class.
После завершения синхронизации любая транзакция, зафиксированная в основной базе данных, фиксируется и на зеркальном сервере, что гарантирует защиту данных. Это достигается за счет ожидания фиксации транзакции в основной базе данных до тех пор, пока основной сервер не получит от зеркального сервера сообщение о том, что тот записал журнал транзакции на диск. Отметим, что время ожидания этого сообщения приводит к увеличению задержки транзакции.
Время, необходимое для выполнения синхронизации, зависит главным образом от того, насколько зеркальная база данных отставала от базы данных участника в начале сеанса (отставание измеряется числом журнальных записей, первоначально полученных от сервера участника), от рабочей нагрузки на базу данных участника и от быстродействия системы зеркального отображения. По завершении синхронизации сеанса зафиксированный журнал, который еще должен быть перезаписан в зеркальную базу данных, остается в очереди повтора.
Как только зеркальная база данных синхронизируется, состояние обеих копий базы данных изменяется на SYNCHRONIZED.
Синхронность операции достигается следующим образом.
Получив транзакцию от клиента, основной сервер записывает ее в журнал транзакций.
Основной сервер записывает транзакцию в базу данных и одновременно направляет журнальную запись зеркальному серверу. Основной сервер ждет, пока от зеркального сервера поступит подтверждение, после чего направляет клиенту одно из следующих подтверждений: о фиксации или откате транзакции.
Зеркальный сервер записывает журнал на диск и возвращает подтверждение основному серверу.
Получив подтверждение от зеркального сервера, основной сервер направляет клиенту сообщение с подтверждением.
В режиме высокой безопасности данные защищаются за счет их синхронизации в двух местах хранения. Гарантируется запись всех зафиксированных транзакций на диск зеркального сервера.
В этом разделе.
Режим повышенной безопасности без автоматического переключения при отказе
Режим повышенной безопасности с автоматическим переключением при отказе
Режим повышенной безопасности без автоматического переключения при отказе
На следующем рисунке показана конфигурация режима высокой безопасности без автоматического переключения при отказе. Эта конфигурация содержит только двух участников.
Если партнеры подключены и база данных уже синхронизирована, поддерживается ручное переключение при отказе. Если экземпляр зеркального сервера отключен, это не влияет на экземпляр основного сервера, который остается работать в незащищенном режиме (без зеркального отображения данных). При выходе из строя основного сервера зеркальный сервер приостанавливается, но обслуживание может быть принудительно перенесено на него (с возможной потерей данных). Дополнительные сведения см. в статье Переключение ролей во время сеанса зеркального отображения базы данных (SQL Server).
Режим повышенной безопасности с автоматическим переключением при отказе
Автоматический переход на другой ресурс обеспечивает высокий уровень доступности за счет того, что обслуживание базы данных продолжается после выхода из строя одного сервера. Для автоматического переключения при отказе сеанс должен включать третий экземпляр сервера, свидетель, который в идеале располагается на третьем компьютере. На следующем рисунке показана конфигурация сеанса режима высокой безопасности с автоматическим переключением при отказе.
В отличие от двух партнеров, свидетель не обслуживает базу данных. Сервер-свидетель лишь обеспечивает автоматическое переключение при отказе, проверяя, работает ли основной сервер и доступен ли он. Зеркальный сервер инициирует автоматическое переключение при отказе только в том случае, если зеркальный сервер и сервер-свидетель остаются подключенными друг к другу после того, как оба были отключены от основного сервера.
Если задан свидетель, для сеанса требуется кворум — связь между как минимум двумя экземплярами сервера, которая позволяет сделать базу данных доступной. Дополнительные сведения см. в разделах Следящий сервер зеркального отображения базы данных и Кворум: как следящий сервер влияет на доступность базы данных (зеркальное отображение базы данных).
Для автоматического переключения на резервный ресурс требуется соблюдение следующих условий.
База данных уже синхронизирована.
Сбой происходит, когда подключены все три экземпляра сервера, а сервер-свидетель и зеркальный сервер остаются соединёнными.
Потеря партнёра имеет следующее последствие:
Если основной сервер становится недоступным при указанных выше условиях, происходит автоматическое переключение при отказе. Зеркальный сервер переключается на роль основного сервера и предоставляет свою базу данных в качестве основной базы данных.
Если основной сервер становится недоступным, а описанные выше условия не выполняются, возможно принудительное обслуживание (с возможной потерей данных). Дополнительные сведения см. в статье Переключение ролей во время сеанса зеркального отображения базы данных (SQL Server).
Если единственный зеркальный сервер становится недоступным, основной сервер и сервер-свидетель продолжают работать.
Если сеанс лишается свидетеля, для кворума требуются оба партнёра. Если один из участников теряет кворум, то кворум теряется обоими участниками, и база данных становится недоступной до восстановления кворума. Это требование кворума гарантирует, что при отсутствии свидетеля база данных никогда не будет работать без защиты, то есть без зеркалирования.
Примечание.
Если вы ожидаете, что свидетель будет отключен в течение длительного времени, мы рекомендуем удалить его из сеанса, пока он снова не станет доступен.
Настройки Transact-SQL и режимы зеркального отображения базы данных
В этом разделе описывается сеанс зеркалирования базы данных с точки зрения параметров ALTER DATABASE и состояний отражаемой базы данных и свидетеля, если таковой имеется. Раздел предназначен для пользователей, выполняющих зеркальное отображение базы данных в основном или исключительно с помощью Transact-SQL, а не в среде SQL Server Management Studio.
Совет
В качестве альтернативы использования Transact-SQL управление рабочим режимом сеанса в обозревателе объектов может осуществляться на странице Зеркальное отображение в диалоговом окне Свойства базы данных. Дополнительные сведения см. в разделе Настройка сеанса зеркального отображения базы данных с помощью проверки подлинности Windows (SQL Server Management Studio).
В этом разделе.
Как безопасность транзакций и состояние свидетеля влияют на режим работы
Факторы, влияющие на работу в случае потери основного сервера
Как безопасность транзакций и состояние сервера-свидетеля влияют на режим работы
Режим работы сеанса определяется сочетанием его параметра безопасности транзакций и состояния свидетеля. Владелец базы данных может в любой момент изменить уровень безопасности транзакции, а также добавить или удалить свидетель.
В этом разделе.
Безопасность транзакций
Безопасность транзакций — специфичное для зеркального отображения свойство базы данных, которое определяет, будет ли работать сеанс зеркального отображения базы данных в синхронном или асинхронном режиме. Предусмотрены два уровня безопасности: FULL и OFF.
ПОЛНОСТЬЮ БЕЗОПАСНО
Полная безопасность транзакций приводит к тому, что сеанс работает в синхронном режиме высокой безопасности. При наличии свидетеля сеанс поддерживает автоматическое переключение при отказе.
При установлении сеанса с помощью операторов ALTER DATABASE сеанс начинается со свойством SAFETY, установленным в FULL; то есть сеанс начинается в режиме повышенной безопасности. После начала сессии можно добавить свидетеля.
Дополнительные сведения см. в подразделе Синхронное зеркальное отображение базы данных (режим повышенной безопасности)ранее в этом разделе.
БЕЗОПАСНОСТЬ OFF
При отключении обеспечения безопасности транзакций (уровень OFF) сеанс работает асинхронно, в высокопроизводительном режиме. Если параметр SAFETY установлен в OFF, параметр WITNESS также должен быть установлен в OFF (значение по умолчанию). Сведения о влиянии следящего сервера в режиме высокой производительности см. в подразделе Состояние следящего сервера далее в этом разделе. Дополнительные сведения об эксплуатации с выключенным режимом безопасности транзакций см. в подразделе Асинхронное зеркальное отображение баз данных (режим высокой производительности)выше в этом разделе.
Параметр безопасности транзакций базы данных фиксируется для каждого партнера в представлении каталога sys.database_mirroring в столбцах mirroring_safety_level и mirroring_safety_level_desc. Дополнительные сведения см. в разделе sys.database_mirroring (Transact-SQL).
Владелец базы данных может в любой момент изменить уровень безопасности транзакций.
Состояние свидетеля
Если установлен следящий сервер, требуется кворум, поэтому состояние следящего сервера всегда имеет значение.
Если свидетель существует, он может находиться в одном из двух состояний:
Если следящий сервер подключен к участнику, относительно этого участника следящий сервер находится в состоянии CONNECTED и с этим участником образуется кворум. В этом случае базу данных можно сделать доступной даже в случае, если один из участников недоступен.
Если свидетель существует, но не подключен к партнеру, свидетель находится в состоянии «НЕИЗВЕСТНО» или «ОТКЛЮЧЕН» относительно этого партнера. В этом случае у свидетеля нет кворума с этим участником, и если участники не соединены друг с другом, база данных становится недоступной.
Сведения о кворуме см. в разделе Кворум: как свидетель влияет на доступность базы данных (зеркальное отображение базы данных).
Состояние каждого свидетеля в экземпляре сервера записывается в представлении каталога sys.database_mirroring в столбцах mirroring_witness_state и mirroring_witness_state_desc. Дополнительные сведения см. в разделе sys.database_mirroring (Transact-SQL).
В следующей таблице показано, как режим сеанса зависит от параметра безопасности транзакций и от состояния сервера-свидетеля.
| Режим работы | Безопасность транзакций | Состояние следящего сервера |
|---|---|---|
| Высокопроизводительный режим | ВЫКЛ. | NULL (без свидетеля)** |
| Режим повышенной безопасности без автоматического переключения при отказе | ПОЛНЫЙ | NULL (без свидетеля) |
| Режим повышенной безопасности с автоматическим переключением при отказе* | ПОЛНЫЙ | ПОДКЛЮЧЕНО |
*Если сервер-свидетель отключится, рекомендуется установить параметр WITNESS в значение OFF, пока экземпляр сервера-свидетеля не станет доступен.
Если свидетель находится в режиме высокой производительности, он не участвует в сеансе. Но для обеспечения доступности базы данных необходимо, чтобы по крайней мере два экземпляра сервера оставались подключенными. Поэтому для сеансов, выполняющихся в высокопроизводительном режиме, рекомендуется оставить параметр WITNESS в состоянии OFF. Дополнительные сведения см. в статье Кворум: как свидетель влияет на доступность базы данных (зеркальное отображение базы данных).
Просмотр параметра безопасности и состояния сервера-свидетеля
Чтобы просмотреть параметр безопасности и состояние сервера-свидетеля для базы данных, используйте представление каталога sys.database_mirroring. Соответствующие данные отображаются в следующих столбцах:
| Фактор | Столбцы | Описание |
|---|---|---|
| Безопасность транзакций | mirroring_safety_level или mirroring_safety_level_desc | Параметр безопасности транзакций для обновлений в зеркальной базе данных, одно из следующих значений: НЕИЗВЕСТНО ВЫКЛ. ПОЛНЫЙ NULL = база данных находится не в режиме в сети. |
| Существует ли свидетель? | mirroring_witness_name | Имя сервера-свидетеля зеркального отображения базы данных или значение NULL, указывающее, что свидетель отсутствует. |
| Состояние следящего сервера | mirroring_witness_state или mirroring_witness_state_desc | Состояние свидетеля в базе данных для указанного участника: НЕИЗВЕСТНО ПОДКЛЮЧЕНО ОТКЛЮЧЕНО NULL = свидетель отсутствует или база данных не в сети. |
Например, на основном или на зеркальном сервере введите:
SELECT mirroring_safety_level_desc, mirroring_witness_name, mirroring_witness_state_desc FROM sys.database_mirroring
Дополнительные сведения о представлении этого каталога см. в разделе sys.database_mirroring (Transact-SQL).
Факторы, влияющие на работу в случае потери основного сервера
В следующей таблице приводится сводка совокупного влияния параметра безопасности транзакций, состояния базы данных и состояния свидетеля на поведение сеанса зеркального отображения при потере основного сервера.
| Безопасность транзакций | Состояние зеркалирования зеркальной базы данных | Состояние следящего сервера | Действия в случае потери связи с основным сервером |
|---|---|---|---|
| ПОЛНЫЙ | СИНХРОНИЗИРОВАНО | ПОДКЛЮЧЕНО | Происходит автоматическое переключение при отказе. |
| ПОЛНЫЙ | СИНХРОНИЗИРОВАНО | ОТКЛЮЧЕНО | Зеркальный сервер останавливается; переключение при отказе невозможно, и базу данных невозможно сделать доступной. |
| ВЫКЛ. | ПРИОСТАНОВЛЕНО или ОТКЛЮЧЕНО | NULL (без свидетеля) | Обслуживание может быть принудительно переключено на зеркальный сервер (с возможностью потери данных). |
| ПОЛНЫЙ | СИНХРОНИЗАЦИЯ или ПРИОСТАНОВЛЕНО | NULL (без свидетеля) | Обслуживание может быть принудительно переключено на зеркальный сервер (с возможностью потери данных). |
Связанные задачи
Добавление или замена свидетеля зеркального отображения базы данных (SQL Server Management Studio)
Удаление свидетеля из сеанса зеркального отображения базы данных (SQL Server)
Изменение безопасности транзакций в сеансах зеркального отображения базы данных (Transact-SQL)
См. также
Наблюдение за зеркальным отображением базы данных (SQL Server)
Свидетель зеркалирования базы данных