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


Обслуживание базы данных публикации AlwaysOn (SQL Server)

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

Обслуживание опубликованной базы данных в группе доступности

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

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

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

  • Если для администрирования репликации на текущей первичной реплике используются хранимые процедуры или объекты RMO, то для случаев, когда указывается имя издателя, необходимо указать имя экземпляра, на котором база данных активирована для репликации (первоначальный издатель). Чтобы определить соответствующее имя, воспользуйтесь функцией PUBLISHINGSERVERNAME. Если публикуемая база данных присоединяется к группе доступности, метаданные репликации, хранимые в репликах базы данных-получателя, идентичны метаданным в первичной базе данных. Поэтому для баз данных публикации, активированных для репликации в первичной базе данных, имя экземпляра издателя, хранимое в системных таблицах во вторичной базе данных, является именем первичной, а не вторичной базы данных. Это отрицательно повлияет на настройку и обслуживание репликации, если в результате сбоя база данных публикации перейдет на вторичный сервер. Например, если вы настраиваете репликацию с хранимыми процедурами на вторичном сервере после отработки отказа и хотите получить подписку по запросу на базу данных публикации, которая была включена sp_addpullsubscription на другом реплика, необходимо указать имя исходного издателя вместо текущего в качестве параметра @publisher или sp_addmergepulllsubscription. Тем не менее, если база данных публикации после отработки отказа включена, именем экземпляра издателя, которое хранится в системных таблицах, является имя текущего первичного узла. В этом случае для параметра @publisher лучше использовать имя узла текущей первичной реплики.

    Примечание

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

  • Для синхронизации подписки в среде Среда Management Studio после отработки отказа необходимо синхронизировать подписки по запросу от подписчика и синхронизировать принудительные подписки от активного издателя.

Удаление опубликованной базы данных из группы доступности

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

  • Если база данных публикации на исходном издателе удаляется из основного реплика группы доступности, для удаления перенаправления для пары "издатель/база данных" необходимо выполнить sp_redirect_publisher без указания значения параметра @redirected_publisher.

    EXEC sys.sp_redirect_publisher   
        @original_publisher = 'MyPublisher',  
        @published_database = 'MyPublishedDB';  
    

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

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

    EXEC sys.sp_redirect_publisher   
        @original_publisher = 'MyPublisher',  
        @published_database = 'MyPublishedDB',  
        @redirected_publisher = 'MyNewPublisher';  
    

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

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

    Примечание

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

    Выполните sp_dropsubscription, чтобы удалить подписки на публикацию. Убедитесь в том, что для параметра @ignore_distributributor задано значение 1, чтобы метаданные сохранялись для активной базы данных публикации на уровне распространителя.

    USE MyDBName;  
    GO  
    
    EXEC sys.sp_dropsubscription   
        @subscriber = 'MySubscriber',  
        @publication = 'MyPublication',  
        @article = 'all',  
        @ignore_distributor = 1;  
    

    Выполните sp_droppublication, чтобы удалить все публикации. Еще раз задайте для параметра @ignore_distributor значение 1, чтобы метаданные сохранялись для активной базы данных публикации на уровне распространителя.

    EXEC sys.sp_droppublication   
        @publication = 'MyPublication',  
        @ignore_distributor = 1;  
    

    Выполните sp_replicationdboption, чтобы отключить репликацию для базы данных.

    EXEC sys.sp_replicationdboption  
        @dbname = 'MyDBName',  
        @optname = 'publish',  
        @value = 'false';  
    

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

Связанные задачи

См. также:

предварительными требованиями, и ограничениями и рекомендациями для групп доступности AlwaysOn (SQL Server)
Обзор групп доступности AlwaysOn (SQL Server)
Группы доступности AlwaysOn: взаимодействие (SQL Server)
Репликация SQL Server