从发布数据库sys.sp_droparticle和sp_dropsubscription

时间:2018-09-18 22:00:05

标签: sql-server tsql replication database-replication merge-replication

SQL Server Admin不是我的强项。所以请在我解释的同时忍耐
SQL Server 2012 cluster使用第三方Change data capture ( CDC )实用工具参与CDC的工作。为了使其正常工作,需要打开复制,而没有复制CDC将无法工作。 CDC在数据库Db1中从SQL Server中抽出2000多个奇数表。从中我们发现,大约200多个表经历了truncateload而不是增量。因此,我们从CDC列表中删除了这些文件,但是由于复制是在数据库级别上启用的,因此我们还需要从publication database中删除这些文件,这样,在此异常列表中发生的截断就不需要关闭数据库级别的replication截断到这些表,replication可以共存。众所周知,要发生截断,我们需要关闭复制。代码处于生产过程中,因此用truncate代替delete并不是除了十亿行表的删除,这将是一个昂贵的选择,而且非常耗时)
以上是要求。因此,如果可以构思出更好的解决方案,请告诉我
我尝试过的事情:

EXEC sys.sp_droparticle @publication = 'pub', @article = 'art', @force_invalidate_snapshot = 1

我遇到错误

Msg 14013, Level 16, State 1, Procedure sp_MSrepl_droparticle, Line 104 [Batch Start Line 2]
This database is not enabled for publication.

另一个SP

DECLARE @subscriber AS sysname;

EXEC sp_dropsubscription @publication = 'AR_PUBLICATION_00010', @article = 'BPA_BRGR_RUL_GRP_R' ,@subscriber=@subscriber

Msg 14013, Level 16, State 1, Procedure sp_MSrepl_dropsubscription, Line 55 [Batch Start Line 1]
This database is not enabled for publication.


但是,使用GUI可以取消选中该publication中不需要的表。 (右键单击发布->属性->文章->选中/取消选中要排除的所有内容)。我没有任何subscription,只有出版物。
无论我在上面通过GUI运行的任何代码,我都可以定义。通过T-SQL运行,但是我不知道运行的是什么代码?如何使用脚本方法完成此任务。我有200多个表格要处理,并且不按1取消选择em

1 个答案:

答案 0 :(得分:1)

  

无论我在上面通过GUI运行的任何代码,我都可以定义。通过T-SQL运行,但是我不知道运行的是什么代码?如何使用脚本方法完成此任务。

SSMS没有特殊的API。它所做的一切,都是通过TSQL完成的。因此,请使用SQL事件探查器观察SSMS的功能并捕获脚本。