我经常被要求更改我的公司 SQL Server Transactional Publications 上的过滤器,其中包含数百个表和大约 400GB 的行数据。
每次我需要更改过滤器时,我都必须完全重新拍摄整个出版物的快照并将其交付给订阅者,这个过程几乎需要一整天的时间才能完成。
我的问题:是否可以在不提供整个发布快照的情况下更改 SQL Server 复制过滤器?
我经常被要求更改我的公司 SQL Server Transactional Publications 上的过滤器,其中包含数百个表和大约 400GB 的行数据。
每次我需要更改过滤器时,我都必须完全重新拍摄整个出版物的快照并将其交付给订阅者,这个过程几乎需要一整天的时间才能完成。
我的问题:是否可以在不提供整个发布快照的情况下更改 SQL Server 复制过滤器?
您必须从发布中删除表(文章)并使用新过滤器重新添加它。诀窍是,如果您在从发布中删除文章之前删除对文章的订阅,则不需要为所有文章提供完整的快照,而只需为单个表(并且它是新过滤器)。
--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
现在,将文章添加回订阅的最简单方法是通过复制发布 GUI,您可以添加文章,添加过滤器,然后单击确定。当您运行快照作业时,它只会为单个表生成快照。这称为迷你快照。
如果您想手动将文章及其过滤器重新添加到发布中,那么您需要执行以下操作以将其重新添加到订阅中。
--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'
--您现在需要手动将任何新列添加到订阅者的目标表中,重新运行将运行迷你快照的快照代理......然后启动分发器。