プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle Service Busの管理
12c (12.1.3)
E53003-05
目次へ移動
目次

前
次

16 リシーケンサ表の管理

この章では、リシーケンス・データを格納するデータベース表のクリーンアップについて説明します。 Service Busプロジェクトで着信メッセージを並べ替えるためにリシーケンスを使用する場合、メッセージ・ペイロードとメタデータおよびリシーケンス・グループ情報がリシーケンス・データベース表に格納されます。Service Busには、これらの表のサイズの管理と古いレコードのクリーン・アップに役立つスクリプトが用意されています。

この章の内容は次のとおりです。

16.1 リシーケンサ・データベース表について

リシーケンサは、データベースに依存して、処理するメッセージの格納、グループ化および並べ替えを行います。このデータベースには、リシーケンサのメッセージおよびグループの情報を格納するための表が含まれています。

このデータベースは、ドメインに対してリポジトリ作成ユーティリティ(RCU)を実行すると自動的に作成されます。正常に処理されたメッセージを自動的にパージするようにリシーケンサを構成できますが、それでも、データベース内のリシーケンス・データを手動で管理する必要がある場合があります。Service Busには、リシーケンス・データをパージし、データベースをクリーン・アップするためのSQLパージ・スクリプトが用意されています。

16.1.1 データベース表パージ・スクリプト

Service Busのリシーケンサ・データをパージするスクリプトは、他のSOA Suiteコンポーネント・パージ・スクリプトとともに/MW_HOME/soa/common/sql/soainfra/sql/oracle/121300/soa_purge12にあります。メインのSOA Suiteパージ・スクリプト(すべてのコンポーネントのデータをパージするスクリプト)を実行すると、Service Busのリシーケンス・データもパージされます。リシーケンス・グループのグループ情報は、そのグループの次のシーケンスIDに必要な情報を含むため、削除されません。この情報をパージすると、最初のシーケンスIDからグループを始めることと同じになり、意図に反することになる可能性があります。

SOA Suiteのパージ・プロシージャは、パラレル・モードまたはループ・モードで実行できることに注意してください。Service Busプロシージャはループ・モードでのみ実行できます。

16.1.2 完了リシーケンサ・メッセージの自動パージ

Service Busには、「完了メッセージのパージ」というグローバル設定があり、この設定は正常に処理されたリシーケンス済メッセージを自動的にパージするかどうかを決めます。処理されたメッセージは、次のガイドラインに従って、データベースからパージされます。

  • 「完了メッセージのパージ」が選択されている場合のみ、正常に処理されたメッセージがデータベースから自動的に削除されます。この設定は、デフォルトで選択されています。メッセージを自動的にパージしない場合は、この設定のチェック・ボックスを選択解除する必要があります。

  • 「完了メッセージのパージ」が選択されている場合、すべてのタイプのリシーケンサで、メッセージ・メタデータが自動的にパージされます。

  • 失敗したメッセージがパージされることはありません。

  • グループ情報はパージされません。

メッセージとメタデータが自動的にパージされない場合のために、Service Busには、データベース内のリシーケンサ表をパージおよび管理するためのスクリプトが用意されています。

16.1.3 リシーケンスのためのデータソース

リシーケンサは、デフォルトのOracle SOA Suiteデータソースであるjdbc/SOADataSourceを使用して、データベース内のリシーケンス表に接続します。このデータソースは、SOA SuiteまたはService Busをインストールし、WebLogic Serverドメインを作成すると、自動的に作成されます。リシーケンサ・データソースでは、JNDI名はjdbc/SOADataSourceである必要があります。また、リシーケンサ・データソースは、リポジトリ作成ユーティリティ(RCU)によって作成されたsoainfraデータベースに接続します。

16.1.4 パージ・スクリプトおよびリシーケンス済メッセージのパージ・ステータス

パージ・スクリプトには、Service Busのリシーケンサ表(osb_msgosb_group_statusおよびosb_resequencer_message)に保持されている情報をパージするためのパージ・コマンドが含まれています。パージ・スクリプトを実行すると、次の情報がリシーケンサ表からパージされます。

  • すべてのリシーケンサ・タイプの完了したメッセージおよび中断したメッセージ

  • 標準のリシーケンサのタイムアウトしたメッセージ

  • ベスト・エフォートおよびFIFO(先入れ先出し)のリシーケンサの準備完了状態のグループ(これらのグループのみをパージできます)

フォルト・リカバリおよびメッセージ処理を完了させるため、パージ・スクリプトは、リシーケンス・メッセージ情報をすべてパージするわけではありません。さらに、標準のリシーケンサ・グループには、パージしてはいけない情報が格納されています。パージ・スクリプトを実行しても、次のものはパージされません。

  • すべてのリシーケンサ・タイプの失敗したメッセージ

  • すべてのリシーケンサ・タイプの実行中のメッセージ

  • 標準のリシーケンサのグループ情報

  • ベスト・エフォートおよびFIFOのリシーケンサの、準備完了以外の状態のグループ

注意:

パージ・スクリプトは、まずメッセージを削除し、その後グループに移ります。osb_resequencer_message表にグループのメッセージがある場合、そのグループは削除できません。

前述のパージ・スクリプトの処理では、インスタンスのトラッキングが有効であるか無効であるかは関係ありません。シーケンス・グループがパージされる前に、グループに関連付けられているすべてのメッセージが処理されていることを確認するためのチェックが実行されます。

次に、リシーケンサ表で使用されているグループ状態コードのリストを示します。

  • 0: 準備完了

  • 1: ロック済

  • 2: エラー

  • 4: タイムアウト

  • 6: グループ・エラー

次に、リシーケンサ表で使用されているメッセージ状態コードのリストを示します。

  • 0: 準備完了

  • 1: ロック済

  • 2: 完了

  • 3: エラー

  • 4: タイムアウト(これは無視されます)

  • 5: 中止

16.2 Oracle Service Busのリシーケンサ・データのパージ

全体的なSOA Suiteデータベース管理スクリプトの一部としてService Busのリシーケンサ・パージ・スクリプトを実行することも、Service Busに対してのみスクリプトを実行することもできます。

SOA Suiteデータベースの全体的な戦略の詳細は、『Oracle SOA SuiteおよびOracle Business Process Management Suiteの管理』のデータベース増分の管理に関する項を参照してください。

注意:

SOA Suiteは、Fusion Middleware Controlの自動パージ機能を使用し、データベース表からデータを自動的にパージします。この機能により、Service Busのリシーケンサ表からデータがパージされることはありません。

16.2.1 完了メッセージを自動的にパージするためのリシーケンサの構成

Service Busには、処理が完了したメッセージをリシーケンス・データベース表から自動的に削除するかどうかを指定するグローバル設定があります。これは、グループ情報または失敗、実行中または中断したメッセージをパージするものではなく、正常に処理されたメッセージのみがパージされます。パージされたメッセージを取得することはできません。

完了メッセージを自動的にパージするには:

  1. Fusion Middleware Controlで、「SOA」を展開し、「service-bus」を選択します。
  2. 「グローバル設定」タブをクリックします。
  3. 「リシーケンス」セクションで、「完了メッセージのパージ」を選択します。

    これがデフォルト設定であることに注意してください。

  4. 「適用」をクリックします。

    リシーケンサによって正常に処理されたメッセージは、完了時にパージされます。

16.2.2 SQLスクリプトを使用したリシーケンサ表のパージ

SOA Suiteの全パージ・プロシージャを実行する一環としてService Busリシーケンサ表からデータをパージできます。また、Service Busのリシーケンサ表のみを単独でパージする場合は、Service Busリシーケンサ・プロシージャsoa_osb.deleteOSBResequencerInstancesを実行することもできます。パージ・スクリプトは/MW_HOME/soa/common/sql/soainfra/sql/oracle/121300/soa_purge12にあり、Service Busスクリプトは/osbサブディレクトリにあります。

16.2.2.1 環境とスクリプトの設定

次の手順は、パージ・スクリプトを実行する一般的な手順です。詳細は、『Oracle SOA SuiteおよびOracle Business Process Management Suiteの管理』のSQL*Plusを使用した大量のインスタンスの削除に関する項を参照してください。前述のリンクには、Service Busには適用されないパラレル処理に関する情報が含まれています。

データベースを設定し、パージ・スクリプトをロードするには:

  1. スクリプト・ディレクトリ(/MW_HOME/soa/common/sql/soainfra/sql/oracle/121300/soa_purge12)にPurgeLogsという名前のディレクトリを作成します。

    診断用に、ログがこのディレクトリ(データベースではSOA_PURGE_DIR)に書き込まれるので、ファイル・システムに作成しておく必要があります。

  2. SQLエディタを使用してSYSDBAとしてデータベースに接続します。
  3. 次のコマンドを実行して、このスクリプトを実行するユーザーに権限を付与します。
    GRANT EXECUTE ON DBMS_LOCK TO USER_NAME;
    GRANT CREATE JOB TO USER_NAME;
    

    注意:

    パージ・スクリプトの実行には、DEV_MDSユーザーを使用しないでください。エラーが発生することになります。

  4. 次のコマンドを実行して、診断ログ・ディレクトリを定義し、前述のユーザーに権限を付与します。
    CREATE OR REPLACE DIRECTORY SOA_PURGE_DIR AS 'SCRIPT_LOCATION/PurgeLogs';
    GRANT READ, WRITE ON DIRECTORY SOA_PURGE_DIR TO USER_NAME;
    
  5. 前の手順で権限を付与したユーザー名を使用して、SQLエディタでデータベースに接続します。パージ・スクリプトを容易に使用できるように、この操作はパージ・スクリプトがある場所から実行します。

    スクリプトは、/MW_HOME/soa/common/sql/soainfra/sql/oracle/121300/soa_purge12にあります。

  6. 次のコマンドを使用して、パージ・スクリプトをロードします。
    @soa_purge_scripts.sql
    

    「Oracle Service Busのパージ・プロシージャの実行」の説明に従って、データをパージする準備ができました。

16.2.2.2 Oracle Service Busのパージ・プロシージャの実行

次の手順では、Service Busデータのみをパージする方法について説明します。「Service Busのパージ・スクリプトの実行」にはService Busのパージ・スクリプトの実行例がありますが、「SOA Suiteのパージ・スクリプトの実行(ループ・モード)」にはSOA Suite全体に対するプロシージャの実行例があります。SOA Suiteのパージ・プロシージャの使用の詳細および手順は、『Oracle SOA SuiteおよびOracle Business Process Management Suiteの管理』のSQL*Plusを使用した大量のインスタンスの削除に関する項を参照してください。

Service Busのパージ・プロシージャを実行するには:

  1. 「環境とスクリプトの設定」の手順を完了し、その項の手順5と同じユーザー名を使用してSQLエディタでデータベースに接続します。
  2. 次のコマンドを実行して、パージ中のデバッグ情報をログに記録します。
    @common/debug_on.sql
    SET SERVEROUTPUT ON;
    
  3. 次のコマンドを実行して、出力をスプール・ファイルに取得します。
    spool '/MW_HOME/soa/common/sql/soainfra/sql/oracle/121300
    /soa_purge12/PurgeLogs/spool.log'
    
  4. 次のコマンドを実行して、Service Busのリシーケンサ・データをパージします。
    execute soa_osb.deleteOSBResequencerInstances (batch_size,
    min_creation_date,max_creation_date);
    

    説明:

    • batch_sizeは一度に削除するレコードの最大数です。デフォルト値は20000です。

    • min_creation_dateは削除するレコードの最も古い作成日です。

    • max_creation_dateは削除するレコードの最も新しい作成日です。

  5. 次のコマンドを実行して、スプール・ファイルへの情報の書込みを停止します。
    spool off
    

16.2.2.3 Service Busのパージ・スクリプトの実行

次の例では、2014年1月1日から2014年3月31日までに作成されたリシーケンサ・レコードを、10,000レコードずつパージします。Service Busのレコードのみパージされます。

execute soa_osb.deleteOSBResequencerInstances ( 10000,
to_timestamp('2014-01-01','YYYY-MM-DD'),
to_timestamp('2014-03-31','YYYY-MM-DD'));

16.2.2.4 SOA Suiteのパージ・スクリプトの実行(ループ・モード)

次の例では、作成日が2011年1月1日から2011年1月31日までのService Busリシーケンス・データを含むSOA Suiteデータを、20,000インスタンスずつ、実行時間60分でクリアします(2011年1月31日まで更新されたすべてのインスタンスは保持します)。

execute soa.delete_instances ( to_timestamp('2010-01-01','YYYY-MM-DD'),
to_timestamp('2010-01-31','YYYY-MM-DD'),20000,60,
to_timestamp('2010-01-31','YYYY-MM-DD'),false);

16.3 サポートされないアクティブなリシーケンサの再構成

リシーケンサがアクティブであり、メッセージを処理している間は、リシーケンス構成を変更できません。アクティブなリシーケンサの構成を変更すると、Service Busがリシーケンス済メッセージを自動的にパージするように構成されていてもメッセージとメタデータがデータベースに残るなど、予期しない動作が発生する可能性があります。

たとえば、パイプラインからリシーケンサを削除すると、まだ処理されていないメッセージがデータベースに残ります。メッセージの処理中にリシーケンサ構成を変更すると、メッセージは処理されず、データベースに残ることがあります。アクティブなリシーケンサの使用の詳細は、「デプロイメント・アクティビティがリシーケンスに与える影響」および「サーバーのシャットダウンがリシーケンスに与える影響」を参照してください。

リシーケンスの方式を変更するには:

  1. 構成中のコンポーネントのリシーケンサを停止します。
  2. この章で説明されているスクリプトを使用して、データベース表をクリーン・アップします。
  3. コンポーネントのリシーケンスを再構成します。
  4. コンポーネントを再アクティブ化または再デプロイします。