Como desabilitar a publicação e a distribuição (Programação Transact-SQL de replicação)

A publicação e a distribuição podem ser desabilitadas programaticamente usando procedimentos armazenados de replicação.

Para desabilitar a publicação e a distribuição

  1. Pare todos os trabalhos relacionados a replicação. Para uma relação de nomes de trabalho, consulte a seção "Segurança do Agente sob o SQL Server Agent" do Modelo de Segurança do Agente de Replicação.

  2. Em cada Assinante do banco de dados de assinatura, execute sp_removedbreplication para remover objetos de replicação do banco de dados. Esse procedimento armazenado não removerá trabalhos de replicação no Distribuidor.

  3. No Publicador do banco de dados de publicação, execute sp_removedbreplication para remover objetos de replicação do banco de dados.

  4. Se o Publicador usar um Distribuidor remoto, execute sp_dropdistributor.

  5. No Distribuidor, execute sp_dropdistpublisher. Esse procedimento armazenado deverá ser executado uma vez para cada Publicador registrado no Distribuidor.

  6. No Distribuidor, execute sp_dropdistributiondb para excluir o banco de dados de distribuição. Esse procedimento armazenado deverá ser executado uma vez para cada banco de dados de distribuição no Distribuidor. Isto também removerá qualquer trabalho do Queue Reader Agent associado com o banco de dados de distribuição.

  7. No Distribuidor, execute sp_dropdistributor para remover a designação Distribuidor do servidor.

    ObservaçãoObservação

    Se todos os objetos de publicação e distribuição não forem descartados antes que você execute sp_dropdistpublisher e sp_dropdistributor, estes procedimentos retornarão com um erro. Para descartar todos os objetos relacionados com replicação quando um Publicador ou um Distribuidor for descartado, o parâmetro @no_checks deverá ser definido como 1. Se um Publicador ou Distribuidor estiver offline ou não acessível, o parâmetro @ignore_distributor poderá ser definido como 1 para que possa ser descartado; porém, qualquer objeto de publicação ou distribuição remanescente deverá ser removido manualmente.

Exemplo

Este script de exemplo remove objetos de replicação do banco de dados de assinatura.

-- 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

Esse script de exemplo desabilita a publicação e a distribuição em um servidor que é um Publicador e Distribuidor e descarta o banco de dados de distribuição.

-- 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