特定の表 (たとえば、巡回医療サービスのグループの PATIENTS 表) 用のサブスクリプションを
作成する場合に、パフォーマンスを考慮し、その表内のデータのサブセットだけを
複製しなければならない場合があります。
サブスクリプションの表ごとに複製される行または列を個別に選択することによって、このサブセットを指定します。
たとえば、PATIENTS 表を使用している巡回医療サービスに関係する列は
PATIENT_NAME、ADDRESS、PHONE、および DOCTOR のフィールドだけであると決定することができます。
また、ある医者のもとで働いている看護婦のデータをフィルター操作する WHERE 文節を定義することによって、さらにデータをフィルター操作することを決定することができます。
将来であっても、データを削減するために、サブスクリプションのデータ・フィルターをグループまたは
個々のユーザーのファイル・セットと結合することができます。
このタスクは、JDBC サブスクリプションを作成するためのより大きなタスクの一部
です。以下のステップを完了したら、
『JDBC サブスクリプションの作成』に戻ってください。
手順
同期化中に複製されるデータをフィルター操作するには、以下のようにします。
- 「レプリケーション・サブスクリプションの定義」ウィンドウで「拡張」をクリックします。
「拡張サブスクリプションの定義 (Advanced Subscription Definition)」ノートブックがオープンします。
- 注:
- ソース表の主キー列をサブスクライブしなければなりません。
ソース表に主キーの一部ではない列がある場合は、この中から 1 つ以上の
列をサブスクライブしなければなりません。
- オプショナル: サブスクリプションで使用する列を選択します。
- 「拡張サブスクリプションの定義 (Advanced Subscription Definition)」ノートブックの
「ターゲット列」ページに進みます。
- 「サブスクリプション」チェック・ボックスを使用して、モバイル・デバイス上に
作成する列を選択します。選択しない列は、モバイル・デバイス上に作成されません。
- 「複製する」チェック・ボックスを使用して、ミラー・データベースに
複製する列を選択します。列をミラー・データベースに複製する必要はあるが、ハンドヘルドでは作成したくないという場合もあります。
たとえば、デフォルト値なしの NULL 可能でない列がサーバーに存在し、モバイル・デバイスにこれを作成していない場合、これをミラー・データベースに複製し、「デフォルト値」データ・フィルターを使用して
デフォルト値を提供する必要があります。
同期サーバーは、モバイル・デバイスで作成された行を、「デフォルト値」データ・フィルターで指定した
デフォルト値を使用してソースに複製して、サーバーにデフォルト値がない NULL 不能なソース列の内容とします。
- 「変更」をクリックしてターゲット列名、
デフォルト値データ・フィルター、または制約を変更します。
- 「クローズ」をクリックして「索引の作成」ウィンドウを
クローズします。
- オプショナル: ターゲット表の索引を定義します。
- 「拡張サブスクリプションの定義 (Advanced Subscription Definition)」ノートブックの
「索引」ページへ進みます。
- 「追加」をクリックして、「索引の作成」ウィンドウをオープンします。
「索引の作成」ノートブックがオープンします。
- 名前の索引を「名前」フィールドに入力します。
- 「>」、「>>」、
「<」、および「<<」
プッシュボタンを使用して、索引に組み込みたい列を選択します。
- 「上へ移動」および「下へ移動」プッシュボタンを使用して、索引を配列します。
- 「昇順」または「降順」索引を選択します。
- 「Add (追加)」をクリックして、索引を追加
します。
- 「クローズ」をクリックして「索引の作成」ウィンドウを
クローズします。
- オプショナル: サブスクリプションに組み込みたい行を個別に選択する WHERE 文節を定義します。
すべての列がレプリカに表示されるようにする場合でも、
特定の行のみをサブスクリプションに入れたい場合があります。サンプルの WHERE 文節を表示するには、
「例 (Examples)」をクリックします。
- 「拡張サブスクリプションの定義 (Advanced Subscription Definition)」ウィンドウの
「行」ページへ進みます。
- 「すべての行」フィールドで、サブスクリプションに表示する行の選択を定義する WHERE 文節を入力します。ステップ 1 で
選択した表からのみ、行を選択できます。
例えば、JOBCODE 列の値が VNURSE である PATIENTS 表におけるデータ行のみを
訪問看護婦が見るようにすると仮定します。この場合は、次の WHERE 文節を入力するとします。
JOBCODE='VNURSE'
文節の先頭に WHERE を入力する必要はありません。
- 「個々のユーザーがもつ行のサブセット」フィールドに、
個々のユーザーが見ることができる行をさらに制限するために、SQL WHERE 文節によく似た文節を
入力することができます。文節の先頭に「WHERE」と入力しないでください。ユーザーによって値
を変えられるパラメーターを使用することもできます。
グループ・レベルまたはユーザー・レベルでのフィルターの定義についての
詳細は、サブスクリプション・レベルでのデータのフィルター操作を参照してください。
例えば、ユーザーが見ることが
できるデータを、ジョブ・コードに関連するデータだけに限定したいと仮定します。
全体のサブスクリプションの JOBCODE パラメーターの値をハードコーディングする代わりに、
個々のユーザーごとに定義されたデータ・フィルターを参照する変数を定義してください。
JOBCODE=':JOB'
個々のユーザーのデータ・フィルターに、それぞれのユーザーのジョブ・コ
ードに対する :JOB パラメーターを設定することができます。
個々のユーザーのためのデータのフィルター操作についての詳細
は、ユーザーが使用可能なデータのフィルター操作および サブスクリプション・レベルでのデータのフィルター操作を参照してください。
- 「OK」をクリックして、
「拡張サブスクリプションの定義 (Advanced Subscription Definition)」ウィンドウをクローズします。
- 「OK」をクリックして「レプリケーション・サブスクリプションの定義」ウィンドウに戻ります。
- 注:
- 一連の変更は、ユーザーのデバイス上にある DB2 Everyplace の表の
単一行に対して行われ、単一の累積変更として同期サーバーに通知されます。
その結果、操作中に同期化が行われない場合、同じ主キーに対して
DELETE 操作、INSERT 操作の順に操作が行われると、同期サーバーには UPDATE 操作と
して通知されます。操作中に同期が行われると、これらは別個に通知されます。
サブスクリプションはソース表とユーザー表との間ですべての列を転送しないので、
単一行に対して一連の変更を行うと不整合が生じる可能性があります。
UPDATE 操作はサブスクライブしていない列の現行値を保存しますが、
INSERT はサブスクライブしていない列にデフォルト値を設定します。
関連した概念
関連したタスク