パブリッシングとディストリビューションを無効にする方法 (レプリケーション 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