Добавление и удаление статей в существующих публикациях
Область применения: SQL Server Управляемый экземпляр SQL Azure
Возможно добавлять и удалять статьи после создания публикации. Можно добавить статьи в любое время, но действия, необходимые для удаления статей, зависят от типа репликации и времени удаления статьи.
добавление статей
Добавление статьи включает следующие операции: добавление статьи в публикацию, создание нового моментального снимка публикации, синхронизация подписки для применения схемы и данных для новой статьи.
Примечание.
Если при добавлении статьи в публикацию слиянием, существующая статья зависит от новой статьи, то необходимо задать порядок обработки для обеих статей с помощью параметра @processing_order процедур sp_addmergearticle и sp_changemergearticle. Рассмотрим следующий сценарий: необходимо опубликовать таблицу без публикации функции, на которую ссылается эта таблица. Если функция не будет опубликована, то таблица не сможет быть создана на подписчике. При добавлении функции к публикации: задайте значение 1 для параметра @processing_order процедуры sp_addmergearticleи значение 2 для параметра @processing_order процедуры sp_changemergearticle, указав имя таблицы в параметре @article. Этот порядок обработки гарантирует создание функции на подписчике до создания таблицы, которая зависит от нее. Можно использовать различные числа для каждой статьи при условии, что число для функции меньше числа для таблицы.
Добавьте одну или несколько статей с помощью следующих методов:
После добавления статьи в публикацию необходимо создать новый моментальный снимок для публикации (и все секции, если это публикация слиянием с параметризованными фильтрами). Затем агент распространителя или агент слияния копирует схему и данные для новой статьи на подписчик (он не инициализирует заново всю публикацию).
Сведения о создании моментального снимка см. в разделе Create and Apply the Initial Snapshot.
Чтобы создать моментальный снимок публикации с параметризованными фильтрами, ознакомьтесь с этой статьей.
После создания моментального снимка синхронизируйте подписку, чтобы скопировать схему и данные для новой статьи.
Сведения о синхронизации принудительной подписки см. в разделе Synchronize a Push Subscription.
Сведения о синхронизации подписки по запросу см. в разделе Synchronize a Pull Subscription.
удаление статей
Статьи могут быть удалены из публикации в любое время, но следует принять во внимание следующие аспекты:
Удаление статьи из публикации не удаляет объект из базы данных публикации или соответствующий объект из базы данных подписки. При необходимости используйте объект> DROP<, чтобы удалить эти объекты. При удалении статьи, связанной с другими опубликованными статьями с помощью ограничений внешнего ключа, рекомендуется удалить таблицу на подписчике вручную или с помощью выполнения скрипта по запросу: укажите сценарий, содержащий соответствующие <инструкции DROP Object> . Дополнительные сведения см. в разделе "Выполнение скриптов во время синхронизации" (программирование репликации Transact-SQL).
Для публикации слиянием с уровнем совместимости 90RTM и выше возможно удаление статей в любое время, но требуется новый моментальный снимок. Кроме того:
Если статья является родительской статьей в фильтре соединения или в отношении логической записи, сначала нужно удалить отношения, и это требует повторной инициализации.
Если статья содержит последний параметризованный фильтр в публикации, подписки должны быть повторно инициализированы.
Для публикаций слиянием с уровнем совместимости ниже 90RTM статьи можно удалить без особых размышлений до первоначальной синхронизации подписок. Если статья удалена после синхронизации одной подписки или более, подписки должны быть удалены, заново созданы и синхронизированы.
Для публикации моментальных снимков или публикации транзакций статьи можно удалить без особых размышлений до создания подписок. Если статья удалена после создания одной или более подписок, подписки должны быть удалены, заново созданы и синхронизированы. Дополнительные сведения об удалении подписок см. в разделе "Подписка на публикации" и sp_dropsubscription (Transact-SQL). sp_dropsubscription позволяет удалить одну статью из подписки, а не всю подписку.
Удаление статьи из публикации включает удаление статьи и создание нового моментального снимка для публикации. Удаление статьи сделает текущий моментальный снимок недействительным; поэтому должен быть создан новый моментальный снимок.
- Чтобы удалить статью из публикации, см. статью "Добавление статей в публикацию" (SQL Server Management Studio) и удаление статьи.
После удаления статьи из публикации необходимо создать новый моментальный снимок для публикации (и все секции, если это публикация слиянием с параметризованными фильтрами).
Сведения о создании моментального снимка см. в разделе Create and Apply the Initial Snapshot.
Чтобы создать моментальный снимок публикации с параметризованными фильтрами, ознакомьтесь с этой статьей.
Как указано выше, в некоторых случаях удаление статьи требует, чтобы подписки были удалены, заново созданы и синхронизированы. Дополнительные сведения см. в статьях Подписка на публикации и Синхронизация данных.
Примечание.
SQL Server 2014 (12.x) с пакетом обновления 2 или выше и SQL Server 2016 (13.x) с пакетом обновления 1 или более поздней версии поддерживает удаление таблицы с помощью команды DROP TABLE DDL для статей, участвующих в репликации транзакций. Если DROP TABLE DDL поддерживается публикациями, операция DROP TABLE удалит таблицу из публикации и базы данных. Агент чтения журнала выполнит команду очистки для базы данных распространителя удаленной таблицы, а также очистку метаданных издателя. Если средство чтения журнала не обработало все записи журнала, ссылающиеся на удаленную таблицу, он пропустит новые команды, связанные с удаленной таблицей. Уже обработанные записи будут добавлены в базу данных распространителя. Они могут применяться в базе данных подписчика, если агент распространителя обработает их, прежде чем средство чтения журнала очистит устаревшие (удаленные) статьи. Параметр по умолчанию для всех публикаций репликации транзакций не поддерживает команду DLL DROP TABLE. Чтобы узнать больше об этом улучшении, ознакомьтесь со статьей базы знаний 3170123.