RepAPIユーザーのためのConsolidatorの概要
この章では、RepAPIからConsolidatorへの移行の概要について説明します。 また、RepAPIおよびConsolidatorの概要、RepAPIからクライアントのスナップショットを移行するときにConsolidatorで同等の設定を行うために必要な手順についても説明します。
RepAPIは、同期レプリケーション・モデルに基づいています。 スナップショットは、クライアント側でスナップショット定義問合せを使用して作成されます。 各クライアントのスナップショット・サイトは、ローカルのOracle Liteデータベース上にすべてのログを取って独自の定義を保持しているため、基本的にクライアント・ドリブンになります。 データは水平にも垂直にもパーティション化でき、読取り専用スナップショットと更新可能スナップショットの両方がサポートされています。同期は、ナビゲータを使用するか、ocxを使用してプログラム上で行われます。Net8、Httpおよびディスク・ファイル・ベースのレプリケーションがサポートされています。 スナップショット情報は、クライアント側で保持されます。
Consolidatorは、非同期のパブリッシュ・サブスクライブ・モデルに基づいています。問合せの発行は、Oracle8iの表またはビューに対して定義されています。発行は、1つ以上のクライアントによりサブスクライブされます。Consolidatorでは、確立したサブスクリプションを使用して、各クライアント・デバイスへの新しいデータを準備します。データは水平にも垂直にもパーティション化できます。各発行には、複数の発行項目を含めることができます。 発行項目は、通常、デバイス上の表にマップされます。 同期は、Mobile Syncアプリケーションを使用するか、Mobile Sync APIを使用してプログラム上で行われます。特に、Http、OpenTransport、Hotsyncベースのレプリケーションがサポートされています。 スナップショット情報は、サーバー側で保持されます。
RepAPIはクライアント・ドリブンのため、スナップショット定義およびデータを自動的に移行する方法はありません。 次のように手動で移行を行うことをお薦めします。
1. すべてのクライアント・サイトが、サーバーで正常にリフレッシュされる必要があります。
高速リフレッシュでは競合が発生した場合に無視される可能性があるため、完全リフレッシュをお薦めします。
2. Replication Managerを使用してレプリケーションを一時停止し、サーバー上でスナップショット・ログを削除します。
3. サーバー上でログを削除します。
これで、すべてのデータがサーバー上のマスター表に格納されます。
スナップショット問合せはMobileサーバーで定義でき、スナップショットがインスタンス化されます。
プログラム上でRepAPIのocxメソッドを使用するカスタム・アプリケーションでは、かわりにMobileSync APIを使用することもできます。RepAPIを使用するクライアントでリフレッシュを実行するには、snapshotConnectionOpen、masterConnectionOpen、snapshotGroupAdd、snapshotGroupRefresh、masterConnectionCloseおよびsnapshotConnectionCloseをコールします。SyncApiを使用するクライアントでは、ocSessionInit、ocDoSynchronizeおよびocSessionTermをコールします。
RepAPIとConsolidatorモデルの対比を次に示します。
RepAPI Admin:
マスター・グループを作成します。
マスター・グループに表を追加します。
表にスナップショット・ログを作成します。
レプリケーション・サポートを生成します。
クライアントからサーバーに接続し、各クライアントに対する問合せを定義してスナップショットを作成します。
Consolidator Admin:
発行を作成します。
発行項目を作成し、それを発行に追加します。
クライアントを作成し、クライアントを発行にサブスクライブします。
クライアントのサブスクリプション・パラメータを発行に定義します。
サブスクリプションをインスタンス化します。
クライアントがサーバーに接続すると、サブスクリプションに基づいてサーバー上でスナップショットが作成されます。
発行は、リフレッシュ・グループ(テンプレート)に似ています。発行項目は、(定義問合せを使用して)リフレッシュ・グループ内のスナップショットを参照します。 クライアントは発行へのサブスクライブを行います。同期時には、発行項目とその中のスナップショット定義に基づいて様々なスナップショットが自動的に作成されます。
以降の例で、次の設定の場合のRepAPIからConsolidatorへの移行を示します。
マスター・サイトにある表
ORD_MASTER
ORD_DETAIL
クライアント・サイトにあるスナップショット
ORD_MASTER
CREATE SNAPSHOT ORD_MASTER AS
SELECT * FROM ORD_MASTER
ORD_DETAIL
CREATE SNAPSHOT ORD_DETAIL AS
SELECT * FROM ORD_DETAIL
次に示すように、Consolidator内で、スキーマSAMPLE11でデータベース・ファイルOrdersODBを使用して作成が行われます。
Consolidator内:
1. 発行を作成します。
Consolidator.CreatePublication("T_SAMPLE11", Consolidator.OKPI_CREATOR_ID, "OrdersODB.%s", null);
2. 発行項目を作成します。
Consolidator.CreatePublicationItem("P_SAMPLE11-M","SAMPLE11","ORD_MASTER", "F", "SELECT * FROM ORD_MASTER", null, null);
Consolidator.CreatePublicationItem("P_SAMPLE11-D","SAMPLE11","ORD_DETAIL", "F",
"SELECT * FROM ORD_DETAIL", null, null);
3. 発行項目を発行に追加します。
Consolidator.AddPublicationItem("T_SAMPLE11", "P_SAMPLE11-M", null, null, "S", null, null);
Consolidator.AddPublicationItem("T_SAMPLE11", "P_SAMPLE11-D", null, null, "S", null, null);
4. クライアントを作成します。
ResourceManager.createUser("S11U1","manager", "S11U1","C");
5. サブスクリプションを作成します。
Consolidator.CreateSubscription("T_SAMPLE11", "S11U1");
6. サブスクリプションをインスタンス化します。
Consolidator.InstantiateSubscription("T_SAMPLE11", "S11U1");
クライアントS11U1が最初のリフレッシュを実行すると、スナップショットORD_MASTER("Select * from ORD_MASTER")、ORD_DETAIL("Select * from ORD_DETAIL")が再作成され、高速リフレッシュが可能になります。
さらに複雑な例を示します。
マスター・サイトにある表
CUSTOMERS
ORDERS
ORDER_LINE
スナップショット・サイトにあるスナップショット
ORDER_LINE
次に示すように、ネストされた副問合せを使用すると、スナップショットが高速リフレッシュ可能になります。
CREATE SNAPSHOT order_line AS
SELECT * FROM order_line ol
WHERE EXISTS
(SELECT o_id FROM orders o
WHERE ol.o_id = o.o_id AND EXISTS
(SELECT c_id FROM customers c
WHERE o.c_id = c.c_id AND c.zip = 19555));
Consolidatorへの移行も、前述の例と同じ方法で実行できます。
発行項目は、前述の問合せを使用して作成され、発行に追加されます。
また、クライアントはさらに2つの発行項目へのサブスクライブを行います。これらの発行項目は、次に示す依存表(CUSTOMERS、ORDERS)に対して定義されている必要があります。
Consolidator.CreatePublicationItem("P_SAMPLE11-M","SAMPLE11"," CUSTOMERS ", "F", "SELECT * FROM CUSTOMERS ", null, null);
Consolidator.CreatePublicationItem("P_SAMPLE11-D","SAMPLE11"," ORDERS ", "F",
"SELECT * FROM ORDERS ", null, null);
これにより、前述のスナップショットが高速リフレッシュ可能になります。これらの発行項目を発行に追加する必要はありません。 この定義が行われていない場合、スナップショットは高速リフレッシュできなくなりますが、完全リフレッシュは可能です。
この章では主に、ConsolidatorとRepAPIの類似点およびRepAPIからConsolidatorへの移行の概要について説明しました。 Consolidatorの機能、詳細およびドキュメントについては、各開発者ガイドの同期を参照してください。