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 システムの作成 » 重複プライマリキーエラー » プライマリキープール

 

キープールの入力と補充

リモートユーザーが新しい顧客を追加するたびに、そのリモートユーザーが使用できるプライマリキーのプールは 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 を実行します。

    キープールテーブルのプライマリキー値のプールを再補充するため、ReplenishPool プロシージャーを統合データベースで定期的に実行してください。