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

Публикации могут быть удалены программно, с помощью хранимых процедур репликации. Какие именно хранимые процедуры для этого применяются, зависит от типа удаляемой публикации.

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

При удалении публикации опубликованные объекты базы данных публикации и связанные с ними объекты базы данных подписки не удаляются. При необходимости их необходимо удалить вручную, при помощи инструкции DROP <object>.

Удаление публикации моментальных снимков или транзакций

  1. Выполните одно из следующих действий.

    • Для удаления отдельной публикации в базе данных публикации на издателе выполните инструкцию sp_droppublication.

    • Чтобы удалить все публикации и удалить все объекты репликации из опубликованной базы данных, выполните процедуру sp_removedbreplication на издателе. Укажите значение tran в параметре @type. Если распространитель недоступен или база данных находится в подозрительном состоянии или в автономном режиме, укажите значение 1 в параметре @force (необязательно). Укажите имя базы данных в параметре @dbname, если процедура sp_removedbreplication не выполнялась в базе данных публикации (необязательно).

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

      Если задать значение 1 в параметре @force, в базе данных могут остаться объекты публикации, связанные с репликацией.

  2. Если база данных содержит только одну публикацию, то для того, чтобы отключить публикацию текущей базы данных в репликации моментальных снимков или транзакции, необходимо выполнить хранимую процедуру sp_replicationdboption (Transact-SQL) (необязательно).

  3. (Необязательно) Чтобы удалить все метаданные репликации, оставшиеся в базе данных подписки, на подписчике в базе данных публикации выполните хранимую процедуру sp_subscription_cleanup.

Удаление публикации слиянием

  1. Выполните одно из следующих действий.

    • Чтобы удалить отдельную публикацию, в базе данных публикации на издателе выполните инструкцию sp_dropmergepublication (Transact-SQL).

    • Чтобы удалить все публикации и удалить все объекты репликации из опубликованной базы данных, выполните процедуру sp_removedbreplication на издателе. Укажите значение merge в параметре @type. Если распространитель недоступен или база данных находится в подозрительном состоянии или в автономном режиме, укажите значение 1 в параметре @force (необязательно). Укажите имя базы данных в параметре @dbname, если процедура sp_removedbreplication не выполнялась в базе данных публикации (необязательно).

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

      Если задать значение 1 в параметре @force, в базе данных могут остаться объекты публикации, связанные с репликацией.

  2. Если база данных содержит только одну публикацию, то для того чтобы отключить публикацию текущей базы данных в репликации слиянием, необходимо выполнить хранимую процедуру sp_replicationdboption (Transact-SQL) (необязательно).

  3. (Необязательно) Чтобы удалить все метаданные репликации, оставшиеся в базе данных подписки, на подписчике в базе данных публикации выполните хранимую процедуру sp_mergesubscription_cleanup (Transact-SQL).

Пример

В следующем примере показано удаление публикации транзакций и отключение функции публикации транзакций для базы данных. В этом примере предполагается, что все подписки были удалены ранее. Дополнительные сведения см. в разделе Как удалить подписку по запросу (программирование репликации на языке Transact-SQL) или Как удалить принудительную подписку (программирование репликации на языке Transact-SQL).

DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
SET @publicationDB = N'AdventureWorks2008R2'; 
SET @publication = N'AdvWorksProductTran'; 

-- Remove a transactional publication.
USE [AdventureWorks2008R2]
EXEC sp_droppublication @publication = @publication;

-- Remove replication objects from the database.
USE [master]
EXEC sp_replicationdboption 
  @dbname = @publicationDB, 
  @optname = N'publish', 
  @value = N'false';
GO

В следующем примере показано удаление публикации слиянием и отключение функции публикации слиянием для базы данных. В этом примере предполагается, что все подписки были удалены ранее. Дополнительные сведения см. в разделе Как удалить подписку по запросу (программирование репликации на языке Transact-SQL) или Как удалить принудительную подписку (программирование репликации на языке Transact-SQL).

DECLARE @publication AS sysname
DECLARE @publicationDB    AS sysname
SET @publication = N'AdvWorksSalesOrdersMerge' 
SET @publicationDB = N'AdventureWorks2008R2'

-- Remove the merge publication.
USE [AdventureWorks2008R2]
EXEC sp_dropmergepublication @publication = @publication;

-- Remove replication objects from the database.
USE master
EXEC sp_replicationdboption 
  @dbname = @publicationDB, 
  @optname = N'merge publish', 
  @value = N'false'
GO