ID 列を管理する方法 (レプリケーション Transact-SQL プログラミング)

サブスクライバ挿入がパブリッシャにレプリケートされる場合、サブスクライバとパブリッシャに同じ ID 値が割り当てられないように、ID 列を管理する必要があります。レプリケーションでは ID の範囲を自動的に管理することも、ID の範囲を手動で管理することもできます。レプリケーション ストアド プロシージャを使用して、アーティクルを作成するときの ID 範囲管理オプションを指定できます。レプリケーションで使用できる ID 範囲管理オプションの詳細については、「ID 列のレプリケート」を参照してください。

注意

複数のパブリケーションでテーブルをパブリッシュする場合、両方のパブリケーションに同じ ID 範囲管理オプションを指定する必要があります。詳細については、「データとデータベース オブジェクトのパブリッシュ」の「複数のパブリケーションでのテーブルのパブリッシュ」を参照してください。

トランザクション パブリケーションのアーティクルを定義する際に自動 ID 範囲管理を有効にするには

  • パブリッシャ側のパブリケーション データベースに対して、sp_addarticle を実行します。パブリッシュするソース テーブルに ID 列がある場合、@identityrangemanagementoptionauto を指定し、パブリッシャに割り当てる ID 値の範囲を @pub_identity_range に、各サブスクライバに割り当てる ID 値の範囲を @identity_range に、新しい ID 範囲を割り当てる前に使用されていた ID 値の総数のパーセンテージを @threshold に指定します。アーティクルの定義の詳細については、「アーティクルを定義する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。

    注意

    ID 列のデータ型のサイズが、すべてのサブスクライバに割り当てられる ID 範囲の総計をサポートできるだけの大きさであることを確認してください。

トランザクション パブリケーションのアーティクルを定義する際に自動 ID 範囲管理を無効にするには

  1. パブリッシャ側のパブリケーション データベースに対して、sp_addarticle を実行します。@identityrangemanagementoptionmanual を指定します。アーティクルの定義の詳細については、「アーティクルを定義する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。

  2. サブスクライバの更新時に競合が発生しないように、サブスクライバの ID アーティクル列に範囲を割り当てます。詳細については、トピック「ID 列のレプリケート」で、手動による ID 範囲管理用に範囲を割り当てる方法に関する部分を参照してください。

マージ パブリケーションのアーティクルを定義する際の自動 ID 範囲管理を有効にするには

  • パブリッシャ側のパブリケーション データベースに対して、sp_addmergearticle を実行します。パブリッシュするソース テーブルに ID 列がある場合、@identityrangemanagementoptionauto を指定し、サーバー サブスクリプションに割り当てる ID 値の範囲を @pub_identity_range に、パブリッシャおよび各クライアント サブスクリプションに割り当てる ID 値の範囲を @identity_range に、新しい ID 範囲を割り当てる前に使用されていた ID 値の総数のパーセンテージを @threshold に指定します。いつ新しい ID 範囲が割り当てられるのかについては、「ID 列のレプリケート」の「ID 範囲の割り当て」を参照してください。アーティクルの定義の詳細については、「アーティクルを定義する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。

    注意

    特にサーバー サブスクリプションを使用するサブスクライバの場合、ID 列のデータ型のサイズが、すべてのサブスクライバに割り当てられる ID 範囲の総計をサポートできるだけの大きさであることを確認してください。

マージ パブリケーションのアーティクルを定義する際に自動 ID 範囲管理を無効にするには

  1. パブリッシャ側のパブリケーション データベースに対して、sp_addmergearticle を実行します。次のいずれかの値を @identityrangemanagementoption に指定します。

    • manual - サブスクライバを更新するには、手動で ID 範囲を割り当てる必要があります。

    • none - パブリッシャの ID 列は、サブスクライバの ID 列として定義されません。

    アーティクルの定義の詳細については、「アーティクルを定義する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。

  2. サブスクライバの更新時に競合が発生しないように、サブスクライバの ID アーティクル列に範囲を割り当てます。

スナップショット パブリケーションまたはトランザクション パブリケーションの既存のアーティクルに対する ID 範囲管理設定を自動的に変更するには

  1. パブリッシャ側のパブリケーション データベースに対して sp_helparticle を実行し、結果セットの identityrangemanagementoption の値を確認します。値が 0 の場合、自動 ID 範囲管理は有効ではありません。

  2. 結果セットの identityrangemanagementoption の値が 1 の場合、次のようにして設定を変更します。

    • 割り当てられている ID 範囲を変更するには、パブリッシャ側のパブリケーション データベースに対して sp_changearticle を実行します。@propertyidentity_range または pub_identity_range を指定し、新しい値の範囲を @value に指定します。

    • 新しい範囲の割り当てのしきい値を変更するには、パブリッシャ側のパブリケーション データベースに対して sp_changearticle を実行します。@propertythreshold を指定し、@value に新しいしきい値を指定します。

マージ パブリケーションの既存のアーティクルに対する ID 範囲管理設定を自動的に変更するには

  1. パブリッシャ側のパブリケーション データベースに対して sp_helpmergearticle を実行し、結果セットの identity_support の値を確認します。値が 0 の場合、自動 ID 範囲管理は有効ではありません。

  2. 結果セットの identity_support の値が 1 の場合、次のようにして設定を変更します。

    • 割り当てられている ID 範囲を変更するには、パブリッシャ側のパブリケーション データベースに対して sp_changemergearticle を実行します。@propertyidentity_range または pub_identity_range を指定し、新しい値の範囲を @value に指定します。

    • 新しい範囲の割り当てのしきい値を変更するには、パブリッシャ側のパブリケーション データベースに対して sp_changemergearticle を実行します。@propertythreshold を指定し、@value に新しいしきい値を指定します。いつ新しい ID 範囲が割り当てられるのかについては、「ID 列のレプリケート」の「ID 範囲の割り当て」を参照してください。

    • 自動 ID 範囲管理を無効にするには、パブリッシャ側のパブリケーション データベースに対して sp_changemergearticle を実行します。@propertyidentityrangemanagementoption を指定し、@valuemanual または none を指定します。