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 のレプリケーション設計と設定 » 重複プライマリ・キー・エラー » プライマリ・キー・プールの使用

 

キー・プールの入力と補充

リモート・ユーザが新しい顧客を追加するたびに、そのリモート・ユーザが使用できるプライマリ・キーのプールは 1 つずつ減少します。統合データベースのプライマリ・キー・プール・テーブルの内容は定期的に補充して、リモート・データベースに新しいプライマリ・キーをレプリケートする必要があります。

♦  はじめにプライマリ・キー・プールを値で埋めるには、次の手順に従います (SQL の場合)。
  1. 統合データベースで、プライマリ・キー・プールを値で埋めるためのプロシージャを作成します。

    トリガを使用してキー・プールを補充しない

    トリガ・アクションはレプリケートされないため、キー・プールの補充にはトリガを使用できません。

    次に例を示します。

    CREATE PROCEDURE ReplenishPool()
    BEGIN
       FOR EachTable AS TableCursor
       CURSOR FOR
          SELECT table_name
          AS CurrTable, max(value) as MaxValue
          FROM KeyPool
          GROUP BY table_name
       DO
          FOR EachRep AS RepCursor
          CURSOR FOR
             SELECT location
             AS CurrRep, COUNT(*) AS NumValues
             FROM KeyPool
             WHERE table_name = CurrTable
             GROUP BY location
          DO
             // make sure there are 100 values.
             // Fit the top-up value to your
             // requirements
             WHILE NumValues < 100 LOOP
                SET MaxValue = MaxValue + 1;
                SET NumValues = NumValues + 1;
                INSERT INTO KeyPool
                (table_name, location, value)
                VALUES
                (CurrTable, CurrRep, MaxValue);
             END LOOP;
          END FOR;
       END FOR;
    END;
  2. 各ユーザのプライマリ・キー・プールにプライマリ・キーの初期値を挿入します。

    ReplenishPool プロシージャには、各サブスクライバに対して少なくとも 1 つのプライマリ・キー値が必要です。これによって、最大値を検索し、値を追加して次のセットを生成できます。

    はじめにプールを値で埋めるには、各ユーザに対して値を 1 つ挿入してから、ReplenishPool を呼び出して残りを埋めます。次の例では、3 人のリモート・ユーザと単一の統合ユーザ Office について示します。

    INSERT INTO KeyPool VALUES( 'Customers', 40, 'user1' );
    INSERT INTO KeyPool VALUES( 'Customers', 41, 'user2' );
    INSERT INTO KeyPool VALUES( 'Customers', 42, 'user3' );
    INSERT INTO KeyPool VALUES( 'Customers', 43, 'Office');
    CALL ReplenishPool();

    ReplenishPool プロシージャによって、各ユーザのプールの値が 100 個まで増えます。指定する値は、ユーザがデータベースのテーブルにローを挿入する頻度によって異なります。

  3. 定期的に ReplenishPool を実行します。

    KeyPool テーブルのプライマリ・キー値のプールを再補充するため、ReplenishPool プロシージャを統合データベースで定期的に実行する必要があります。