如何删除发布(复制 Transact-SQL 编程)

可以使用复制存储过程以编程的方式删除发布。 使用的存储过程取决于要删除的发布的类型。

注意注意

删除发布并不会删除发布数据库中的已发布对象,也不会删除订阅数据库中的相应对象。 如有必要,使用 DROP <object> 命令手动删除这些对象。

删除快照发布或事务发布

  1. 执行以下操作之一:

    • 若要删除单个发布,请在发布服务器上,对发布数据库执行 sp_droppublication

    • 若要删除发布数据库中的所有发布并删除其中的所有复制对象,请在发布服务器上执行 sp_removedbreplication。 为 @type 指定 tran 值。 (可选)如果无法访问分发服务器,或者数据库的状态为可疑或脱机,则将 @force 的值指定为 1。 (可选)如果未对发布数据库执行 sp_removedbreplication,则为 @dbname 指定数据库的名称。

      注意注意

      @force 的值指定为 1 可能会使与复制相关的发布对象保留在数据库中。

  2. (可选)如果此数据库中没有任何其他发布,则执行sp_replicationdboption (Transact-SQL)操作以禁用使用快照复制或事务复制的当前数据库的发布。

  3. (可选)在订阅服务器上,对订阅数据库执行 sp_subscription_cleanup 以删除订阅数据库中的任何剩余复制元数据。

删除合并发布

  1. 执行以下操作之一:

    • 若要删除单个发布,请在发布服务器上,对发布数据库执行 sp_dropmergepublication (Transact-SQL)

    • 若要删除发布数据库中的所有发布并删除其中的所有复制对象,请在发布服务器上执行 sp_removedbreplication。 为 @type 指定 merge 值。 (可选)如果无法访问分发服务器,或者数据库的状态为可疑或脱机,则将 @force 的值指定为 1。 (可选)如果未对发布数据库执行 sp_removedbreplication,则为 @dbname 指定数据库的名称。

      注意注意

      @force 的值指定为 1 可能会使与复制相关的发布对象保留在数据库中。

  2. (可选)如果此数据库中没有任何其他发布,则执行 sp_replicationdboption (Transact-SQL) 以禁用使用合并复制的当前数据库的发布。

  3. (可选)在订阅服务器上,对订阅数据库执行 sp_mergesubscription_cleanup (Transact-SQL) 以删除订阅数据库中的任何剩余复制元数据。

示例

该示例演示如何删除事务发布并禁用数据库的事务发布。 该示例假定以前删除了所有订阅。 有关详细信息,请参阅如何删除请求订阅(复制 Transact-SQL 编程)如何删除推送订阅(复制 Transact-SQL 编程)

DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
SET @publicationDB = N'AdventureWorks2008R2'; 
SET @publication = N'AdvWorksProductTran'; 

-- Remove a transactional publication.
USE [AdventureWorks2008R2]
EXEC sp_droppublication @publication = @publication;

-- Remove replication objects from the database.
USE [master]
EXEC sp_replicationdboption 
  @dbname = @publicationDB, 
  @optname = N'publish', 
  @value = N'false';
GO

该示例演示如何删除合并发布并禁用数据库的合并发布。 该示例假定以前删除了所有订阅。 有关详细信息,请参阅如何删除请求订阅(复制 Transact-SQL 编程)如何删除推送订阅(复制 Transact-SQL 编程)

DECLARE @publication AS sysname
DECLARE @publicationDB    AS sysname
SET @publication = N'AdvWorksSalesOrdersMerge' 
SET @publicationDB = N'AdventureWorks2008R2'

-- Remove the merge publication.
USE [AdventureWorks2008R2]
EXEC sp_dropmergepublication @publication = @publication;

-- Remove replication objects from the database.
USE master
EXEC sp_replicationdboption 
  @dbname = @publicationDB, 
  @optname = N'merge publish', 
  @value = N'false'
GO