アーティクルの削除
このトピックでは、SQL Server 2012 で Transact-SQL またはレプリケーション管理オブジェクト (RMO) を使用して、アーティクルを削除する方法について説明します。 アーティクルを削除できる条件、およびアーティクルを削除するために新しいスナップショットやサブスクリプションの再初期化が必要かどうかについては、「既存のパブリケーションでのアーティクルの追加および削除」を参照してください。
このトピックの内容
アーティクルを削除するために使用するもの:
Transact-SQL
レプリケーション管理オブジェクト (RMO)
Transact-SQL の使用
アーティクルは、レプリケーション ストアド プロシージャを使用してプログラムで削除できます。 使用するストアド プロシージャは、アーティクルが属するパブリケーションの種類によって異なります。
スナップショット パブリケーションまたはトランザクション パブリケーションからアーティクルを削除するには
削除するアーティクルを @article に指定し、パブリケーションを @publication に指定して、sp_droparticle (Transact-SQL) を実行します。 @force_invalidate_snapshot に 1 を指定します。
(省略可) パブリッシュされたオブジェクトをデータベースから完全に削除するには、パブリッシャーのパブリケーション データベースに対して DROP <objectname> コマンドを実行します。
アーティクルをマージ パブリケーションから削除するには
削除するアーティクルを @article に指定し、パブリケーションを @publication に指定して、sp_dropmergearticle (Transact-SQL) を実行します。 必要に応じて、@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
[Top]
レプリケーション管理オブジェクト (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 メソッドを呼び出します。
すべての接続を閉じます。
[Top]