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


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

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

В этом разделе:

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

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

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

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

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

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

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

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