如何从 SQL Server中手动删除复制
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从 SQL Server中手动删除复制相关的知识,希望对你有一定的参考价值。
步骤 1-删除所有订阅您可以运行 sp_helpsubscription 来确定有任何订阅已发布数据库中。
运行以下命令删除已发布数据库中的所有发布的所有订阅。 已发布并且已订阅的每个数据库中,必须运行此命令。 运行此命令还会删除与断开的订阅关联的该通讯组任务。
sp_dropsubscription 'all', 'all', 'all'
请注意 sp_dropsubscriptions 将只正确才能都满足以下条件:
有是分发数据库安装。
发布服务器具有所有的订阅服务器的正确的远程服务器信息。 配置复制时,将自动定义远程服务器的信息。 可以通过运行 sp _ helpserver 验证远程服务器信息。
步骤 2-删除所有文章和发布
您可以运行 sp_helppublication 来确定有任何出版物已发布数据库中。
您可以运行"Select * 从 sysarticles"来确定是否有任何文章在发布数据库中。
运行以下命令删除所有文章和已发布数据库中的订阅。 已发布并且已发布的每个数据库中,必须运行此命令。 运行此命令将同时删除与断开的发布,同步任务。
sp_droppublication 'all'步骤 3-清除事务日志的复制任何"非"
无法截断事务日志,只要有任何不分发的复制的事务。 一个"非复制的事务为已标记为已发布的数据库事务日志中复制,但已不被"分发"的日志读取器任务的交易记录。
您可以看到通过运行以下命令是否有任何"非复制的事务,已发布的数据库中:
dbcc opentran(<published_database_name>) with tableresults如果该数据库了在某个点必须复制的事务,上面的命令将返回最早的分布式的行 ID ("REPL_OLD_DIST_RID") 和最早的非分布式的行 ID ("REPL_OLD_NONDIST_RID")。 如果数据库不具有任何复制的事务,并且有没有打开的事务,上面的命令将返回 0 的行。
如果上面的命令不会返回最旧分布式和最早非-分布式行 ID,和如果这些行 ID 不相同,您有或多个 undistributed 复制该数据库中的事务。 如果行 ID 相同,您没有任何非复制的事务在数据库中。 详细信息,请参阅 Transact-SQL 参考书中的 DBCC 语句 (英文)。
如果非复制的事务请运行下面的命令,将标记为"分配"的所有复制的事务,以便可以截断日志:
sp_repldone 0, 0, null, 0, 0, 1 参考技术A 您可以通过使用系统存储过程和其它事务处理 SQL 语句手动删除复制。要完全删除复制,请执行以下步骤:
除去所有订阅配置为 thereplication。
除去所有的发布配置为 thereplication。
除去分发服务器被配置为 thereplication。本回答被提问者和网友采纳
SQL Server删除distribution数据库
在数据库服务器删除复制(发布订阅)后,如何删除掉数据库distribution呢?如果你通过SSMS工具去删除数据库distribution,你会发现根本没有删除选项。 下面介绍一下删除distribution的步骤
步骤1: 查看相关订阅服务器的信息,如果还存在对应的订阅服务器,从注册的服务器中删除订阅服务器名称
exec sp_helpsubscriberinfo ;
go
exec sp_dropsubscriber \'SubscriberName\';
go
步骤2: 查看分发服务器的发布服务器的属性
exec sp_helpdistpublisher;
步骤3: 删除分发发布服务器
exec sp_dropdistpublisher @publisher = \'PublisherName\'
步骤4: 使用sp_dropdistributiondb删除数据库distribution
use master;
go
exec sp_dropdistributiondb @database = N\'distribution\'
go
use master;
go
exec sp_dropdistributor @no_checks = 1, @ignore_distributor = 1
go
注意事项:
1:错误信息“Could not drop the distribution database \'distribution\'. This distributor database is associated with a Publisher.”
exec sp_dropdistributiondb @database = N\'distribution\'
GO
消息 14120,级别 16,状态 1,过程 sp_dropdistributiondb,第 85 行
Could not drop the distribution database \'distribution\'. This distributor database is associated with a Publisher.
出现这个错误,是因为必须先删除对应的分发发布服务器,否则就会出现下面错误。
2:错误信息“Cannot drop the distribution database \'distribution\' because it is currently in use”
exec sp_dropdistributiondb @database = N\'distribution\'
go
消息 21122,级别 16,状态 1,过程 sp_dropdistributiondb,第 124 行
Cannot drop the distribution database \'distribution\' because it is currently in use.
出现上面情况,是因为会话窗口使用的数据库是distribution,你可以指定会话窗口的数据库为master或使用下面语句即可解决问题。
use master;
go
exec sp_dropdistributiondb @database = N\'distribution\'
go
另外由于某些原因,导致无法使用sp_dropdistributiondb删除distribution数据库。此时可以使用下面方式强制删除数据库distribution。
use master
go
alter database distribution set offline;
go
drop database distribution;
或
use master;
go
alter database distribution set single_user with rollback immediate
go
drop database distribution;
go
以上是关于如何从 SQL Server中手动删除复制的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SQL Server 触发器中复制插入、更新、删除的行
如何根据 SQL Server 中的某个列删除重复项? [复制]