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


Зеркалирование базы данных и репликация (SQL Server)

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

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

Замечание

После резервного переключения зеркальный сервер становится основным сервером. В этом разделе "субъект" и "зеркало" всегда ссылаются на исходный субъект и зеркало.

Требования и рекомендации по использованию репликации с зеркальным отображением базы данных

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

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

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

  • Метаданные и объекты, которые существуют вне базы данных, не копируются в зеркало, включая имена входа, задания, связанные серверы и т. д. Если вам нужны метаданные и объекты на зеркале, их необходимо скопировать вручную. Дополнительные сведения см. в разделе "Управление именами входа и заданиями после переключения ролей" (SQL Server).

Настройка репликации с помощью зеркального отображения базы данных

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

  1. Настройте издателя.

  2. Настройка зеркального отображения базы данных.

  3. Настройте зеркало для использования того же дистрибьютора, что и основной сервер.

  4. Настройте агенты репликации для отработки отказа.

  5. Добавьте главный сервер и зеркальный сервер в монитор репликации.

Шаги 1 и 2 также можно выполнить в противоположном порядке.

Чтобы настроить зеркальное отображение для публикационной базы данных

  1. Настройка издателя:

    1. Рекомендуется использовать удаленный распространитель. Дополнительные сведения о настройке распространения см. в разделе "Настройка распространения".

    2. Можно включить базу данных для публикаций моментальных снимков и/или транзакционных публикаций и публикаций слияния. Для зеркальных баз данных, содержащих несколько типов публикации, необходимо включить базу данных для обоих типов на одном узле с помощью sp_replicationdboption. Например, можно выполнить следующие вызовы хранимых процедур на главном сервере:

      exec sp_replicationdboption @dbname='<PublicationDatabase>', @optname='publish', @value=true;  
      exec sp_replicationdboption @dbname='<PublicationDatabase>', @optname='mergepublish', @value=true;  
      

      Дополнительные сведения о создании публикаций см. в разделе "Публикация данных и объектов базы данных".

  2. Настройка зеркального отображения базы данных. Дополнительные сведения см. в статье "Установка сеанса зеркального отображения базы данных с помощью проверки подлинности Windows (SQL Server Management Studio) и настройка зеркальногоотображения базы данных (SQL Server)".

  3. Настройте распределение для зеркального отображения. Укажите имя зеркала как Издатель и укажите того же Распространителя и папку моментальных снимков, которые использует основной сервер. Например, если вы настраиваете репликацию с помощью хранимых процедур, выполните sp_adddistpublisher на дистрибьюторе, и затем выполните sp_adddistributor на зеркале. Для sp_adddistpublisher:

    • Задайте для параметра @publisher сетевое имя зеркального отображения.

    • Задайте значение параметра @working_directory к папке моментального снимка, используемой главным узлом.

  4. Укажите зеркальное имя параметра агента -PublisherFailoverPartner . Этот параметр необходим для следующих агентов, чтобы идентифицировать зеркало после переключения при отказе.

    • Агент моментальных снимков (для всех публикаций)

    • Агент чтения логов (для всех транзакционных публикаций)

    • Агент чтения очередей (для транзакционных публикаций, поддерживающих обновляемые подписки в очереди)

    • Агент слияния (для подписок на слияние)

    • Прослушиватель репликации SQL Server (replisapi.dll: для подписок слияния, синхронизируемых с помощью веб-синхронизации)

    • Элемент управления ActiveX для слияния SQL (для подписок на слияние, синхронизированных с элементом)

    Агент распространителя и элемент ActiveX не имеют этого параметра, так как они не подключаются к издателю.

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

    Рекомендуется добавить -PublisherFailoverPartner в профиль агента, а затем указать зеркальное имя в профиле. Например, если вы настраиваете репликацию с помощью хранимых процедур:

    -- Execute sp_help_agent_profile in the context of the distribution database to get the list of profiles.  
    -- Select the profile id of the profile that needs to be updated from the result set.  
    -- In the agent_type column returned by sp_help_agent_profile:   
    -- 1 = Snapshot Agent; 2 = Log Reader Agent; 3 = Distribution Agent; 4 = Merge Agent; 9 = Queue Reader Agent.  
    
    exec sp_help_agent_profile;  
    
    -- Setting the -PublisherFailoverPartner parameter in the default Snapshot Agent profile (profile 1).  
    -- Execute sp_add_agent_parameter in the context of the distribution database.  
    exec sp_add_agent_parameter @profile_id = 1, @parameter_name = N'-PublisherFailoverPartner', @parameter_value = N'<Failover Partner Name>';  
    
    -- Setting the -PublisherFailoverPartner parameter in the default Merge Agent profile (profile 6).  
    -- Execute sp_add_agent_parameter in the context of the distribution database.  
    exec sp_add_agent_parameter @profile_id = 6, @parameter_name = N'-PublisherFailoverPartner', @parameter_value = N'<Failover Partner Name>';  
    
  5. Добавьте основной и зеркало в Репликационный монитор. Дополнительные сведения см. в статье Добавление и удаление издателей в мониторе репликации.

Обслуживание зеркальной базы данных издания

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

  • Администрирование и мониторинг должны выполняться на активном сервере. В SQL Server Management Studio публикации отображаются в папке локальных публикаций только для активного сервера. Например, если вы выполняете переключение на резервный сервер, публикации отображаются в зеркале и больше не отображаются на основном сервере. Если база данных переходит на резервное зеркало, может потребоваться вручную обновить Management Studio и монитор репликации, чтобы изменения отразились.

  • Монитор репликации отображает узлы издателя в дереве объектов как для основной, так и для зеркала. Если главный сервер является активным, сведения о публикации отображаются только под главным узлом в мониторе репликации.

    Если зеркальный сервер является активным сервером.

    • Если агент имеет ошибку, эта ошибка указывается только на основном узле, а не на зеркальном узле.

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

  • При использовании хранимых процедур или объектов управления репликацией (RMO) для администрирования репликации на зеркале в случаях, когда вы указываете имя издателя, необходимо указать имя экземпляра, на котором была включена репликация базы данных. Чтобы определить соответствующее имя, используйте имя сервера публикации функции.

    При зеркальном отображении базы данных публикации метаданные репликации, хранящиеся в зеркальной базе данных, идентичны метаданным, хранящимся в основной базе данных. Следовательно, для баз данных публикации, которые включены для репликации на основном сервере, имя экземпляра издателя, хранящееся в системных таблицах зеркала, соответствует имени основного сервера, а не зеркала. Это влияет на конфигурацию и обслуживание репликации, если база данных публикации переходит на зеркальную базу данных. Например, если вы настраиваете репликацию с хранимыми процедурами на зеркальной базе данных после отказа и хотите добавить подписку с извлечением в базу данных публикации, включенную на основном сервере, необходимо указать имя основного сервера, а не имя зеркала, для параметра @publisher функции sp_addpullsubscription или sp_addmergepullsubscription.

    Если вы включите базу данных публикации на зеркале после переключения на зеркало, имя экземпляра издателя, хранящееся в системных таблицах, — это имя зеркала; в этом случае вы будете использовать имя зеркала для параметра @publisher.

    Замечание

    В некоторых случаях, например sp_addpublication, параметр @publisher поддерживается только для издателей, отличных от SQL Server; В таких случаях не имеет значения для зеркального отображения базы данных SQL Server.

  • После возникновения отказа для синхронизации подписки в Management Studio выполните синхронизацию pull-подписок у подписчика и push-подписок у активного издателя.

Поведение репликации при удалении зеркального отображения

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

  • Если база данных публикации на основном сервере перестала быть зеркальной, репликация продолжает работать без изменений на исходном основном сервере.

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

  • Если зеркальное отображение базы данных полностью удалено, зеркальная база данных находится в состоянии восстановления и должна быть восстановлена, чтобы стать функциональным. Поведение восстановленной базы данных относительно репликации зависит от того, указан ли параметр KEEP_REPLICATION. Этот параметр заставляет операцию восстановления сохранять параметры репликации при восстановлении опубликованной базы данных на сервере, отличном от того, на котором была создана резервная копия. Используйте параметр KEEP_REPLICATION, только если другая база данных публикации недоступна. Опция не поддерживается, если другая база данных публикации по-прежнему остается нетронутой и продолжает реплицироваться. Дополнительные сведения о KEEP_REPLICATION см. в разделе RESTORE (Transact-SQL).

Поведение агента чтения журналов

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

Рабочий режим Поведение агента чтения журналов, если зеркальное отображение недоступно
Режим высокой безопасности с автоматическим переключением на резервный режим Если зеркальное отображение недоступно, агент чтения журналов распространяет команды в базу данных распространителя. Главный сервер не может переключиться на зеркальный сервер, пока зеркальный сервер не будет восстановлен и не получит все транзакции от главного сервера.
Высокопроизводительный режим Если зеркальное отображение недоступно, основная база данных работает без зеркала (т. е. незеркальная). Однако агент чтения журналов воспроизводит только те транзакции, которые зафиксированы на зеркале. Если служба принудительно переключается и зеркальный сервер принимает роль главного сервера, агент чтения журналов будет работать с зеркалом и начнет сбор новых транзакций.

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

См. также

Репликация SQL Server
Доставка журналов и репликация (SQL Server)