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 语句。本文包含有关可在此过程中使用的系统存储过程的信息。 手动删除一个复制通过使用系统存储过程和其它 TRANSACT-SQL 语句,您可以手动删除复制。若要完全删除复制,请按照下列步骤操作:
注意本文内下文中列出的每种类型的复制系统存储过程。使用适当的存储的过程具体取决于您想要删除的复制类型。 除去订阅若要从 SQL Server 实例除去订阅,您可以使用下面的存储的过程和相应的参数:
除去快照订阅要除去快照发布的所有文章的强制订阅,请在发布服务器上运行以下脚本: USE <Publication database name> GO EXEC sp_dropsubscription @publication = N'<Publication name>', @article = N'all', @subscriber = 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' 要删除请求订阅的事务性发布的所有项目,请按照下列步骤操作:
除去合并订阅若要删除强制订阅,请在发布服务器上运行以下脚本: 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' 要删除请求订阅,请按照下列步骤操作:
删除该发布删除所有订阅一个发布的订阅后,您可以在出版物中删除。删除发布数据库在发布后,您必须将发布数据库的复制数据库选项设置为 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_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' 除去分发服务器您除去所有订阅和发布后,您可以删除相关的分发服务器。但是,除去分发服务器之前,必须从发布服务器中删除订阅服务器标识。这样做使用下面的存储的过程:
从发布服务器中删除订阅服务器标识,请在发布服务器上运行以下脚本: USE master GO EXEC sp_dropsubscriber @subscriber = N'<Subscriber server name>', @reserved = N'drop_subscriptions' 去分发服务器分发服务器上运行以下脚本: USE master GO EXEC sp_dropdistributor @no_checks = 1 使用存储的过程当您删除复制时,您还可以使用下面的存储的过程:
|