Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » Mobile Link - サーバ管理 » Mobile Link サーバ・テクノロジの使用 » 同期の方法 » ユニークなプライマリ・キーの管理 » グローバル・オートインクリメントの使用

 

グローバル・データベース ID の設定

アプリケーションを配備するときには、各データベースに対して必ず異なる ID 番号を割り当てます。ID 番号はさまざまな方法で作成して配布できます。テーブルに値を設定し、リモート ID など、ユニークなプロパティに基づいて、各データベースに適切なローをダウンロードするのも 1 つの方法です。

♦  グローバル・データベース ID 番号を設定するには、次の手順に従います。
デフォルト値の選択方法

グローバル・データベース ID は、SQL Anywhere ではパブリック・オプション global_database_id、Ultra Light では global_id オプションを使用して設定します。

各データベース内のグローバル・データベース ID オプションは、ユニークな正の整数に設定してください。特定のデータベースのデフォルト値の範囲は、pn + 1 ~ p(n + 1) です。ここで、p は分割サイズ、n はグローバル・データベース ID の値を表します。たとえば、分割サイズを 1000、グローバル・データベース ID を 3 に設定すると、範囲は 3001 ~ 4000 になります。

SQL Anywhere と Ultra Light では、次の規則を適用してデフォルト値を選択します。

  • カラムに現在の分割の値が含まれていない場合、最初のデフォルト値は pn + 1 である。ここで、p は分割サイズ、n はグローバル・データベース ID の値を表します。

  • カラムに現在の分割の値が含まれていても、そのすべてが p(n + 1) 未満であれば、この範囲内でこれまで使用した最大値より 1 大きい値が次のデフォルト値になる。

  • デフォルトのカラム値は、現在の分割以外のカラムの値の影響を受けない。つまり、pn + 1 より小さいか p(n + 1) より大きい数には影響されない。Mobile Link 同期を介して別のデータベースからレプリケートされた場合に、このような値が存在する可能性があります。

グローバル・データベース ID がデフォルト値の 2147483647 に設定されると、カラムには NULL 値が挿入されます。NULL 値が許可されていない場合に、ローの挿入を試みるとエラーが発生します。たとえば、テーブルのプライマリ・キーにカラムが含まれている場合に、この状況が発生します。

グローバル・データベース ID には負の値は設定できないので、正の値が常に選択されます。ID 番号の最大値を制限するのは、カラムのデータ型と分割サイズだけです。

デフォルトの NULL 値は、分割で値が不足したときにも生成されます。この場合には、データベースに新しいグローバル・データベース ID 値を割り当てて、別の分割からデフォルト値を選択できるようにしてください。カラムで NULL が許可されていない場合、NULL 値を挿入しようとするとエラーが発生します。未使用の値が残り少ないことを検出し、このような状態を処理するには、GlobalAutoincrement タイプのイベントを作成できます。

特定の分割で値が不足する場合は、新しいグローバル・データベース ID をそのデータベースに割り当てることができます。方法が適切なものであれば、新しいデータベース ID 番号を割り当てることができます。未使用のデータベース ID 値のプールを管理する方法も、その 1 つです。このプールは、プライマリ・キー・プールと同じ方法で管理されます。

分割で値が不足しそうな場合に、自動的にデータベース管理者へ通知する (またはその他のアクションを実行する) ようにイベント・ハンドラを設定できます。SQL Anywhere データベースについては、イベントのトリガ条件の定義を参照してください。

参照

SQL Anywhere データベースでは、次の文はデータベース ID 番号を 20 に設定します。

SET OPTION PUBLIC.global_database_id = 20

特定カラムの分割サイズが 5000 の場合、このデータベースのデフォルト値は 100001 ~ 105000 の範囲から選択されます。