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

SQL Anywhere 11.0.1 (日本語) » SQL Remote » SQL Remote のレプリケーション設計 » SQL Remote のレプリケーション設計と設定

 

各データベースへのユニークな ID 番号の割り当て

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

global_database_id オプションの使用

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

global_database_id が負ではない整数に設定されている場合、SQL Anywhere は次のルールを適用してデフォルト値を選択します。

  • カラムに現在の分割の値が含まれていない場合、最初のデフォルト値は pn + 1 である。

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

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

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

public オプション global_database_id は、負の値に設定できないため、選択された値は常に正になります。ID 番号の最大値を制限するのは、カラムのデータ型と分割サイズだけです。

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

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

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

参照

global_database_id 値の設定
データベース抽出時のユニークなデータベース ID 番号の設定