Можно ли изменить фильтр репликации SQL Server без предоставления полного снимка публикации? - PullRequest
3 голосов
/ 06 июля 2011

Меня постоянно просят поменять фильтры в транзакционных публикациях SQL Server моей компании, которые содержат несколько сотен таблиц и примерно 400 ГБ данных строк.повторно сделать снимок всей публикации и доставить ее подписчику - процесс, который занимает почти целый день.

Мой вопрос: возможно ли изменить фильтр репликации SQL Server без предоставления полного снимка публикации?1005 *

1 Ответ

10 голосов
/ 20 июля 2011

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

--Drop existing subscription:
EXEC sp_dropsubscription
                @publication='<pub_name',
                @article='<article_name',
                @subscriber='<sub_name',
                @destination_db='<db_name>',
                @ignore_distributor=0

--Drop the article from the publication:
EXEC sp_droparticle
                @publication='<pub_name',
                @article='<article_name',
                @ignore_distributor=0,
                @force_invalidate_snapshot=1

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

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

--Re-add the subscription to the article.
EXEC sp_addsubscription
                @publication = @publication='<pub_name',
                @article = @article='<article_name',
                @subscriber =  @subscriber='<sub_name',
                @destination_db='<db_name>',
                @sync_type =  'automatic ',
                @subscription_type = 'push',
                @update_mode =  'read only'

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

...