Как отключить публикацию и распространение (программирование репликации на языке Transact-SQL)

Публикацию и распространение можно отключить программно с помощью хранимых процедур репликации.

Отключение публикации и распространения

  1. Остановите все задания, связанные с репликацией. Список имен задач см. в подразделе «Безопасность агентов при работе с агентом SQL Server» раздела Модель безопасности агента репликации.

  2. На каждом подписчике в базе данных подписки выполните хранимую процедуру sp_removedbreplication, чтобы удалить объекты репликации из базы данных. Эта хранимая процедура не удаляет задания репликации на распространителе.

  3. На издателе в базе данных публикации выполните хранимую процедуру sp_removedbreplication, чтобы удалить объекты репликации из базы данных.

  4. Если издатель использует удаленный распространитель, выполните хранимую процедуру sp_dropdistributor.

  5. На распространителе выполните хранимую процедуру sp_dropdistpublisher. Эта хранимая процедура должна запускаться по разу для каждого издателя, зарегистрированного на распространителе.

  6. На распространителе выполните хранимую процедуру sp_dropdistributiondb, чтобы удалить базу данных распространителя. Эта хранимая процедура должна запускаться на распространителе, по одному разу для каждой базы данных распространителя. При этом также удаляются любые задания агента чтения очереди, связанные с базой данных распространителя.

  7. На распространителе выполните хранимую процедуру sp_dropdistributor, чтобы удалить с сервера обозначение распространителя.

    ПримечаниеПримечание

    Если все объекты публикации репликации и распространения не удалены перед выполнением хранимых процедур sp_dropdistpublisher и sp_dropdistributor, эти процедуры возвратят ошибку. Чтобы удалить при удалении издателя и распространителя все объекты, связанные с репликацией, в параметре @no_checks должно быть задано значение 1. Если издатель или распространитель находятся в автономном режиме или недоступны, в параметре @ignore_distributor можно задать значение 1, чтобы их можно было удалить; однако любые оставшиеся объекты публикации и распространения придется удалять вручную.

Пример

В этом примере сценария удаляются объекты репликации из базы данных подписки.

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

-- 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'AdventureWorks';

-- Disable the publication database.
USE [AdventureWorks]
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