18.4.10 データ同期化の管理

「データ同期化」を有効にすると、ローカル表の内容をRESTサービスのデータと自動的に同期できます。

関連項目:

『Oracle APEX管理ガイド』バックグラウンド・ジョブの構成

18.4.10.1 データ同期化について

データ同期化では、開発者は、ローカル表のコンテンツをRESTサービスのデータと自動的に同期化できます。

データ同期化は、手動でトリガーすることも、スケジューラ・ジョブを使用して定期的にトリガーすることもできます。スケジュールどおりにRESTソース同期化を実行するには、アプリケーションの解析対象スキーマにCREATE JOB権限を付与する必要があります。

Oracle APEXでは、RESTデータ・ソースの「データ・プロファイル」の表示列に基づいてローカル表を作成できます。この表はデータベース・スキーマの表示オブジェクトであるため、開発者は、索引の追加、物理プロパティの変更または別の列の追加を行うことができます。

表がデータ・プロファイルと同期していない場合、データ同期化は表とデータ・プロファイルの両方に存在する列を対象に動作し続けます(他の列は無視されます)。ただし、APEXでは、データ・プロファイルに表の列を同期化するためのSQL DDL文が生成されます。これらの文は、サポートするオブジェクトとしてアプリケーションに追加できます。

データ同期化のユースケース

RESTデータ・ソースのデータ同期化を使用する一般的なユースケースには、次のものがあります。

  • RESTサービスから取得された大きいデータ・セットに関する効率的なレポートの提供

    一部のRESTサービスは、ページ区切りを含む大量の結果データを返すことがあります。レポート要件でより大きなデータ・セットが必要な場合は、複数のHTTPリクエストが発行され、レスポンス時間が遅くなる可能性があります。索引やその他のデータベース機能を使用して、レポート問合せを高速化することもできません。この場合は、データ同期化を有効にしてリモート・データをローカル表に同期し、ローカル表に基づくレポートを作成することをお薦めします。

  • RESTサービスからの、PL/SQLパッケージまたはその他のロジックで使用するデータの収集

    RESTサービスからのデータをローカル表にレプリケートすると、開発者は、ローカル表についてあらゆる種類の処理を実行したり様々なレポートを作成できます。

  • REST APIからの長期間にわたるデータの収集

    一部のREST APIでは、最近の期間のデータのみが提供されます。長期間のレポートを作成する場合、開発者は、データ同期化を使用してRESTデータをフェッチし、ローカル表に格納できます。このユースケースでは、後続の2つのRESTリクエストで重複するデータ・セットが返されるため、主キーによるマージ機能も必要になる場合があります。

  • APEXコンポーネントへのインテリジェント・キャッシュの利用

    RESTデータ・ソースには、すでにキャッシュ・メカニズムが用意されています。APEXは、JSONレスポンスをCLOBとしてキャッシュ表にキャッシュします。APEXコンポーネントでRESTデータ・ソースが使用され、キャッシュが失効していない場合は、HTTPリクエストが保存され、キャッシュされたJSONが使用されます。ただし、JSONは引き続き解析する必要があります(つまり、データ・セットが大きいと、JSON解析のオーバーヘッドが大きくなります)。索引またはその他のデータベース・テクノロジを使用して問合せを高速化することはできません。JSONは解析されなくなり、レポート問合せをサポートするように表を最適化できるため、名前付きローカル表内のキャッシュにより、より適切なレベルのキャッシュが作成されます。

18.4.10.2 RESTソース同期のインポートおよびエクスポートについて

アプリケーションのインポート後、RESTソースの同期は無効になります。インポート後に同期化を有効にする方法について学習します。

バージョン管理などの目的で、開発者はアプリケーションをワークスペースに複数回インポートすることがよくあります。これらのインポート時に同期が有効になっていた場合は、これにより複数の同期インスタンスが同時に実行されることになります。これは望ましい結果ではありません。したがって、Oracle APEXでは、アプリケーションのインポート後に同期が無効になります。

次の例に示すように、次のPL/SQLブロックを使用して、共有コンポーネント、RESTデータ・ソース、同期管理またはランタイムのみの環境で同期を直接アクティブ化できます。

例18-1 同期を有効にし、すぐに実行スケジュールを開始する

declare
    l_app_id number := {new application ID};
begin
    apex_session.create_session(
        p_app_id => l_app_id,
        p_page_id => {one of the application pages},
        p_username => '{workspace user}');

    apex_rest_source_sync.enable(
        p_application_id => l_app_id,
        p_module_static_id => '{REST Source static ID}');
end;

例18-2 同期を有効にし、次の実行タイムスタンプを明示的に設定する

declare
    l_app_id number := {new application ID};
begin
    apex_session.create_session(
        p_app_id => l_app_id,
        p_page_id => {one of the application pages},
        p_username => '{workspace user}');

    apex_rest_source_sync.reschedule(
        p_application_id => l_app_id,
        p_module_static_id => '{REST Source static ID}');
        p_next_run_at => trunc( sysdate + 1 ), -- next midnight
end;

18.4.10.3 REST同期化の構成

ローカル表をRESTサービスからのデータと自動的に同期するように、REST同期化を構成します。

新しいREST同期化を作成するには、まず新しいRESTデータ・ソースを作成してから、「同期化の管理」をクリックして詳細を構成します。

データ同期化を構成するには:

  1. 「共有コンポーネント」に移動します:
    1. ワークスペースのホームページで、「アプリケーション・ビルダー」をクリックします。
    2. アプリケーションを選択します。
    3. アプリケーションのホームページで、「共有コンポーネント」をクリックします。

    共有コンポーネント・ページが表示されます。

  2. 「RESTデータ・ソース」を表示します:
    1. 「共有コンポーネント」ページで、「データ・ソース」を見つけて、「RESTデータ・ソース」を選択します。
    2. 「RESTデータ・ソース」ページで、RESTソースの名前を選択します。
  3. 「同期化の管理」をクリックします。
    「REST同期化」ページが表示されます。
  4. 「詳細」で、次の項目を指定します。
    1. ローカル表の所有者 - データを同期化するローカル表のスキーマを選択します。デフォルトでは、アプリケーションの解析対象スキーマが使用されます。
    2. 同期先 - 「新規表」または「既存の表」を選択します。
      • 「既存の表」の場合:
        • 表名 - 既存の表名を選択します。
        • ネストした行 - データをローカル表に同期する場合に選択します。
        • 「保存」をクリックします。
      • 「新規表」の場合:
        • 表名 - 新しい表の名前を入力します。
        • ネストした行 - データをローカル表に同期するには、「ネストした行」を選択します。

          新しい表を作成する場合、メッセージTable does not existが表示されます。「表の作成」をクリックします。

        • 「保存」をクリックします。
    3. 表名 -
    4. 同期タイプ: 同期タイプを選択します。
      • 追加 - ローカル表に行を追加します。これは通常、データ・プロファイルに主キーが定義されていない場合に使用されます。

      • マージ - ローカル表に行をマージします。このオプションを使用するには、データ・プロファイルに主キーが定義されている必要があります。指定した主キー値の行が存在する場合は、その行が更新されます。そうでない場合は、行が作成されます。

      • 置換 - 新しいデータをロードする前にローカル表を空にします。

    5. 同期スケジュール - データベース・スケジューラ・カレンダ構文を使用して、同期化の繰返しスケジュールを定義します(毎週火曜日と金曜日の午後4時毎月第2水曜日など)。

      カレンダ構文は、間隔ビルダーを使用して単純な式を作成することで、手動または宣言的に入力できます。間隔ビルダーを使用するには、「レンチ」アイコンをクリックします。

      より複雑な実行スケジュールの場合は、DBMS_SCHEDULER PL/SQLパッケージでのスケジューラ・カレンダ構文について詳細を確認し、式を手動で指定します。

      ノート:

      スケジューラ・カレンダ構文の詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』DBMS_SCHEDULERの操作上のノートを参照してください

  5. 「ステップ」で、次のようにします - 「ステップの追加」をクリックして、パラメータ値または特定の外部フィルタをRESTサービスに渡します。
    ステップが定義されていない場合、RESTデータ・ソースがデフォルトのパラメータで一度起動されます。ステップが定義されている場合、APEXはRESTデータ・ソースをステップごとに一度起動し、構成済パラメータを渡します。
  6. 「詳細設定」で、次の項目を指定します。
    1. コミット間隔 - データ同期中に使用するコミット間隔を指定します。指定しない場合、同期化全体が1つのトランザクションになり、最終行の後にコミットが行われます。間隔を指定すると、APEXは指定された行数が処理されるたびにコミットします。
    2. HTTPリクエスト制限 - 必要に応じて、同期化ステップごとに行うHTTPリクエストの最大数を指定します。この制限を超えると、同期化は停止し、Incompleteとしてログに記録されます。
      実際の実行メソッドが原因で、同期化はこの制限をリクエスト1つ分超えることに注意してください。たとえば、10という制限を指定した場合、同期化は11番目のリクエストが発行された後に停止します。
    3. 簡易レート制限の有効化 - 有効にすると、APEXでは、指定された時間枠内で限られた数のHTTPリクエストのみが実行されます。このレート制限は、純粋に一定の時間枠内に実行されるHTTPリクエストの数に基づいています。RESTサービスから返されたHTTPレスポンス・ヘッダーは調査されません。
  7. 変更内容を保存するには、保存をクリックします。
  8. REST同期化を実行するには、「保存して実行」をクリックします。

18.4.10.4 アプリケーションで定義されているREST同期化の表示

現在のアプリケーションで定義されているREST同期化を表示します。

現在のアプリケーション用に定義されているREST同期化を表示するには:

  1. そのアプリケーションを選択し、「共有コンポーネント」に移動します。
    1. ワークスペースのホームページで、「アプリケーション・ビルダー」をクリックします。
    2. アプリケーションを選択します。
    3. アプリケーションのホームページで、「共有コンポーネント」をクリックします。

    共有コンポーネント・ページが表示されます。

  2. 「タスク」で、「REST同期化」をクリックします。
    「同期化」ページに、現在のアプリケーションで定義されているREST同期化が表示されます。

18.4.10.5 同期化設定のクリア

同期化設定をクリアすると、同期化処理が停止され、同期化に関連するRESTデータ・ソース属性がすべてリセットされます。

APEXコンポーネントは、ローカル同期化表を使用している場合、RESTサービスを直接使用するようにリセットされます。

同期化設定をクリアするには:

  1. そのアプリケーションを選択し、「共有コンポーネント」に移動します。
    1. ワークスペースのホームページで、「アプリケーション・ビルダー」をクリックします。
    2. アプリケーションを選択します。
    3. アプリケーションのホームページで、「共有コンポーネント」をクリックします
  2. 「共有コンポーネント」ページで、「タスク」リストから「REST同期化」を選択します。
  3. 「REST同期化」を選択します。
  4. 「設定のクリア」をクリックします。

18.4.10.6 同期化の使用状況の表示

ローカル同期化表をデータ・ソースとして現在使用しているアプリケーション・コンポーネントのレポートを表示します。

同期化の使用状況レポートを表示します。

  1. そのアプリケーションを選択し、「共有コンポーネント」に移動します。
    1. ワークスペースのホームページで、「アプリケーション・ビルダー」をクリックします。
    2. アプリケーションを選択します。
    3. アプリケーションのホームページで、「共有コンポーネント」をクリックします
  2. 「共有コンポーネント」ページで、「タスク」リストから「REST同期化」を選択します。
  3. 「REST同期化」を選択します。
  4. 「詳細」で、「同期化の使用状況」をクリックします。
    ローカル同期化表をデータ・ソースとして現在使用しているアプリケーション・コンポーネントを示すレポートが表示されます。

18.4.10.7 REST同期ログの管理

REST同期ログについて学習します。

関連項目:

Oracle APEX管理ガイドREST同期ログ・エントリの削除

18.4.10.7.1 REST同期ログについて

REST同期ログには、以前に実行された同期化の詳細が記録されます。

同期化が正常に実行されると、「同期化」ページの「ログ」にREST同期ログが表示されます。

REST同期ログには、ステータス(成功または失敗)、処理された行数、発行されたHTTPリクエストの数など、以前に実行された同期化の詳細が含まれます。同期ログからWebサービス・ログにドリルダウンして、この同期化に対して行われた個々のHTTPリクエストを確認できます。

18.4.10.7.2 同期ログのパージ

REST同期ログをパージします。

REST同期ログを削除するには:

  1. そのアプリケーションを選択し、「共有コンポーネント」に移動します。
    1. ワークスペースのホームページで、「アプリケーション・ビルダー」をクリックします。
    2. アプリケーションを選択します。
    3. アプリケーションのホームページで、「共有コンポーネント」をクリックします
  2. 「共有コンポーネント」ページで、「タスク」リストから「REST同期化」を選択します。
  3. 「REST同期化」を選択します。

    「同期化」ページが表示されます。

    RESTデータ・ソース同期ログは、ページ下部の「ログ」の下に表示されます。

  4. 「ログ」で、「ログのパージ」をクリックします。