通过


在 SQL Server 中手动删除复制

本文介绍如何在 SQL Server 中手动删除复制。

原始产品版本:SQL Server
原始 KB 数: 324401

总结

本文介绍如何从运行 Microsoft SQL Server 的计算机中删除复制。 若要删除复制,必须删除为复制配置的订阅、发布和分发服务器。 可以通过运行 SQL Server Enterprise Manager 或 SQL Server Management Studio 生成的 Transact-SQL 脚本来删除复制。 但是,如果无法生成 Transact-SQL 脚本来删除复制,则可以使用系统存储过程和其他 Transact-SQL 语句手动删除复制。 本文包含有关可在此过程中使用的系统存储过程的信息。

注意

有关本文中提到的系统存储过程的详细信息,请参阅 SQL Server 联机丛书。

手动删除复制

可以使用系统存储过程和其他 Transact-SQL 语句手动删除复制。 若要完全删除复制,请执行以下步骤:

  1. 删除为复制配置的所有订阅。
  2. 删除为复制配置的所有发布。
  3. 删除为复制配置的分发服务器。

注意

本文后面列出了每种复制类型的系统存储过程。 根据要删除的复制类型,使用适当的存储过程。

删除订阅

若要从 SQL Server 实例中删除订阅,可以使用以下存储过程和相应的参数:

  • sp_dropsubscription :可以使用 sp_dropsubscription 系统存储过程在发布服务器上删除对特定项目、发布或订阅集的订阅。 必须在发布服务器上对发布数据库运行存储过程。

  • sp_droppullsubscription :可以使用 sp_droppullsubscription 系统存储过程在订阅服务器的当前数据库中删除订阅。 必须在请求订阅数据库上的订阅服务器上运行存储过程。

  • sp_dropmergesubscription:可以使用sp_dropmergesubscription系统存储过程删除合并发布的订阅以及与合并发布关联的合并代理。 必须在发布服务器上对发布数据库运行存储过程。

  • sp_dropmergepullsubscription :可以使用 sp_dropmergepullsubscription 系统存储过程删除合并请求订阅。 必须在请求订阅数据库上的订阅服务器上运行存储过程。

删除快照订阅

若要删除快照发布的所有文章的推送订阅,请在发布服务器上运行以下脚本:

USE < **Publication database name** >
GO
EXEC sp_dropsubscription @publication = N'<Publication name>', @article = N'all', @subscriber = N'all', @destination_db = N'all'

若要将拉取快照订阅拖放到快照发布的所有项目,请执行以下步骤:

  1. 在订阅服务器上运行以下 SQL 脚本:

    USE < **Subscription database name** >
    GO
    EXEC sp_droppullsubscription @publisher = N'<Publisher server name>', @publisher_db = N'<Publication database name>', @publication = N'<Publication name>'
    
  2. 在发布服务器上运行以下脚本:

    USE < **Publication database name** >
    GO
    EXEC sp_dropsubscription @publication=N'<Publication name>', @subscriber = N'<Subscriber server name>', @article = N'all', @destination_db = N'all'
    

删除事务订阅

若要删除事务发布的所有项目的推送订阅,请在发布服务器上运行以下脚本:

USE < **Publication database name** >
GO
EXEC sp_dropsubscription @publication = N'<Publication name>', @article = N'all', @subscriber = N'all', @destination_db = N'all'

若要删除事务发布的所有项目的请求订阅,请执行以下步骤:

  1. 在订阅服务器上运行以下脚本:

    USE < **Subscription database name** >
    GO
    EXEC sp_droppullsubscription @publisher = N'<Publisher server name>', @publisher_db = N'<Publisher database name>', @publication = N'<Publication name>'
    
  2. 在发布服务器上运行以下脚本:

    USE < **Publication database name** >
    GO
    EXEC sp_dropsubscription @publication =N'<Publication name>', @subscriber = N'<Subscriber server name>', @article = N'all', @destination_db = N'<Destination database name>'
    

删除合并订阅

若要删除推送订阅,请在发布服务器上运行以下脚本:

USE < **Publication database name** >
GO
EXEC sp_dropmergesubscription @publication = N'<Publication name>', @subscriber = N'<Publisher server name>', @subscriber_db = N'<Subscription database name>', @subscription_type = N'push'

若要删除请求订阅,请执行以下步骤:

  1. 在订阅服务器上运行以下脚本:

    USE < **Subscription database name** >
    GO
    EXEC sp_dropmergepullsubscription @publication = N'<Publication name>', @publisher = N'<Publisher server name>', @publisher_db = N'<Publisher database name>'
    
  2. 在发布服务器上运行以下脚本:

    USE < **Publication database name** >
    GO
    EXEC sp_dropmergesubscription @subscription_type = N'pull', @publication = N'<Publication name>', @subscriber = N'<Subscriber server name>', @subscriber_db = N'<Subscription database name>'
    

删除发布

删除订阅发布的所有订阅后,可以删除发布。 删除发布数据库中的发布后,必须将发布数据库的复制数据库选项设置为 false。 若要删除发布,可以使用以下系统存储过程:

  • sp_droppublication:可以使用 sp_droppublication 系统存储过程删除与发布关联的发布和项目。 必须在发布服务器上对发布数据库运行存储过程。
  • sp_dropmergepublication:可以使用sp_dropmergepublication系统存储过程删除与合并发布关联的合并发布和快照代理。 也会删除与发布关联的项目。 必须在发布服务器上对发布数据库运行存储过程。
  • sp_replicationdboption:可以使用 sp_replicationdboption 系统存储过程为当前数据库设置复制数据库选项。 必须在发布服务器服务器上运行存储过程。

若要删除快照发布,请在发布服务器上运行以下脚本:

USE < **Publication database name** >
GO
EXEC sp_droppublication @publication = N'<Publication name>'

USE master
GO
exec sp_replicationdboption @dbname = N'<Publication database name>', @optname = N'publish', @value = N'false'

若要删除事务发布,请在发布服务器上运行以下脚本:

USE < **Publication database name** >
GO
EXEC sp_droppublication @publication = N'<Publication name>'

USE master
GO
EXEC sp_replicationdboption @dbname = N'<Publication database name>', @optname = N'publish', @value = N'false'

若要删除合并发布,请在发布服务器上运行以下脚本:

USE < **Publication database name** >
GO
EXEC sp_dropmergepublication @publication = N'<Publication name>'

USE master
GO
EXEC sp_replicationdboption @dbname = N'<Publication database name>', @optname = N'merge publish', @value = N'false'

删除分发服务器

删除所有订阅和发布后,可以删除相关的分发服务器。 但是,在删除分发服务器之前,必须从发布服务器中删除订阅者指定。 为此,请使用以下存储过程:

  • sp_dropsubscriber:可以使用 sp_dropsubscriber 系统存储过程从已注册的服务器中删除订阅者指定。 存储过程删除订阅服务器的注册表项。 存储过程在发布服务器上对发布数据库运行。

  • sp_dropdistributor:可以使用 sp_dropdistributor 系统存储过程删除分发服务器。 存储过程在分发服务器上运行。 若要从发布服务器中删除订阅服务器指定,请在发布服务器上运行以下脚本:

    USE master
    GO
    EXEC sp_dropsubscriber @subscriber = N'<Subscriber server name>', @reserved = N'drop_subscriptions'
    

    若要删除分发服务器,请在分发服务器上运行以下脚本:

    USE master
    GO
    EXEC sp_dropdistributor @no_checks = 1
    

使用存储过程

删除复制时,还可以使用以下存储过程:

  • sp_removedbreplication:可以使用 sp_removedbreplication 系统存储过程从数据库中删除所有复制对象,而无需更新分发服务器上的数据。 必须在发布服务器上或在订阅数据库上的订阅服务器上运行存储过程。 下面是此存储过程的语法:

    sp_removedbreplication '<Database name>'
    
  • sp_droparticle:可以使用 sp_droparticle 系统存储过程从快照发布或事务发布中删除项目。 如果已发布项目的一个或多个订阅仍然存在,则无法删除项目。 必须在发布服务器上对发布数据库运行存储过程。 下面是此存储过程的语法:

    sp_droparticle @publication = N'<Publication name>', @article = N'<Article name>', @force_invalidate_snapshot = 1
    

参考

有关详细信息,请参阅 SQL Server 联机丛书的下列主题: