アーティクルの削除
このトピックでは、Transact-SQL またはレプリケーション管理オブジェクト (RMO) を使用して、SQL Server 2014 の記事を削除する方法について説明します。 アーティクルを削除できる条件と、アーティクルを削除するために新しいスナップショットやサブスクリプションの再初期化が必要かどうかについては、「Add Articles to and Drop Articles from Existing Publications」(既存のパブリケーションでのアーティクルの追加と削除) をご覧ください。
Transact-SQL の使用
アーティクルは、レプリケーション ストアド プロシージャを使用してプログラムで削除できます。 使用するストアド プロシージャは、アーティクルが属するパブリケーションの種類によって異なります。
スナップショット パブリケーションまたはトランザクション パブリケーションからアーティクルを削除するには
sp_droparticle (Transact-SQL) を実行して、@articleで指定されたアーティクルをパブリケーションから削除@publication。 @force_invalidate_snapshotに値 1 を指定します。
(省略可) パブリッシュされたオブジェクトをデータベースから完全に削除するには、パブリッシャーのパブリケーション データベースに対して
DROP <objectname>
コマンドを実行します。
アーティクルをマージ パブリケーションから削除するには
sp_dropmergearticle (Transact-SQL) を実行して、@articleで指定されたアーティクルをパブリケーションから削除@publication。 必要に応じて、@force_invalidate_snapshotに 1 、 @force_reinit_subscription に 値 1を指定します。
(省略可) パブリッシュされたオブジェクトをデータベースから完全に削除するには、パブリッシャーのパブリケーション データベースに対して
DROP <objectname>
コマンドを実行します。
例 (Transact-SQL)
次の例では、トランザクション パブリケーションからアーティクルを削除します。 この変更により既存のスナップショットが無効になるため、@force_invalidate_snapshot パラメーターには値 1 が指定されます。
DECLARE @publication AS sysname;
DECLARE @article AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @article = N'Product';
-- Drop the transactional article.
USE [AdventureWorks2012]
EXEC sp_droparticle
@publication = @publication,
@article = @article,
@force_invalidate_snapshot = 1;
GO
次の例では、マージ パブリケーションから 2 つのアーティクルを削除します。 これらの変更により既存のスナップショットが無効になるため、@force_invalidate_snapshot パラメーターには値 1 が指定されます。
DECLARE @publication AS sysname;
DECLARE @article1 AS sysname;
DECLARE @article2 AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @article1 = N'SalesOrderDetail';
SET @article2 = N'SalesOrderHeader';
-- Remove articles from a merge publication.
USE [AdventureWorks]
EXEC sp_dropmergearticle
@publication = @publication,
@article = @article1,
@force_invalidate_snapshot = 1;
EXEC sp_dropmergearticle
@publication = @publication,
@article = @article2,
@force_invalidate_snapshot = 1;
GO
DECLARE @publication AS sysname;
DECLARE @table1 AS sysname;
DECLARE @table2 AS sysname;
DECLARE @table3 AS sysname;
DECLARE @salesschema AS sysname;
DECLARE @hrschema AS sysname;
DECLARE @filterclause AS nvarchar(1000);
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @table1 = N'Employee';
SET @table2 = N'SalesOrderHeader';
SET @table3 = N'SalesOrderDetail';
SET @salesschema = N'Sales';
SET @hrschema = N'HumanResources';
SET @filterclause = N'Employee.LoginID = HOST_NAME()';
-- Drop the merge join filter between SalesOrderHeader and SalesOrderDetail.
EXEC sp_dropmergefilter
@publication = @publication,
@article = @table3,
@filtername = N'SalesOrderDetail_SalesOrderHeader',
@force_invalidate_snapshot = 1,
@force_reinit_subscription = 1;
-- Drops the merge join filter between Employee and SalesOrderHeader.
EXEC sp_dropmergefilter
@publication = @publication,
@article = @table2,
@filtername = N'SalesOrderHeader_Employee',
@force_invalidate_snapshot = 1,
@force_reinit_subscription = 1;
-- Drops the article for the SalesOrderDetail table.
EXEC sp_dropmergearticle
@publication = @publication,
@article = @table3,
@force_invalidate_snapshot = 1,
@force_reinit_subscription = 1;
-- Drops the article for the SalesOrderHeader table.
EXEC sp_dropmergearticle
@publication = @publication,
@article = @table2,
@force_invalidate_snapshot = 1,
@force_reinit_subscription = 1;
-- Drops the article for the Employee table.
EXEC sp_dropmergearticle
@publication = @publication,
@article = @table1,
@force_invalidate_snapshot = 1,
@force_reinit_subscription = 1;
GO
レプリケーション管理オブジェクト (RMO) の使用
アーティクルは、レプリケーション管理オブジェクト (RMO) を使用してプログラムから削除できます。 アーティクルを削除する際に使用する RMO のクラスは、アーティクルが属しているパブリケーションの種類によって異なります。
スナップショット パブリケーションまたはトランザクション パブリケーションのアーティクルを削除するには
ServerConnection クラスを使用して、パブリッシャーへの接続を作成します。
TransArticle クラスのインスタンスを作成します。
Name、 PublicationName、 DatabaseName の各プロパティを設定します。
手順 1. で作成した接続を ConnectionContext プロパティに設定します。
IsExistingObject プロパティを調べて、アーティクルが存在していることを確認します。 このプロパティの値が
false
の場合、手順 3. で指定したアーティクルのプロパティが正しく定義されていないか、アーティクルが存在していません。Remove メソッドを呼び出します。
すべての接続を閉じます。
マージ パブリケーションのアーティクルを削除するには
ServerConnection クラスを使用して、パブリッシャーへの接続を作成します。
MergeArticle クラスのインスタンスを作成します。
Name、 PublicationName、 DatabaseName の各プロパティを設定します。
手順 1. で作成した接続を ConnectionContext プロパティに設定します。
IsExistingObject プロパティを調べて、アーティクルが存在していることを確認します。 このプロパティの値が
false
の場合、手順 3. で指定したアーティクルのプロパティが正しく定義されていないか、アーティクルが存在していません。Remove メソッドを呼び出します。
すべての接続を閉じます。
参照
既存のパブリケーションでのアーティクルの追加と削除
Replication System Stored Procedures Concepts