リモート・ユーザが新しい顧客を追加するたびに、そのリモート・ユーザが使用できるプライマリ・キーのプールは 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; |
各ユーザのプライマリ・キー・プールにプライマリ・キーの初期値を挿入します。
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 個まで増えます。指定する値は、ユーザがデータベースのテーブルにローを挿入する頻度によって異なります。
定期的に ReplenishPool を実行します。
KeyPool テーブルのプライマリ・キー値のプールを再補充するため、ReplenishPool プロシージャを統合データベースで定期的に実行する必要があります。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |