アーティクルのプロパティの表示および変更

このトピックでは、SQL Server 2012 で SQL Server Management Studio、Transact-SQL、またはレプリケーション管理オブジェクト (RMO) を使用して、アーティクルのプロパティを表示および変更する方法について説明します。

このトピックの内容

  • 作業を開始する準備:

    制限事項と制約事項

    推奨事項

  • アーティクルのプロパティを表示および変更するために使用するもの:

    SQL Server Management Studio

    Transact-SQL

    レプリケーション管理オブジェクト (RMO)

作業を開始する準備

制限事項と制約事項

  • パブリケーションの作成後には変更できないプロパティや、パブリケーションへのサブスクリプションがある場合には変更できないプロパティもあります。 変更できないプロパティは、読み取り専用として表示されます。

推奨事項

[トップに戻る] リンクで使用される矢印アイコン[Top]

SQL Server Management Studio の使用

[パブリケーションのプロパティ - <Publication>] ダイアログ ボックスで、アーティクルのプロパティを表示および変更します。このダイアログ ボックスは、Microsoft SQL Server Management Studio とレプリケーション モニターで使用できます。 レプリケーション モニターの起動の詳細については、「レプリケーション モニターの開始」を参照してください。

  • [全般] ページ。パブリケーションの名前と説明、データベースの名前、パブリケーションの種類、およびサブスクリプションの有効期限の設定が含まれています。

  • [アーティクル] ページ。パブリケーションの新規作成ウィザードの [アーティクル] ページに相当します。 このページでは、アーティクルの追加や削除、およびアーティクルのプロパティや列のフィルター選択の変更を行うことができます。

  • [行のフィルター選択] ページ。パブリケーションの新規作成ウィザードの [テーブル行のフィルター選択] ページに相当します。 このページでは、すべての種類のパブリケーションの静的行フィルターや、マージ パブリケーションのパラメーター化された行フィルターと結合フィルターを追加、編集、および削除できます。

  • [スナップショット] ページ。このページでは、スナップショットの形式と場所、スナップショットを圧縮するかどうか、およびスナップショットの適用の前後に実行するスクリプトを指定できます。

  • [FTP スナップショット] ページ (スナップショット パブリケーション、トランザクション パブリケーション、および SQL Server 2005 より前のバージョンを実行しているパブリッシャーのマージ パブリケーションの場合)。このページでは、サブスクライバーがスナップショット ファイルをファイル転送プロトコル (FTP) でダウンロードできるかどうかを指定できます。

  • [FTP スナップショットとインターネット] ページ (SQL Server 2005 以降を実行しているパブリッシャーからのマージ パブリケーションの場合)。このページでは、サブスクライバーがスナップショット ファイルを FTP でダウンロードできるかどうか、および HTTPS でサブスクリプションを同期できるかどうかを指定できます。

  • [サブスクリプション オプション] ページ。このページでは、すべてのサブスクリプションに適用されるさまざまなオプションを設定できます。 利用できるオプションは、パブリケーションの種類によって異なります。

  • [パブリケーション アクセス リスト] ページ。このページでは、パブリケーションにアクセスできるログインやグループを指定できます。

  • [エージェント セキュリティ] ページ。このページでは、エージェントの実行やレプリケーション トポロジ内のコンピューターへの接続に使用されるアカウントの設定にアクセスできます。この設定を使用するエージェントは、すべてのパブリケーションのスナップショット エージェント、すべてのトランザクション パブリケーションのログ リーダー エージェント、およびキュー更新サブスクリプションを許可するトランザクション パブリケーションのキュー リーダー エージェントです。

  • [データ パーティション] ページ (SQL Server 2005 以降を実行しているパブリッシャーからのマージ パブリケーションの場合)。このページでは、パラメーター化されたフィルターを使用するパブリケーションのサブスクライバーが、スナップショットを利用できない場合にスナップショットを要求できるかどうかを指定できます。 また、1 つ以上のパーティションのスナップショットを 1 回生成したり、スケジュールによって定期的に生成したりすることもできます。

アーティクルのプロパティを表示および変更するには

  1. [パブリケーションのプロパティ - <Publication>] ダイアログ ボックスの [アーティクル] ページで、アーティクルを選択し、[アーティクルのプロパティ] をクリックします。

  2. プロパティの変更を適用するアーティクルを選択します。

    • [反転表示された <ObjectType> アーティクルのプロパティを設定] をクリックし、[アーティクルのプロパティ - <ObjectName>] ダイアログ ボックスを表示します。このダイアログ ボックスで行われたプロパティの変更は、[アーティクル] ページのオブジェクト ペインで反転表示されたオブジェクトのみに適用されます。

    • [すべての <ObjectType> アーティクルのプロパティを設定] をクリックし、[すべての <ObjectType> アーティクルのプロパティ] ダイアログ ボックスを表示します。このダイアログ ボックスで行われたプロパティの変更は、パブリケーションが選択されていないオブジェクトも含めた、[アーティクル] ページのオブジェクト ペインにあるこの種類のすべてのオブジェクトに適用されます。

      注意

      [すべての <ObjectType> アーティクルのプロパティ] ダイアログ ボックスで行われたプロパティの変更は、[アーティクルのプロパティ - <ObjectName>] ダイアログ ボックスで以前に行われた変更のすべてを上書きします。 たとえば、あるオブジェクトの種類であるすべてのアーティクルに対して一連の既定値を設定し、一部のプロパティを個々のオブジェクトに対して設定する場合は、すべてのアーティクルの既定値を先に設定してから、 個々のオブジェクトのプロパティを設定します。

  3. 必要に応じてプロパティを変更し、[OK] をクリックします。

  4. [パブリケーションのプロパティ - <Publication>] ダイアログ ボックスで、[OK] をクリックします。

[トップに戻る] リンクで使用される矢印アイコン[Top]

Transact-SQL の使用

アーティクルのプロパティは、レプリケーションのストアド プロシージャを使用して、プログラムから変更および取得できます。 使用するストアド プロシージャは、アーティクルが属するパブリケーションの種類によって異なります。

スナップショット パブリケーションまたはトランザクション パブリケーションに属するアーティクルのプロパティを表示するには

  1. sp_helparticle を実行します。@publication パラメーターにはパブリケーションの名前を指定し、@article パラメーターにはアーティクルの名前を指定します。 @article を指定しない場合、パブリケーションのすべてのアーティクルに関する情報が返されます。

  2. テーブル アーティクルについて sp_helparticlecolumns を実行し、ベース テーブルで使用できるすべての列を一覧表示します。

スナップショット パブリケーションまたはトランザクション パブリケーションに属するアーティクルのプロパティを変更するには

  • sp_changearticle を実行します。このとき、変更するアーティクルのプロパティを @property パラメーターに指定し、このプロパティの新しい値を @value パラメーターに指定します。

    注意

    さらに、新しいスナップショットを生成する必要がある場合は、@force_invalidate_snapshot1 を、また、サブスクライバーを再初期化する必要がある場合は、@force_reinit_subscription1 を指定します。 変更時に新しいスナップショットの生成または再初期化が必要となるプロパティの詳細については、「パブリケーションおよびアーティクルのプロパティの変更」を参照してください。

マージ パブリケーションに属するアーティクルのプロパティを表示するには

  1. sp_helpmergearticle を実行します。@publication パラメーターにはパブリケーションの名前を指定し、@article パラメーターにはアーティクルの名前を指定します。 これらのパラメーターを指定しない場合、パブリケーションまたはパブリッシャーのすべてのアーティクルに関する情報が返されます。

  2. テーブル アーティクルに対して sp_helpmergearticlecolumn を実行し、ベース テーブルで使用できるすべての列を一覧表示します。

マージ パブリケーションに属するアーティクルのプロパティを変更するには

  • sp_changemergearticle を実行します。このとき、変更するアーティクルのプロパティを @property パラメーターに指定し、このプロパティの新しい値を @value パラメーターに指定します。

    注意

    さらに、新しいスナップショットを生成する必要がある場合は、@force_invalidate_snapshot1 を、また、サブスクライバーを再初期化する必要がある場合は、@force_reinit_subscription1 を指定します。 変更時に新しいスナップショットの生成または再初期化が必要となるプロパティの詳細については、「パブリケーションおよびアーティクルのプロパティの変更」を参照してください。

例 (Transact-SQL)

パブリッシュされたアーティクルのプロパティを取得するトランザクション レプリケーションの例を、次に示します。

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

USE [AdventureWorks2012]
EXEC sp_helparticle
  @publication = @publication;
GO

パブリッシュされたアーティクルのスキーマ オプションを変更するトランザクション レプリケーションの例を、次に示します。

DECLARE @publication AS sysname;
DECLARE @article AS sysname;
DECLARE @option AS int;
SET @publication = N'AdvWorksProductTran';
SET @article = N'Product';
SET @option = (SELECT CAST(0x0000000002030073 AS int));

-- Change the schema options to replicate schema with XML.
USE [AdventureWorks2012]
EXEC sp_changearticle 
  @publication = @publication,
  @article = @article, 
  @property = N'schema_option', 
  @value = @option,
  @force_invalidate_snapshot = 1;
GO

パブリッシュされたアーティクルのプロパティを取得するマージ レプリケーションの例を、次に示します。

DECLARE @publication AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';

USE [AdventureWorks2012]
EXEC sp_helpmergearticle
  @publication = @publication;
GO

パブリッシュされたアーティクルの競合検出の設定を変更するマージ レプリケーションの例を、次に示します。

DECLARE @publication AS sysname;
DECLARE @article AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @article = N'SalesOrderHeader';

-- Enable column-level conflict tracking.
-- Changing this property requires that existing subscriptions
-- be reinitialized and that a new snapshot be generated.
USE [AdventureWorks2012]
EXEC sp_changemergearticle 
  @publication = @publication,
  @article = @article, 
  @property = N'column_tracking', 
  @value = N'true',
  @force_invalidate_snapshot = 1,
  @force_reinit_subscription = 1;
GO

[トップに戻る] リンクで使用される矢印アイコン[Top]

レプリケーション管理オブジェクト (RMO) の使用

アーティクルのプロパティは、レプリケーション管理オブジェクト (RMO) を使用してプログラムから変更できます。 アーティクルのプロパティを表示または変更する際に使用する RMO のクラスは、アーティクルが属しているパブリケーションの種類によって異なります。

スナップショット パブリケーションまたはトランザクション パブリケーションに属しているアーティクルのプロパティを表示または変更するには

  1. ServerConnection クラスを使用して、パブリッシャーへの接続を作成します。

  2. TransArticle クラスのインスタンスを作成します。

  3. NamePublicationNameDatabaseName の各プロパティを設定します。

  4. 手順 1. で作成した接続を ConnectionContext プロパティに設定します。

  5. LoadProperties メソッドを呼び出して、オブジェクトのプロパティを取得します。 このメソッドから false が返された場合、手順 3. で指定したアーティクルのプロパティが正しく定義されていないか、アーティクルが存在していません。

  6. (省略可) プロパティを変更するには、TransArticle の設定可能なプロパティに新しい値を設定します。

  7. (省略可) CachePropertyChanges に true を指定した場合、CommitPropertyChanges メソッドを呼び出してサーバーに変更をコミットします。 CachePropertyChanges に false (既定値) を指定した場合、変更は直ちにサーバーに送られます。

マージ パブリケーションに属しているアーティクルのプロパティを表示または変更するには

  1. ServerConnection クラスを使用して、パブリッシャーへの接続を作成します。

  2. MergeArticle クラスのインスタンスを作成します。

  3. NamePublicationNameDatabaseName の各プロパティを設定します。

  4. 手順 1. で作成した接続を ConnectionContext プロパティに設定します。

  5. LoadProperties メソッドを呼び出して、オブジェクトのプロパティを取得します。 このメソッドから false が返された場合、手順 3. で指定したアーティクルのプロパティが正しく定義されていないか、アーティクルが存在していません。

  6. (省略可) プロパティを変更するには、MergeArticle の設定可能なプロパティに新しい値を設定します。

  7. (省略可) CachePropertyChanges に true を指定した場合、CommitPropertyChanges メソッドを呼び出してサーバーに変更をコミットします。 CachePropertyChanges に false (既定値) を指定した場合、変更は直ちにサーバーに送られます。

例 (RMO)

次の例では、マージ アーティクルに変更を加え、アーティクル用のビジネス ロジック ハンドラーを指定しています。

            // Define the Publisher, publication, and article names.
            string publisherName = publisherInstance;
            string publicationName = "AdvWorksSalesOrdersMerge";
            string publicationDbName = "AdventureWorks2012";
            string articleName = "SalesOrderHeader";
            
            // Set the friendly name of the business logic handler.
            string customLogic = "OrderEntryLogic";

            MergeArticle article = new MergeArticle();
            
            // Create a connection to the Publisher.
            ServerConnection conn = new ServerConnection(publisherName);

            try
            {
                // Connect to the Publisher.
                conn.Connect();

                // Set the required properties for the article.
                article.ConnectionContext = conn;
                article.Name = articleName;
                article.DatabaseName = publicationDbName;
                article.PublicationName = publicationName;

                // Load the article properties.
                if (article.LoadProperties())
                {
                    article.ArticleResolver = customLogic;
                }
                else
                {
                    // Throw an exception of the article does not exist.
                    throw new ApplicationException(String.Format(
                    "{0} is not published in {1}", articleName, publicationName));
                }
                
            }
            catch (Exception ex)
            {
                // Do error handling here and rollback the transaction.
                throw new ApplicationException(String.Format(
                    "The business logic handler {0} could not be associated with " +
                    " the {1} article.",customLogic,articleName), ex);
            }
            finally
            {
                conn.Disconnect();
            }
' Define the Publisher, publication, and article names.
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publicationDbName As String = "AdventureWorks2012"
Dim articleName As String = "SalesOrderHeader"

' Set the friendly name of the business logic handler.
Dim customLogic As String = "OrderEntryLogic"

Dim article As MergeArticle = New MergeArticle()

' Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)

Try
    ' Connect to the Publisher.
    conn.Connect()

    ' Set the required properties for the article.
    article.ConnectionContext = conn
    article.Name = articleName
    article.DatabaseName = publicationDbName
    article.PublicationName = publicationName

    ' Load the article properties.
    If article.LoadProperties() Then
        article.ArticleResolver = customLogic
    Else
        ' Throw an exception of the article does not exist.
        Throw New ApplicationException(String.Format( _
         "{0} is not published in {1}", articleName, publicationName))
    End If

Catch ex As Exception
    ' Do error handling here and rollback the transaction.
    Throw New ApplicationException(String.Format( _
     "The business logic handler {0} could not be associated with " + _
     " the {1} article.", customLogic, articleName), ex)
Finally
    conn.Disconnect()
End Try

[トップに戻る] リンクで使用される矢印アイコン[Top]

関連項目

概念

マージ アーティクルのビジネス ロジック ハンドラーの実装

データとデータベース オブジェクトのパブリッシュ

パブリケーションおよびアーティクルのプロパティの変更

レプリケーション システム ストアド プロシージャの概念

マージ レプリケーションの競合検出および解決の詳細