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