この章では、リシーケンス・データを格納するデータベース表のクリーンアップについて説明します。Service Busプロジェクトで着信メッセージを並べ替えるためにリシーケンスを使用する場合、メッセージ・ペイロードとメタデータおよびリシーケンス・グループ情報がリシーケンス・データベース表に格納されます。Service Busには、これらの表のサイズの管理と古いレコードのクリーン・アップに役立つスクリプトが用意されています。
この章の内容は次のとおりです。
リシーケンサは、データベースに依存して、処理するメッセージの格納、グループ化および並べ替えを行います。このデータベースには、リシーケンサのメッセージおよびグループの情報を格納するための表が含まれています。このデータベースは、ドメインに対してリポジトリ作成ユーティリティ(RCU)を実行すると自動的に作成されます。正常に処理されたメッセージを自動的にパージするようにリシーケンサを構成できますが、それでも、データベース内のリシーケンス・データを手動で管理する必要がある場合があります。Service Busには、リシーケンス・データをパージし、データベースをクリーン・アップするためのSQLパージ・スクリプトが用意されています。
Service Busのリシーケンサ・データをパージするスクリプトは、他のSOA Suiteコンポーネント・パージ・スクリプトとともに/MW_HOME
/soa/common/sql/soainfra/sql/oracle/122100/soa_purge12
にあります。メインのSOA Suiteパージ・スクリプト(すべてのコンポーネントのデータをパージするスクリプト)を実行すると、Service Busのリシーケンス・データもパージされます。リシーケンス・グループのグループ情報は、そのグループの次のシーケンスIDに必要な情報を含むため、削除されません。この情報をパージすると、最初のシーケンスIDからグループを始めることと同じになり、意図に反することになる可能性があります。
SOA Suiteのパージ・プロシージャは、パラレル・モードまたはループ・モードで実行できることに注意してください。Service Busプロシージャはループ・モードでのみ実行できます。
Service Busには、「完了メッセージのパージ」というグローバル設定があり、この設定は正常に処理されたリシーケンス済メッセージを自動的にパージするかどうかを決めます。処理されたメッセージは、次のガイドラインに従って、データベースからパージされます。
「完了メッセージのパージ」が選択されている場合のみ、正常に処理されたメッセージがデータベースから自動的に削除されます。この設定は、デフォルトで選択されています。メッセージを自動的にパージしない場合は、この設定のチェック・ボックスを選択解除する必要があります。
「完了メッセージのパージ」が選択されている場合、すべてのタイプのリシーケンサで、メッセージ・メタデータが自動的にパージされます。
失敗したメッセージがパージされることはありません。
グループ情報はパージされません。
メッセージとメタデータが自動的にパージされない場合のために、Service Busには、データベース内のリシーケンサ表をパージおよび管理するためのスクリプトが用意されています。
リシーケンサは、デフォルトのOracle SOA Suiteデータソースであるjdbc/SOADataSource
を使用して、データベース内のリシーケンス表に接続します。このデータソースは、SOA SuiteまたはService Busをインストールし、WebLogic Serverドメインを作成すると、自動的に作成されます。リシーケンサ・データソースでは、JNDI名はjdbc/SOADataSource
である必要があります。また、リシーケンサ・データソースは、リポジトリ作成ユーティリティ(RCU)によって作成されたsoainfra
データベースに接続します。
パージ・スクリプトには、Service Busのリシーケンサ表(osb_msg
、osb_group_status
およびosb_resequencer_message
)に保持されている情報をパージするためのパージ・コマンドが含まれています。パージ・スクリプトを実行すると、次の情報がリシーケンサ表からパージされます。
すべてのリシーケンサ・タイプの完了したメッセージおよび中断したメッセージ
標準のリシーケンサのタイムアウトしたメッセージ
ベスト・エフォートおよびFIFO(先入れ先出し)のリシーケンサの準備完了状態のグループ(これらのグループのみをパージできます)
フォルト・リカバリおよびメッセージ処理を完了させるため、パージ・スクリプトは、リシーケンス・メッセージ情報をすべてパージするわけではありません。さらに、標準のリシーケンサ・グループには、パージしてはいけない情報が格納されています。パージ・スクリプトを実行しても、次のものはパージされません。
すべてのリシーケンサ・タイプの失敗したメッセージ
すべてのリシーケンサ・タイプの実行中のメッセージ
標準のリシーケンサのグループ情報
ベスト・エフォートおよびFIFOのリシーケンサの、準備完了以外の状態のグループ
注意:
パージ・スクリプトは、まずメッセージを削除し、その後グループに移ります。osb_resequencer_message
表にグループのメッセージがある場合、そのグループは削除できません。
前述のパージ・スクリプトの処理では、インスタンスのトラッキングが有効であるか無効であるかは関係ありません。シーケンス・グループがパージされる前に、グループに関連付けられているすべてのメッセージが処理されていることを確認するためのチェックが実行されます。
次に、リシーケンサ表で使用されているグループ状態コードのリストを示します。
0: 準備完了
1: ロック済
2: エラー
4: タイムアウト
6: グループ・エラー
次に、リシーケンサ表で使用されているメッセージ状態コードのリストを示します。
0: 準備完了
1: ロック済
2: 完了
3: エラー
4: タイムアウト(これは無視されます)
5: 中止
全体的なSOA Suiteデータベース管理スクリプトの一部としてService Busのリシーケンサ・パージ・スクリプトを実行することも、Service Busに対してのみスクリプトを実行することもできます。SOA Suiteデータベースの全体的な戦略の詳細は、『Oracle SOA SuiteおよびOracle Business Process Management Suiteの管理』のデータベース増分の管理に関する項を参照してください。
注意:
SOA Suiteは、Fusion Middleware Controlの自動パージ機能を使用し、データベース表からデータを自動的にパージします。この機能により、Service Busのリシーケンサ表からデータがパージされることはありません。
Service Busには、処理が完了したメッセージをリシーケンス・データベース表から自動的に削除するかどうかを指定するグローバル設定があります。これは、グループ情報または失敗、実行中または中断したメッセージをパージするものではなく、正常に処理されたメッセージのみがパージされます。パージされたメッセージを取得することはできません。
完了メッセージを自動的にパージするには:
SOA Suiteの全パージ・プロシージャを実行する一環としてService Busリシーケンサ表からデータをパージできます。また、Service Busのリシーケンサ表のみを単独でパージする場合は、Service Busリシーケンサ・プロシージャsoa_osb.deleteOSBResequencerInstances
を実行することもできます。パージ・スクリプトは/MW_HOME
/soa/common/sql/soainfra/sql/oracle/122100/soa_purge12
にあり、Service Busスクリプトは/osb
サブディレクトリにあります。
次の手順は、パージ・スクリプトを実行する一般的な手順です。詳細は、『Oracle SOA SuiteおよびOracle Business Process Management Suiteの管理』のSQL*Plusを使用した大量のインスタンスの削除に関する項を参照してください。前述のリンクには、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のパージ・プロシージャを実行するには:
次の例では、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'));
次の例では、作成日が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);
リシーケンサがアクティブであり、メッセージを処理している間は、リシーケンス構成を変更できません。アクティブなリシーケンサの構成を変更すると、Service Busがリシーケンス済メッセージを自動的にパージするように構成されていてもメッセージとメタデータがデータベースに残るなど、予期しない動作が発生する可能性があります。
たとえば、パイプラインからリシーケンサを削除すると、まだ処理されていないメッセージがデータベースに残ります。メッセージの処理中にリシーケンサ構成を変更すると、メッセージは処理されず、データベースに残ることがあります。アクティブなリシーケンサの使用の詳細は、「デプロイメント・アクティビティがリシーケンスに与える影響」および「サーバーのシャットダウンがリシーケンスに与える影響」を参照してください。
リシーケンスの方式を変更するには: