ID 列の管理
このトピックでは、SQL Server Management Studioまたは Transact-SQL を使用して、SQL Server 2014 の ID 列を管理する方法について説明します。 サブスクライバー挿入がパブリッシャーにレプリケートされる場合、サブスクライバーとパブリッシャーに同じ ID 値が割り当てられないように、ID 列を管理する必要があります。 レプリケーションでは ID の範囲を自動的に管理することも、ID の範囲を手動で管理することもできます。 レプリケーションで使用できる ID 範囲管理オプションについては、「ID 列のレプリケート」を参照してください。
はじめに
推奨事項
複数のパブリケーションでテーブルをパブリッシュする場合、両方のパブリケーションに同じ ID 範囲管理オプションを指定する必要があります。 詳細については、「データとデータベース オブジェクトのパブリッシュ」の「複数のパブリケーションでのテーブルのパブリッシュ」を参照してください。
複数のテーブルで使用できる自動的に増分する番号、またはテーブルを参照せずにアプリケーションから呼び出すことができる自動的に増分する番号を作成するには、「シーケンス番号」を参照してください。
SQL Server Management Studio を使用する
パブリケーションの新規作成ウィザードの [アーティクルのプロパティ -< アーティ>クル] ダイアログ ボックスの [プロパティ] タブで、ID 列管理オプションを指定します。 このウィザードの使用の詳細については、「パブリケーションの作成」を参照してください。 パブリケーションの新規作成ウィザードで選択した内容に応じて、次の操作を行います。
[パブリケーションの種類] ページで [マージ パブリケーション] または [更新可能なサブスクリプションを含むトランザクション パブリケーション] を選択した場合は、ID 範囲の管理を自動または手動に設定します (自動 (既定値) に設定することを推奨します)。 このプロパティは、テーブルがパブリッシュされた後は変更できません。ただし、その他の関連プロパティは変更できます。
他のパブリケーションの種類を選択した場合は、ID 範囲の管理を手動に設定する必要があります。
[アーティクルのプロパティ] -[アーティ>クル] の< [プロパティ] タブの ID 範囲としきい値を変更します。このタブは、[パブリケーションのプロパティ - <パブリケーション>] ダイアログ ボックスで使用できます。 このダイアログ ボックスへのアクセス方法の詳細については、「パブリケーション プロパティの表示および変更」を参照してください。
ID 列の管理オプションを指定するには
パブリッシャーが 2005 年SQL Serverより前のバージョンのSQL Serverを実行している場合は、パブリケーションの新規作成ウィザードの [パブリケーションの種類] ページで、[パブリケーションのマージ] または [トランザクション パブリケーションと更新サブスクリプション] を選択します。
[アーティクル] ページで、ID 列があるテーブルを選択します。
[アーティクルのプロパティ] をクリックしてから、 [反転表示されたテーブル アーティクルのプロパティを設定] をクリックします。
[アーティクルのプロパティ - <アーティクル>] ダイアログ ボックスの [プロパティ] タブの [ID 範囲の管理] セクションで、[ID 範囲の自動管理] プロパティを [自動] または [手動] (SQL Server 2005 以降を実行しているパブリッシャーの場合)、または True または False (以前のバージョンのSQL Serverを実行しているパブリッシャーの場合) に設定します。SQL Server 2005)。
手順 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 列の最大値です。 列の基本データ型によって決まります。 Increment 整数値。 読み取り専用です。 挿入のたびに ID 列の番号が増減する量。通常は 1 に設定されます。 [OK] をクリックします。
テーブルがパブリッシュされた後に ID 範囲としきい値を変更するには
[パブリケーションのプロパティ - <パブリケーション>] ダイアログ ボックスの [アーティクル] ページで、ID 列を持つテーブルを選択します。
[アーティクルのプロパティ] をクリックしてから、 [反転表示されたテーブル アーティクルのプロパティを設定] をクリックします。
[アーティクルのプロパティ - <アーティクル>] ダイアログ ボックスの [プロパティ] タブの [ID 範囲の管理] セクションで、1 つ以上のプロパティの値を入力します。パブリッシャー範囲のサイズ、サブスクライバー範囲のサイズ、範囲のしきい値の割合。
[OK] をクリックします。
[パブリケーションのプロパティ - <パブリケーション>] ダイアログ ボックスで [OK] をクリックします。
Transact-SQL の使用
レプリケーション ストアド プロシージャを使用して、アーティクルを作成するときの ID 範囲管理オプションを指定できます。
トランザクション パブリケーションのアーティクルを定義する際に自動 ID 範囲管理を有効にするには
パブリッシャー側のパブリケーション データベースに対して、 sp_addarticleを実行します。 パブリッシュされるソース テーブルに ID 列がある場合は、@identityrangemanagementoptionの auto の値、@pub_identity_range用にパブリッシャーに割り当てられる ID 値の範囲、@identity_rangeの各サブスクライバーに割り当てられる ID 値の範囲、および新しい ID 範囲が@thresholdに割り当てられる前に使用される ID 値の合計の割合を指定します。 アーティクルの定義の詳細については、「Define an Article」 (アーティクルの定義) を参照してください。
注意
ID 列のデータ型のサイズが、すべてのサブスクライバーに割り当てられる ID 範囲の総計をサポートできるだけの大きさであることを確認してください。
トランザクション パブリケーションのアーティクルを定義する際に自動 ID 範囲管理を無効にするには
パブリッシャー側のパブリケーション データベースに対して、 sp_addarticleを実行します。 @identityrangemanagementoptionに manual の値を指定します。 アーティクルの定義の詳細については、「Define an Article」 (アーティクルの定義) を参照してください。
サブスクライバーの更新時に競合が発生しないように、サブスクライバーの ID アーティクル列に範囲を割り当てます。 詳細については、トピック「ID 列のレプリケート」で、手動による ID 範囲管理用に範囲を割り当てる方法に関する部分を参照してください。
マージ パブリケーションのアーティクルを定義する際の自動 ID 範囲管理を有効にするには
パブリッシャー側のパブリケーション データベースに対して、 sp_addmergearticleを実行します。 公開されるソース テーブルに ID 列がある場合は、@identityrangemanagementoptionの auto の値、@pub_identity_rangeのサーバー サブスクリプションに割り当てられた ID 値の範囲、パブリッシャーに割り当てられた ID 値の範囲、@identity_rangeの各クライアント サブスクリプション、および新しい ID 範囲が@thresholdに割り当てられる前に使用される ID 値の合計割合を指定します。 いつ新しい ID 範囲が割り当てられるのかについては、「ID 列のレプリケート」の「ID 範囲の割り当て」を参照してください。 アーティクルの定義の詳細については、「Define an Article」 (アーティクルの定義) を参照してください。
注意
特にサーバー サブスクリプションを使用するサブスクライバーの場合、ID 列のデータ型のサイズが、すべてのサブスクライバーに割り当てられる ID 範囲の総計をサポートできるだけの大きさであることを確認してください。
マージ パブリケーションのアーティクルを定義する際に自動 ID 範囲管理を無効にするには
パブリッシャー側のパブリケーション データベースに対して、 sp_addmergearticleを実行します。 @identityrangemanagementoptionに次のいずれかの値を指定します。
manual - サブスクライバーを更新するには、手動で ID 範囲を割り当てる必要があります。
none - パブリッシャーの ID 列は、サブスクライバーの ID 列として定義されません。
アーティクルの定義の詳細については、「Define an Article」 (アーティクルの定義) を参照してください。
サブスクライバーの更新時に競合が発生しないように、サブスクライバーの 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には manual または none を指定します。
参照
ピア ツー ピア トランザクション レプリケーション
Replication System Stored Procedures Concepts
ID 列のレプリケート