このトピックでは、SQL Server Management Studio または Transact-SQL を使用して SQL Server 2014 の ID 列を管理する方法について説明します。 サブスクライバーの挿入をパブリッシャーにレプリケートする場合、サブスクライバーとパブリッシャーの両方で同じ ID 値が割り当てないように、ID 列を管理する必要があります。 レプリケーションでは、ID 範囲を自動的に管理することも、ID 範囲の管理を手動で処理することもできます。 レプリケーションによって提供される ID 範囲管理オプションの詳細については、「 IDENTITY 列のレプリケート」を参照してください。
開始する前に
推奨事項
複数のパブリケーションでテーブルをパブリッシュする場合は、両方のパブリケーションに同じ ID 範囲管理オプションを指定する必要があります。 詳細については、「 データおよびデータベース オブジェクトのパブリッシュ」の「複数のパブリケーションでのテーブルのパブリッシュ」を参照してください。
複数のテーブルで使用できる、またはテーブルを参照せずにアプリケーションから呼び出すことができる自動的にインクリメントされる番号を作成するには、「 シーケンス番号」を参照してください。
SQL Server Management Studio の使用
パブリケーションの新規作成ウィザードの [アーティクルの プロパティ ] -<Article> ダイアログ ボックスの [プロパティ] タブで、ID 列の管理オプションを指定します。 このウィザードの使用方法の詳細については、「 パブリケーションの作成」を参照してください。 新規パブリケーションウィザードで、次の操作を行います。
[パブリケーションの種類] ページで、更新サブスクリプションがあるマージ パブリケーションまたはトランザクション パブリケーションを選択した場合は、自動または手動の ID 範囲管理を選択します (既定値は自動です)。 テーブルがパブリッシュされた後、プロパティを変更することはできませんが、他の関連プロパティを変更できます。
他の種類のパブリケーションを選択した場合は、ID 範囲の管理を手動に設定する必要があります。
[パブリケーションのプロパティ - <発行] ダイアログ ボックスで使用できるアーティクルプロパティ -<Article> の[プロパティ] タブで ID の範囲としきい値>変更します。 このダイアログ ボックスへのアクセスの詳細については、「 パブリケーションのプロパティの表示と変更」を参照してください。
ID 列管理オプションを指定するには
パブリッシャーが SQL Server 2005 より前のバージョンの SQL Server を実行している場合は、パブリケーションの新規作成ウィザードの [ パブリケーションの種類 ] ページで、[パブリケーションの マージ ] または [ サブスクリプションを更新するトランザクション パブリケーション] を選択します。
[ アーティクル ] ページで、ID 列を含むテーブルを選択します。
[ アーティクルのプロパティ] をクリックし、[ 強調表示されたテーブル アーティクルのプロパティの設定] をクリックします。
[アーティクルのプロパティ - <Article>] ダイアログ ボックスの [ID 範囲の管理] セクションで、[ID 範囲の自動管理] プロパティを [自動または手動] (SQL Server 2005 以降を実行しているパブリッシャーの場合)、または True または False (SQL Server 2005 より前のバージョンの SQL Server を実行しているパブリッシャーの場合) に設定します。
手順 4 で [自動] または [True] を 選択した場合は、次の表のオプションの値を入力します。 これらの設定の使用方法の詳細については、「ID 列のレプリケート」の「ID 範囲の割り当て」セクション を参照してください。
選択肢 価値 説明 発行元の範囲のサイズ 範囲サイズの整数値 (20000 など)。 「ID 列のレプリケート」の「ID 範囲の割り当て」セクション を参照してください。 サブスクライバー範囲のサイズ 範囲サイズの整数値 (10000 など)。 「ID 列のレプリケート」の「ID 範囲の割り当て」セクション を参照してください。 範囲のしきい値の割合 パーセントしきい値の整数値 (たとえば、90 は 90% に相当します)。 新しい ID 範囲が割り当てられる前にノードで使用される ID 値の合計の割合。
注: この値は指定する必要がありますが、キュー更新サブスクリプションを使用するサブスクライバーのみが使用します。SQL Server Compact または他の SQL Server エディションの以前のバージョンを実行しているパブリケーションをマージするためのサブスクライバー。 詳細については、「ID 列のレプリケート」の「ID 範囲の割り当て」セクション を参照してください。次の範囲の開始値 整数値。 読み取り専用。 次の範囲が開始される値。 たとえば、現在の範囲が 5001 から 6000 の場合、この値は 6001 になります。 最大 ID 値 整数値。 読み取り専用。 ID 列の最大値。 列の基本データ型によって決定されます。 増分 整数値。 読み取り専用。 ID 列の数値が挿入ごとに増減する必要がある量。通常は 1 に設定されます。 OK をクリックします。
テーブルのパブリッシュ後に ID の範囲としきい値を変更するには
[パブリケーションのプロパティ - <発行>] ダイアログ ボックスの [記事] ページで、識別列を持つテーブルを選択します。
[ アーティクルのプロパティ] をクリックし、[ 強調表示されたテーブル アーティクルのプロパティの設定] をクリックします。
プロパティ タブの [アーティクルのプロパティ - <Article>] ダイアログ ボックスで、[Id 範囲管理] セクションの次のプロパティのいずれか、またはすべてに値を入力します: パブリッシャー範囲サイズ、サブスクライバー範囲サイズ、および 範囲のしきい値百分率。
OK をクリックします。
[>] ダイアログ ボックスで [OK] をクリックします。
Transact-SQL の使用
レプリケーション ストアド プロシージャを使用して、アーティクルの作成時に ID 範囲管理オプションを指定できます。
トランザクション パブリケーションのアーティクルを定義するときに ID 範囲の自動管理を有効にするには
パブリッシャー側のパブリケーション データベースで、 sp_addarticleを実行します。 パブリッシュされるソース テーブルに ID 列がある場合は、@identityrangemanagementoptionの auto の値、@pub_identity_range用にパブリッシャーに割り当てられた ID 値の範囲、@identity_rangeの各サブスクライバーに割り当てられた ID 値の範囲、および新しい ID 範囲が@thresholdに割り当てられる前に使用された ID 値の合計の割合を指定します。 アーティクルの定義の詳細については、「アーティクルの 定義」を参照してください。
注
ID 列のデータ型が、すべてのサブスクライバーに割り当てられている ID の合計範囲をサポートするのに十分な大きさであることを確認します。
トランザクション パブリケーションのアーティクルを定義するときに自動 ID 範囲管理を無効にするには
パブリッシャー側のパブリケーション データベースで、 sp_addarticleを実行します。 @identityrangemanagementoptionに manual の値を指定します。 アーティクルの定義の詳細については、「アーティクルの 定義」を参照してください。
サブスクライバーの識別子列に範囲を割り当てて、サブスクライバーを更新する際の競合を避けます。 詳細については、「レプリケート ID 列」の手動 ID 範囲管理の範囲の割り当てに関 するセクションを参照してください。
マージ パブリケーションのアーティクルを定義するときに ID 範囲の自動管理を有効にするには
パブリッシャー側のパブリケーション データベースで、 sp_addmergearticleを実行します。 パブリッシュされるソース テーブルに ID 列がある場合は、@identityrangemanagementoptionの auto の値、@pub_identity_rangeのサーバー サブスクリプションに割り当てられた ID 値の範囲、パブリッシャーに割り当てられた ID 値の範囲、@identity_rangeの各クライアント サブスクリプション、および新しい ID 範囲が@thresholdに割り当てられる前に使用された ID 値の合計の割合を指定します。 新しい ID 範囲が割り当てられるタイミングの詳細については、「ID 列のレプリケート」トピックの「ID 範囲の割り当て」 を参照してください。 アーティクルの定義の詳細については、「アーティクルの 定義」を参照してください。
注
ID 列のデータ型が、すべてのサブスクライバー (特にサーバー サブスクリプションを持つサブスクライバー) に割り当てられている ID の合計範囲をサポートするのに十分な大きさであることを確認します。
マージ パブリケーションのアーティクルを定義するときに ID 範囲の自動管理を無効にするには
パブリッシャー側のパブリケーション データベースで、 sp_addmergearticleを実行します。 @identityrangemanagementoptionには、次のいずれかの値を指定します。
manual - サブスクライバーを更新するには、ID 範囲を手動で割り当てる必要があります。
none - パブリッシャーの ID 列はサブスクライバーの ID 列として定義されません。
アーティクルの定義の詳細については、「アーティクルの 定義」を参照してください。
サブスクライバーの識別子列に範囲を割り当てて、サブスクライバーの更新時に競合が生じないようにします。
スナップショット パブリケーションまたはトランザクション パブリケーション内の既存のアーティクルに対する自動 ID 範囲管理設定を変更するには
パブリッシャー側のパブリケーション データベースで 、sp_helparticle を実行し、結果セットの identityrangemanagementoption の値をメモします。 この値が 0 の場合、ID 範囲の自動管理は有効になりません。
結果セットの identityrangemanagementoption の値が 1 の場合は、次のように設定を変更します。
割り当てられた ID 範囲を変更するには、パブリッシャー側のパブリケーション データベースで sp_changearticle を実行します。 @propertyの値としてidentity_rangeまたはpub_identity_rangeを指定し、@valueには新しい範囲の値を指定します。
新しい範囲が割り当てられるしきい値を変更するには、パブリッシャー側のパブリケーション データベースで sp_changearticle を実行します。 しきい値 を @property のために指定し、新しい @value のしきい値を指定します。
マージ パブリケーション内の既存のアーティクルの自動 ID 範囲管理設定を変更するには
パブリッシャー側のパブリケーション データベースで 、sp_helpmergearticle を実行し、結果セット内の identity_support の値をメモします。 この値が 0 の場合、ID 範囲の自動管理は有効になりません。
結果セットの identity_support の値が 1 の場合は、次のように設定を変更します。
割り当てられた ID 範囲を変更するには、パブリッシャー側のパブリケーション データベースで sp_changemergearticle を実行します。 @propertyに対してidentity_rangeまたはpub_identity_rangeの値、および@valueの新しい範囲の値を指定します。
新しい範囲が割り当てられるしきい値を変更するには、パブリケーション データベースのパブリッシャーで sp_changemergearticle を実行します。 @property のしきい値と @value の新しいしきい値を指定します。 新しい ID 範囲が割り当てられるタイミングの詳細については、「ID 列のレプリケート」トピックの「ID 範囲の割り当て」 を参照してください。
ID 範囲の自動管理を無効にするには、パブリッシャー側のパブリケーション データベースで sp_changemergearticle を実行します。 @propertyにはidentityrangemanagementoption の値を指定し、@valueには手動またはなしを指定します。
こちらもご覧ください
ピア ツー ピア トランザクション レプリケーション
レプリケーション システム ストアド プロシージャの概念
ID 列のレプリケート