如何禁用发布和分发(复制 Transact-SQL 编程)

可以使用复制存储过程以编程的方式禁用发布和分发。

禁用发布和分发

  1. 停止所有与复制相关的作业。 有关作业名称列表,请参阅复制代理安全模式的“SQL Server 代理下的代理安全性”部分。

  2. 在每个订阅服务器上,对订阅数据库执行 sp_removedbreplication 以从该数据库删除复制对象。 此存储过程不会删除分发服务器上的复制作业。

  3. 在发布服务器上,对发布数据库执行 sp_removedbreplication 以从该数据库删除复制对象。

  4. 如果发布服务器使用远程分发服务器,则执行 sp_dropdistributor

  5. 在分发服务器上,执行 sp_dropdistpublisher。 应为在分发服务器上注册的每个发布服务器运行一次此存储过程。

  6. 在分发服务器上,执行 sp_dropdistributiondb 以删除分发数据库。 应为在分发服务器上注册的每个分发数据库运行一次此存储过程。 此操作还将删除与分发数据库关联的任何队列读取器代理作业。

  7. 在分发服务器上,执行 sp_dropdistributor 以从该服务器删除分发服务器指定。

    注意注意

    如果在您执行 sp_dropdistpublishersp_dropdistributor 之前并未删除所有复制发布和分发对象,这些过程将返回错误。 若要在删除发布服务器或分发服务器时删除所有与复制相关的对象,@no_checks 参数必须设置为 1。如果发布服务器或分发服务器脱机或无法访问,则可以将 @ignore_distributor 参数设置为 1,以便能够删除它们;不过,必须手动删除任何保留的发布和分发对象。

示例

此示例脚本从订阅数据库删除复制对象。

-- Remove replication objects from the subscription database on MYSUB.
DECLARE @subscriptionDB AS sysname
SET @subscriptionDB = N'AdventureWorks2008R2Replica'

-- Remove replication objects from a subscription database (if necessary).
USE master
EXEC sp_removedbreplication @subscriptionDB
GO

此示例脚本在既是发布服务器又是分发服务器的服务器上禁用发布和分发,并删除分发数据库。

-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). For information about how to use scripting variables  
-- on the command line and in SQL Server Management Studio, see the 
-- "Executing Replication Scripts" section in the topic
-- "Programming Replication Using System Stored Procedures".

-- Disable publishing and distribution.
DECLARE @distributionDB AS sysname;
DECLARE @publisher AS sysname;
DECLARE @publicationDB as sysname;
SET @distributionDB = N'distribution';
SET @publisher = $(DistPubServer);
SET @publicationDB = N'AdventureWorks2008R2';

-- Disable the publication database.
USE [AdventureWorks2008R2]
EXEC sp_removedbreplication @publicationDB;

-- Remove the registration of the local Publisher at the Distributor.
USE master
EXEC sp_dropdistpublisher @publisher;

-- Delete the distribution database.
EXEC sp_dropdistributiondb @distributionDB;

-- Remove the local server as a Distributor.
EXEC sp_dropdistributor;
GO