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 番号の設定

抽出ユーティリティ (dbxtract) またはデータベース抽出ウィザードを使用してリモート・データベースを作成する場合は、ストアド・プロシージャを作成して、ユニークなデータベース ID 番号を設定するタスクを自動化できます。

♦  ユニークなデータベース ID 番号の設定を自動化するには、次の手順に従います。
  1. sp_hook_dbxtract_begin という名前のストアド・プロシージャを作成します。

    たとえば、user_id が 101 であるリモート・ユーザ user2 のデータベースを抽出するには、次の文を実行します。

    SET OPTION "PUBLIC"."global_database_id" = '1';
    CREATE TABLE extract_id (next_id INTEGER NOT NULL) ;
    INSERT INTO extract_id VALUES( 1 );
    CREATE PROCEDURE sp_hook_dbxtract_begin
    AS
        DECLARE @next_id  INTEGER
        UPDATE extract_id SET next_id = next_id + 1000
        SELECT @next_id = (next_id )
        FROM extract_id
        COMMIT
        UPDATE #hook_dict
        SET VALUE = @next_id
        WHERE NAME = 'extracted_db_global_id';

    データベースが抽出されるたびに、global_database_id の値が毎回異なります。1 回目は 1001、2 回目は 2001 などとなります。

  2. -v オプションを指定した抽出ユーティリティ (dbxtract) またはデータベース抽出ウィザードを実行して、リモート・データベースを抽出します。抽出ユーティリティは、次のタスクを実行します。

    1. #hook_dict という名前のテンポラリ・テーブルを作成し、次の内容を追加します。

      name value

      extracted_db_global_id

      抽出されるユーザ ID

      sp_hook_dbxtract_begin プロシージャを作成してローの value カラムを修正する場合、その値は抽出されたデータベースの global_database_id オプションとして使用され、DEFAULT GLOBAL AUTOINCREMENT 値のプライマリ・キー値範囲の開始位置にマークを付けます。

      • sp_hook_dbxtract_begin プロシージャを定義しない場合、抽出されるデータベースは、global_database_id が 101 に設定されます。

      • sp_hook_dbxtract_begin プロシージャを定義しても、このプロシージャが #hook_dict のいずれのローも修正しない場合、global_database_id は 101 に設定されたままになります。

    2. sp_hook_dbxtract_begin を呼び出します。

    3. プロシージャ・フックのデバッグに役立つように、次の情報を出力します。

      • 検出されたプロシージャ・フック

      • プロシージャ・フックが呼び出される前の #hook_dict の内容

      • プロシージャ・フックが呼び出された後の #hook_dict の内容

参照