パラメーター化されたフィルターによるマージ パブリケーションのパーティションの管理

適用対象:SQL Server

このトピックでは、SQL Server で 、SQL Server Management Studio、Transact-SQL、またはレプリケーション管理オブジェクト (RMO) を使用して、パラメーター化されたフィルターを利用し、統合 出版物のパーティションを管理する方法ついて説明します。 パラメーター化された行フィルターを使用して、重複しないパーティションを生成できます。 パーティションを制限することで、特定のパーティションを 1 つのサブスクリプションだけが受け取るようにできます。 このような場合、サブスクリプションの数が多いと多数のパーティションが生成されるため、それと同数のパーティション スナップショットが必要になります。 詳しくは、「 Parameterized Row Filters」をご覧ください。

このトピックの内容

始める前に

推奨事項

  • レプリケーション トポロジをスクリプト化する場合 (推奨)、パブリケーション スクリプトには、データ パーティションを作成するためのストアド プロシージャの呼び出しが含まれます。 このスクリプトによって、作成されたパーティションの参照、および必要に応じて 1 つ以上のパーティションを再作成する方法を利用できます。 詳細については、「レプリケーションのスクリプト作成」を参照してください。

  • パブリケーションが、重複しないパーティションを含むサブスクリプションを返すパラメーター化されたフィルターを持つ場合に、特定のサブスクリプションが失われて再作成が必要になったときは、サブスクライブされたパーティションを削除し、サブスクリプションを再作成してから、パーティションを再作成する必要があります。 詳しくは、「 Parameterized Row Filters」をご覧ください。 パブリケーション作成スクリプトが生成されると、レプリケーションによって既存のサブスクライバー パーティション用の作成スクリプトが生成されます。 詳細については、「レプリケーションのスクリプト作成」を参照してください。

SQL Server Management Studio を使用する

[パブリケーションのプロパティ - <パブリケーション]> ダイアログ ドロップダウン リストの [データ パーティション] ページでパーティションを管理します。 このダイアログ ボックスへのアクセス方法の詳細については、「パブリケーション プロパティの表示および変更」を参照してください。 このページでは、パーティションを作成および削除する、サブスクライバーがスナップショットの生成および配信を開始できるようにする、1 つ以上のパーティションのスナップショットを生成する、スナップショットをクリーンアップするなどの操作を行うことができます。

パーティションを作成するには

  1. [パブリケーションのプロパティ - <パブリケーション]> ダイアログ ドロップダウン リストの [データ パーティション] ページで [追加] をクリックします。

  2. [データ パーティションの追加] ダイアログ ボックスで、作成するパーティションに関連する HOST_NAME() 値または SUSER_SNAME() 値、あるいはその両方を入力します。

  3. オプションでスナップショットの更新スケジュールを指定します。

    1. [以下のスケジュールでこのパーティションのスナップショット エージェントを実行する]を選択します。

    2. スナップショットの既定の更新スケジュールをそのまま使用するか、または [変更] をクリックして別のスケジュールを指定します。

  4. [OK] を選択します。

パーティションを削除するには

  1. [データ パーティション] ページのグリッドでパーティションを選択します。

  2. [削除] をクリックします。

サブスクライバーにスナップショットの生成と配信を許可するには

  1. [データ パーティション] ページで、 [新規サブスクライバーで同期を行うとき、パーティションを自動的に定義し、必要に応じてスナップショットを生成する]を選択します。

  2. [OK] を選択します。

パーティションのスナップショットを生成するには

  1. [データ パーティション] ページのグリッドでパーティションを選択します。

  2. [今すぐ選択したスナップショットを生成する]をクリックします。

パーティションのスナップショットをクリーンアップするには

  1. [データ パーティション] ページのグリッドでパーティションを選択します。

  2. [既存のスナップショットをクリーンアップする]をクリックします。

Transact-SQL の使用

パラメーター化されたフィルターを使ってパブリケーションをより詳細に管理するために、プログラムからレプリケーション ストアド プロシージャを使用して既存のパーティションを列挙できます。 既存のパーティションの作成と削除も行えます。 既存パーティションに関する次の情報も取得できます。

  • パーティションのフィルター方法 (SUSER_SNAME (Transact-SQL) または HOST_NAME (Transact-SQL) を使用)。

  • パーティション スナップショットを生成するジョブの名前

  • パーティション スナップショット ジョブが最後に実行された時刻

新しいサブスクリプションが初期化されたときに、2 つの部分から構成されるスナップショットの 2 番目の部分は要求時に生成できますが、下記の手順を実行することで、このスナップショットの生成方法を制御し、都合のよいときにこのスナップショットをあらかじめ生成できます。 詳しくは、「 Snapshots for Merge Publications with Parameterized Filters」をご覧ください。

既存のパーティションに関する情報を表示するには

  1. パブリッシャー側のパブリケーション データベースに対して、sp_helpmergepartition (Transact-SQL) を実行します。 @publication にパブリケーション名を指定します。 (省略可能) 1 つのフィルター条件に基づく情報のみが返されるように、@suser_sname または @host_name を指定します。

新しいパーティションを定義して、新しいパーティション スナップショットを生成するには

  1. パブリッシャー側のパブリケーション データベースに対して、sp_addmergepartition (Transact-SQL) を実行します。 @publication にパブリケーションの名前を指定し、次のいずれかのパラメーターにパーティションを定義するパラメーター値を指定します。

    • @suser_sname - SUSER_SNAME (Transact-SQL) から返される値でパラメーター化されたフィルターを定義する場合。

    • @host_name - HOST_NAME (Transact-SQL) から返される値でパラメーター化されたフィルターを定義する場合。

  2. この新しいパーティションのパラメーター化スナップショットを作成し、初期化します。 詳しくは、「 パラメーター化されたフィルターを使用したパブリケーションのスナップショットの作成」をご覧ください。

パーティションを削除するには

  1. パブリッシャー側のパブリケーション データベースに対して、sp_dropmergepartition (Transact-SQL) を実行します。 @publication にパブリケーションの名前を指定し、次のいずれかのパラメーターにパーティションを定義するパラメーター値を指定します。

    • @suser_sname - SUSER_SNAME (Transact-SQL) から返される値でパラメーター化されたフィルターを定義する場合。

    • @host_name - HOST_NAME (Transact-SQL) から返される値でパラメーター化されたフィルターを定義する場合。

    これにより、そのパーティションのスナップショット ジョブおよびすべてのスナップショット ファイルも削除されます。

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

パラメーター化されたフィルターを使ってパブリケーションをより適切に管理するために、レプリケーション管理オブジェクト (RMO) を使用して、新しいサブスクライバー パーティションの作成、既存のサブスクライバー パーティションの列挙、およびサブスクライバーの削除をプログラムで行うことができます。 サブスクライバー パーティションを作成する方法の詳細については、「 パラメーター化されたフィルターを使用したパブリケーションのスナップショットの作成」を参照してください。 既存のパーティションに関する次の情報を取得できます。

  • パーティションの基になる値およびフィルター関数。

  • サブスクライバーのパラメーター化されたスナップショットを生成するジョブの名前。

  • パラメーター化されたスナップショット ジョブが最後に実行された日時。

既存のパーティションに関する情報を表示するには

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

  2. MergePublication クラスのインスタンスを作成します。 パブリケーションの Name プロパティおよび DatabaseName プロパティを設定し、 ConnectionContext プロパティに手順 1. で作成した ServerConnection を設定します。

  3. LoadProperties メソッドを呼び出して、オブジェクトのプロパティを取得します。 このメソッドが falseを返す場合、手順 2. でパブリケーション プロパティを不適切に設定したか、パブリケーションが存在していません。

  4. EnumMergePartitions メソッドを呼び出して、結果を MergePartition オブジェクトの配列に渡します。

  5. 配列内の各 MergePartition オブジェクトに対して、必要なプロパティを取得します。

既存のパーティションを削除するには

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

  2. MergePublication クラスのインスタンスを作成します。 パブリケーションの Name プロパティおよび DatabaseName プロパティを設定し、 ConnectionContext プロパティに手順 1. で作成した ServerConnection を設定します。

  3. LoadProperties メソッドを呼び出して、オブジェクトのプロパティを取得します。 このメソッドが falseを返す場合、手順 2. でパブリケーション プロパティを不適切に設定したか、パブリケーションが存在していません。

  4. EnumMergePartitions メソッドを呼び出して、結果を MergePartition オブジェクトの配列に渡します。

  5. 配列内の各 MergePartition オブジェクトに対して、パーティションを削除するかどうかを決定します。 この決定は、通常、 DynamicFilterLogin プロパティまたは DynamicFilterHostName プロパティの値に基づいて行います。

  6. 手順 2. の RemoveMergePartition オブジェクトで、 MergePublication メソッドを呼び出します。 手順 5. の MergePartition オブジェクトを渡します。

  7. 削除する各パーティションに対して手順 6. を繰り返します。

参照

パラメーター化された行フィルター
パラメーター化されたフィルターを使用したマージ パブリケーションのスナップショット