2014年1月11日

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

posted @ 2014-01-11 16:10 凤武九天 阅读(4110) 评论(0) 推荐(0)

SqlServer系统各个数据库的作用

摘要: SqlServer系统各个数据库的作用MasterMaster数据库保存有放在SQLSERVER实体上的所有数据库,它还是将引擎固定起来的粘合剂。由于如果不使用主数据库,SQLSERVER就不能启动,所以你必须要小心地管理好这个数据库。因此,对这个数据库进行常规备份是十分必要的。这个数据库包括了诸如系统登录、配置设置、已连接的SERVER等信息,以及用于该实体的其他系统和用户数据库的一般信息。主数据库还存有扩展存储过程,它能够访问外部进程,从而让你能够与磁盘子系统和系统API调用等特性交互。这些过程一般都用像C++这样的现代编程语言。如果不幸碰到系统崩溃而必须恢复主数据库的情况,你可以参看MC 阅读全文

posted @ 2014-01-11 15:51 凤武九天 阅读(448) 评论(0) 推荐(0)

2013年12月11日

转]键码表

摘要: 转自 http://mhycoe.com/?p=756字母和数字键的键码值(keyCode)按键键码按键键码按键键码按键键码A65J74S83149B66K75T84250C67L76U85351D68M77V86452E69N78W87553F70O79X88654G71P80Y89755H72Q81Z90856I73R82048957数字键盘上的键的键码值(keyCode)功能键键码值(keyCode)按键键码按键键码按键键码按键键码0968104F1112F71181979105F2113F8119298*106F3114F9120399+107F4115F101214100Enter1 阅读全文

posted @ 2013-12-11 10:22 凤武九天 阅读(280) 评论(0) 推荐(0)

2013年12月6日

C#中Wizard控件的使用

摘要: Wizard控件的使用: Wizard控件使用多个步骤来描绘用户的输入信息,该控件内的每个步骤 均会给一个StepType。可以在当步骤到Complete时,对所有的数据进行处理。 事件:需要隐藏信息的时候,可以在中间步骤中使用WizardStepChanged事件,其它的事件如点击完成、取消、下一步和上一步的时候的事件等。 TemplateWizardStep,提供一个允许用户自定义模板生成步骤的方法。对它的访问,不能通过像其它步骤一样的直接访问方式,二是要通过它的模板ID来访问。所以,如果在Wizard中的步骤采用这个方式,访问数据的时候,要注意。 下边看看一般的做法:拖控件到设计视图,点 阅读全文

posted @ 2013-12-06 10:17 凤武九天 阅读(1613) 评论(0) 推荐(0)

在DLL文件中加入版本信息、描述信息

摘要: 方法一:在VC中选择菜单"Insert/Resource",在其中的对话框中选"Version"加入一个版本信息资源,然后保存为与工程同名的.rc文件,再编译出来就有版本信息了方法二:把以下的文件存成.rc文件加入到工程中,编译就行了:#include #define VER_DEBUG 0#define VER_PRERELEASE 0#define VER_FILEFLAGSMASK VS_FFI_FILEFLAGSMASK#define VER_FILEOS VOS_NT_WINDOWS32#define VER_FILEFLAGS (VER_PR 阅读全文

posted @ 2013-12-06 09:41 凤武九天 阅读(1060) 评论(0) 推荐(0)

2013年12月5日

获取DLL文件版本号的三种方法

摘要: 方法一:string version = System.Reflection.Assembly.LoadFrom(strFilePath).GetName().Version.ToString();方法二:Version ApplicationVersion = new Version(Application.ProductVersion);string version = ApplicationVersion.Major.ToString();//获取主版本号方法三:System.Diagnostics.FileVersionInfo info = System.Diagnostics.Fi 阅读全文

posted @ 2013-12-05 13:55 凤武九天 阅读(2636) 评论(0) 推荐(1)

2013年12月4日

如何写批处理文件

摘要: 1.Strong-name verfication:(Sn.)http://www.cnblogs.com/winston/archive/2008/04/23/1026489.html主要是用来解决DLL Hell的问题。2. echo直接用echo表示显示此命令后的字符echo off表示在此语句后所有运行的命令都不显示命令行本身@与echo off相象,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行)。3.call调用另一个批处理文件(如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令)。4. Pa 阅读全文

posted @ 2013-12-04 11:03 凤武九天 阅读(791) 评论(0) 推荐(0)

2013年12月3日

C#中获取程序集版本号的方法

摘要: 我的方法:string version = Assembly.GetExecutingAssembly().GetName().Version.ToString();方法一:public void GetFileVersion() {FileVersionInfo myFileVersionInfo = FileVersionInfo.GetVersionInfo(Path路径字符串);string AssmblyVersion=myFileVersionInfo.FileVersion;}方法二:[assembly: AssemblyTitle("")][assembly 阅读全文

posted @ 2013-12-03 16:55 凤武九天 阅读(1428) 评论(0) 推荐(0)

< 2025年6月 >
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 1 2 3 4 5
6 7 8 9 10 11 12

导航

统计

点击右上角即可分享
微信分享提示