SQL SERVER删除复制数据库的发布与订阅的方法

 

    最近遇到一个问题,在测试环境中恢复从正式数据库服务器上备份下来的bak文件后,正式环境里数据库复制的发布、订阅也被带进来了,结果恢复的数据库无法更改表结构,直接删除这些错误的发布会提示订阅没有清理,但删除订阅时又提示订阅服务器不存在。

   master执行语句:sp_removedbreplication ‘复制的数据库名’。刷新本地发布后该数据库不应存在的复制就消失了。

   sp_removedbreplication 系统存储过程而不更新在分发服务器上的将数据从数据库中删除所有复制对象。 必须在发布数据库上的发布服务器或订阅服务器的订阅数据库上运行存储的过程。

-----------------------------------------------------------------------------------------------------------------------------------

本文介绍如何从 Microsoft SQL Server 2000 或 Microsoft SQL Server 2005 运行的计算机中删除复制。若要去一个复制中,您必须除去订阅、 在的发布和分发服务器被配置为复制的。您可以通过运行由 SQL Server 企业管理器或 $ SQL Server 管理 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. 在订阅服务器上运行以下 SQLb 脚本:
    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删除复制数据库的发布与订阅的方法

上一篇:【转】频点CTO张成:基于Cocos2d的MMORPG开发经验


下一篇:SQLite中命令行程序(CLP)的使用