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

SQL Anywhere 12.0.1 » SQL Remote » SQL Remote システムの作成 » リモートデータベースのユニークな ID 番号

 

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

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

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

    たとえば、user_id が 1001 であるリモートユーザー 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 という名前のテンポラリテーブルを作成し、次の内容を追加します。

      名前

      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 の内容

 参照