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

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

 

データベース抽出時のデータベース ID 番号の設定

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

前提条件

MANAGE REPLICATION システム権限を持つユーザが作成できるフックプロシージャ。ただし、フックによる情報のやり取りに使用される #hook_dict table にフックがアクセスできることを確認するには、フックが次のいずれかの要件を満たしている必要があります。

  • SELECT ANY TABLE および UPDATE ANY TABLE システム権限を持つユーザが所有します。

  • CREATE PROCEDURE 文の SQL SECURITY INVOKER 句を使用して定義されます。

 ♦ タスク
  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 の内容

結果

ユニークなデータベース ID 番号が設定されます。

 参照