14 データベース増分の管理
この章の内容は次のとおりです。
ノート:
表のパーティション化は高度なデータベース・タスクであるため、熟練したデータベース管理者(DBA)のみが実行する必要があります。
データベース増大問題のトラブルシューティングに関する詳細は、「パラレル・パージと表のパーティション化の問題」、「表領域の拡張による実行時の問題の回避」および「大量のトランザクションによるデータベース増大の問題の解決」を参照してください。
データベース増分管理戦略の詳細は、「データベース増分管理戦略の策定」を参照してください。
データベース増分の管理の概要
Oracle SOA Suiteデータベースのデータ量が増加して非常に大きくなると、データベースのメンテナンスが困難になる場合があります。この課題に対処するため、データベースの増分管理には表14-1に示すようにいくつかの方法が用意されています。
表14-1 データベース増分の戦略
環境 | 使用 | 参照先 |
---|---|---|
データベース内の行が100,000を超える小規模な開発インストール |
Oracle Enterprise Manager Fusion Middleware Controlの「自動パージ」ページまたはループされるパージ・スクリプト |
Oracle Enterprise Manager Fusion Middleware Controlによる大量のインスタンスの削除 または |
1日当たり10GBのデータを生成し、かつ500GB未満のデータを保存する中規模のインストール |
Oracle Enterprise Manager Fusion Middleware Controlの「自動パージ」ページまたは最適なスレッド数でスケジュールされたパラレル・パージ |
Oracle Enterprise Manager Fusion Middleware Controlによる大量のインスタンスの削除 または |
1日に10GBを超えるデータを生成する、または500GBを超えるデータを保存する大規模なインストール |
|
|
|
切捨てスクリプト |
パージおよびパーティション化の方法の開発
この項では、デハイドレーション・ストアのパージおよびパーティション化を行う場合に実行できる、アクション・プランの主なポイントを要約します。パージはあらゆるプランの根幹であり、データによって消費される領域が多すぎる場合、または別の理由でデータを削除する場合に実行します。
スキーマのサイズを削減するには、主に、次の3通りの方法があります。
-
パージ・スクリプト(次のいずれかの方法で実行できます)
-
Oracle Enterprise Manager Fusion Middleware Controlの「自動パージ」ページから自動実行
-
SQL*Plusで手動実行
-
-
パージ・スクリプトおよびパーティション化(つまり、表パーティションの削除)
-
すべての表のパーティション化
パージ・スクリプトでは、BPEL表から行を削除するために標準のSQL DELETE
文を使用します。ほとんどのサイトではこれで十分です。ただし、サイトによっては蓄積されたデータが多すぎて、パージ・スクリプトの実行時間が非常に長くなることがあります。このような場合は、パーティション化の方がより適切な解決策となります。ただし、パーティション化によって非常に多くのデータベース・メンテナンス作業が発生することがトレードオフとなります。また、パーティション化は高度な技術であり、知識のあるDBAが必要となります。一方、パージ・スクリプトは簡単に実行でき、かつ、DBAの専門的な知識を必要としません。
入力メッセージ、データベース増分率およびパージ・プロセスでパージされるデータ量の概要を確認します。入力レートとパージ・レートが同じである場合は、通常のパージで十分です。これ以外の場合、パーティション化を検討します。
パーティション化を使用する場合、ディスク領域を追加し、最終的にパーティションを削除することをお薦めします。ただし、このことによってディスク容量の管理や適切なパーティション・サイズの決定などの追加要件が発生します。パーティション化を使用し、かつ、ディスク領域を解放するためにパージ・スクリプトに依存することは避けてください。
ノート:
パーティション化機能を使用できるのは、Oracle DatabaseでOracle Partitioningオプションを購入した場合のみです。
大量のフロー・インスタンス、アダプタ・レポートおよびフォルト・アラートの削除
フロー・インスタンス、アダプタ・レポートおよびフォルト・アラートは、(Oracle Enterprise Manager Fusion Middleware Controlの「自動パージ」ページから自動で呼び出されるか、SQL*Plusで手動で呼び出す)パージ・スクリプトを使用して削除できます。
次の詳細に注意してください。
-
パージ・スクリプトは、完了したインスタンスまたはエラー状態の(失敗した)インスタンスを削除します。詳細は、「パージの状態」を参照してください。
-
パージ・スクリプトは、処理中のインスタンスまたはリカバリ可能な(リカバリが必要な状態の)インスタンスを削除しません。
-
パージ・スクリプトは、Oracle B2Bを除きすべてのOracle SOA Suite関連の表を削除します。Oracle SOA SuiteおよびOracle B2Bが同一インストールに配置されている場合、Oracle B2Bのパージ・スクリプトも必ず呼び出してください。Oracle SOA SuiteおよびOracle B2Bが別個のインストールに配置されている場合、それぞれの製品スキーマで適切なパージ・スクリプトのみを実行する必要があります。Oracle B2Bのパージの詳細は、『Oracle B2Bの使用』のデータのパージに関する項およびB2Bコマンドライン・ツールに関する項を参照してください。
-
12c (12.1.3)以降、Oracle Enterprise Manager Fusion Middleware Controlおよびパージ・スクリプトでは
MEDIATOR_RESEQUENCER_MESSAGE
表およびMEDIATOR_GROUP_STATUS
表を削除します。 -
インストーラでデータベース・スケジューラのタイムゾーンを適切に構成する必要があります。そうしないと、パージ・ジョブが予期しない時間に実行される可能性があります。
-
SQL*PlusからまたはOracle Enterprise Manager Fusion Middleware Controlの「自動パージ」ページからパージ・スクリプトを実行して、次の表を削除できます。
-
MEDIATOR_GROUP_STATUS
-
EIS_CONNECTION_DOWN_TIME
およびMESSAGE_STATISTICS
(JCAアダプタ・レポート)。 -
FAULT_ALERT
-
-
リシーケンス・グループのグループ情報は削除されません。グループには、そのグループの次のシーケンスIDに関する必須情報が含まれています。この情報をパージすると、最初のシーケンスIDからグループを始めることと同じになり、意図に反することになる可能性があります。
次の各項では、Oracle Enterprise Manager Fusion Middleware Controlの「自動パージ」ページまたはSQL*Plusからパージ・スクリプトを呼び出して、フロー・インスタンス、アダプタ・レポートおよびフォルト・アラートを削除する方法について説明します。
-
Oracle Enterprise Manager Fusion Middleware Controlによる大量のインスタンスの削除
ノート:
IBM DB2データベースでは、パージ・スクリプトはサポートされません。
パージの状態
次の状態のインスタンスは、Oracle Enterprise Manager Fusion Middleware Controlまたはパージ・スクリプトを使用してパージします。
-
正常終了
-
フォルト
-
ユーザーによって終了されました
-
中断
-
不明(インスタンス・トラッキングが無効)
次のインスタンス状態のパージはサポートされていません。
-
BPELプロセス・サービス・エンジン・レベルまたはSOAコンポジット・アプリケーション・レベルでのリカバリを保留中のインスタンス
-
実行中のインスタンス
このようなインスタンスをパージするには、まずパージ・スクリプトによってサポートされるインスタンス状態のいずれかに移行する必要があります。
Oracle Enterprise Manager Fusion Middleware Controlによる大量のインスタンスの削除
Oracle Enterprise Manager Fusion Middleware Controlの「自動パージ」ページを使用して、より古いフロー・インスタンス、アダプタ・レポートおよびフォルト・アラートを自動的にデータベースから削除するジョブをスケジュールおよび実行します。
ノート:
-
ランタイム環境のパフォーマンスを最適化するために、「自動パージ」ページで自動パージを有効にすることをお薦めします。自動パージの状態は、SOAインフラストラクチャおよび個々のパーティション・レベルの「ダッシュボード」ページの「キー構成」セクションに表示されます。自動パージは、12cの新規インストールで自動的に有効になりますが、アップグレードされた環境では有効になりません。
-
パージ構成を有効化または変更する前に、重要なデータをバックアップするようにしてください。
-
SOA開発者インストール・オプションに含まれるJavaデータベースを使用している場合、「自動パージ」ページは使用できません。
truncate_soa_javadb.sql
スクリプトを使用してデータベースをパージします。
-
次のいずれかのオプションを使用して、このページにアクセスします。
SOAインフラストラクチャのメニューから... ナビゲータのSOAフォルダから... 「ダッシュボード」ページの「キー構成」セクションから... 「ダッシュボード」ページの「キー構成」セクションから... -
「SOA管理」→「自動パージ」を選択します。
-
「soa-infra」を右クリックします。
-
「SOA管理」→「自動パージ」を選択します。
-
「関連リンク」アイコンをクリックします。
-
「自動パージ」を選択します。
-
「自動パージ」の「ステータス」の右側にあるアイコンをクリックします。
-
表示されたメッセージで、「自動パージの設定」をクリックします。
自動パージ・ページが表示されます。
-
-
環境に適した値を選択し、「適用」をクリックします。
フィールド 説明 自動パージ・ジョブ
実行する事前定義済のデータベース・パージ・ジョブを選択します:
-
SOAフロー・パージ・ジョブ1: 平日に適切なスケジュールで(月曜日から金曜日の午前0時に)パージします。このジョブは自動的に有効になります。
-
SOAフロー・パージ・ジョブ2: より積極的な週末のスケジュールで(土曜日と日曜日に)パージします。
-
SOAインメモリー・フロー・パージ・ジョブ: インメモリー・フロー関連レコードをパージします。これにより、データベースに永続化されているインメモリー・インスタンスのみがパージされます。このジョブは、Oracle Enterprise Manager Fusion Middleware ControlのSOA共通プロパティで
inMemoryEnvironment
をtrue
に設定すると有効になります。 -
統合ワークロード統計パージ・ジョブ: SOAデータベースから統合ワークロード統計(IWS)スナップショット・データをパージします。デフォルトでは、このジョブは毎日午前0時に実行されるようスケジュールされています。IWSレポートの詳細は、「IWSレポートを使用したSOA全体の問題の監視とトラブルシューティング」を参照してください。
-
ヘルス・チェック・パージ・ジョブ: SOAヘルス・チェック・レポートをパージします。SOAヘルス・チェックの詳細は、「SOAヘルス・チェックの使用」を参照してください。
-
SOAコンポーネント状態ベースのフロー・パージ・ジョブ: コンポーネントの状態に基づいて、フローおよび関連表をパージします(他のパージ・ジョブはフロー・インスタンスの状態に基づいて行われます)。これは、フロー・インスタンスの状態が同期されていない場合やオフになっている場合に対処するものです。このジョブは、Oracle Enterprise Manager Fusion Middleware ControlのSOA共通プロパティで
CaptureFlowInstanceState
をfalse
に設定すると有効になります。ノート: この選択が12c (12.2.1.3)で使用可能になるのは、パッチ31572611以上をインストールした場合のみです。My Oracle Supportにサインインし、パッチ番号でパッチを検索してダウンロードします。
ノート: パージ・ジョブは追加できません。
警告: 自動パージ・ジョブを有効化または無効化する場合は、別のジョブを選択するか、このページから移動する前に、変更内容を保存するか元に戻す必要があります。そうしないと、現在選択しているジョブに対して行った未保存の変更は失われます。
有効
選択すると、「自動パージ・ジョブ」リストから選択されたデータベース・パージ・ジョブによる自動データベース・パージが有効になります。
有効にした時点で、パージ期間が開始します。たとえば、データの保存フィールドに7日間と指定した場合、このチェック・ボックスを再び有効にした日からデータが保存されます。より新しいデータは作成後7日間保存されます。
カレンダ式アイコン
クリックすると、ジョブのスケジュール設定構文の例が表示されます。環境に合う構文をコピーして、「ジョブ・スケジュール」フィールドに貼り付け、必要に応じて変更します。「詳細情報」をクリックすると、
repeat_interval
属性を設定してジョブの頻度を構成する方法に関するドキュメントにアクセスします。ジョブ・スケジュール
インスタンスをパージするジョブ実行スケジュールを指定します。デフォルトのスケジュールでは、毎日午前0時にパージを実行します。これは必須フィールドです。スケジュールを指定するには、有効なカレンダ式を使用します。一般的に使用される式の例を表示するには、「情報」アイコンまたはカレンダ式アイコンをクリックします。スケジュール構文では、大文字と小文字は区別されません。
パージ・タイプ
実行するパージ・スクリプトのタイプを選択します。これは必須フィールドです。
-
単一: バッチによるパージを実行する、単一ループのパージ・スクリプト。
-
パラレル: 機能は、単一ループのパージ・スクリプトと同じです。ただし、このオプションでは、
dbms_scheduler
パッケージが複数のパージ・ジョブを生成でき、各ジョブがサブセット・データを処理します。ノート: 複数CPUホストがある場合は、パラレル・スクリプトの使用が有効です。ただし、パラレル・スクリプトはオフピーク時にのみ有効化することをお薦めします。さらに、オフピーク時にデータをパージするとき、大量のデータをパージする前に索引を削除し、後で索引を追加して戻すことをお薦めします。これにより、パージ処理が高速化され、索引のバランスを維持できます。
単一(ループ)およびパージ・パラレル・スクリプトの詳細は、「ループされるパージ・スクリプト」および「dbms_schedulerを使用したパラレル・スクリプトでのループされるパージ」を参照してください。
データの保持
データを保持する期間(日数)を指定します。ジョブを実行しても、この期間内のデータはパージされません。デフォルト値は7日間です。たとえば、7日間のデータ保持間隔を指定する場合、データは作成されてから7日間、パージから保護されます。システム内にすでに存在する古いデータは、自動パージが有効化されてから7日間保持されます。このプロパティを
-1
に設定するとデータの保持フィルタを無視できます。パージする最大フロー
1回のジョブ実行でパージするインスタンス・フローの最大数を選択します。
バッチ・サイズ
一度に削除するビジネス・フローの最大数を選択します。デフォルト値は
20000
です。このフィールドが表示されるのは、「パージ・タイプ」リストで「パラレル」が選択されている場合です。
並列度
パラレルで実行するジョブの数を選択します。デフォルト値は
4
です。このフィールドが表示されるのは、「パージ・タイプ」リストで「パラレル」が選択されている場合です。
-
-
システムMBeanブラウザの詳細な構成プロパティを表示して構成するには、「詳細な自動パージ構成プロパティ」をクリックします。
-
「PurgeJobDetails」をクリックします。
-
ジョブを展開して、単一パージおよびパラレル・パージのすべてのプロパティを表示します。単一パージとパラレル・パージのいずれかのパージ・タイプが実行されると、選択したタイプに適切なプロパティ値が実行されます。
ノート:
詳細パージ・プロパティを編集する必要がある場合は、最新の注意を払ってください。たとえば、ジョブ名を変更しないでください。
-
値を表示または変更して、「適用」をクリックします。
フィールド 説明 DOP
パラレルで実行するジョブの数を定義します。デフォルト値は
4
です。PQS
パラレル問合せスレーブの数を表示します。さらにスレーブを追加して負荷の高いSQLコマンドのパフォーマンスを向上できます。
batchSize
一度に削除できるビジネス・フローの最大数を表示します。デフォルト値は
20000
です。有効
データベース・パージ・ジョブが有効になっているかどうかを示します。
executionSchedule
ジョブのスケジュール設定構文を表示します。
ignoreState
true
に設定すると、指定された日付範囲内でオープンおよびクローズされたすべてのインスタンスがパージされます。デフォルト値はfalse
です。ノート: オープン・インスタンスのパージは、システムを不整合状態にする可能性があるため、このパラメータは慎重に使用してください。
maxCount
パージするフローの最大数を表示します。
maxCreationPeriodDays
最長の作成期間を日数で表示します。このプロパティは、特定の期間内に作成されたフローを選択するために、minCreationPeriodDaysとともに使用されます。
maxRuntime
パージ・スクリプトがループを終了する有効期限。デフォルト値は
60
です。この値は分で指定します。minCreationPeriodDays
最短の作成期間を日数で表示します。このプロパティは、特定の期間内に作成されたフローを選択するために、maxCreationPeriodDaysとともに使用されます。
purgePartitionedComponent
パーティション化された表をパージする必要があるかどうかを示します。
true
に設定すると、同じパージ・ジョブが呼び出され、パーティション化されたデータが削除されます。デフォルト値はfalse
です。ノート: 表は、パーティション化すると
DROP
文で維持されるため、パージする必要はありません。purgeType
単一またはパラレルのいずれかを表示します。
retentionPeriodDays
データを保持する期間(日数)を指定します。パージ・ジョブを実行しても、この期間内のデータはパージされません。
sqlTrace
true
に設定すると、SQLトレースが設定されていることを示します。SQLトレースの詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。
ノート:
保存期間は時間の粒度では動作しません。そのため、保存期間が1日に設定されている場合、ジョブは完了後24時間以内にパージされないということです。次のパージまで最長48時間かかる可能性があります(つまり、1日の保存期間では、フローが20日の午前12:01に完了した場合、22日の午前12:00までパージされません)。
SQL*Plusを使用した大量のインスタンスの削除
ノート:
Oracle SOA Suiteリリース11gを12cにアップグレードする際、パージ・スクリプトの実行中にアップグレード・アシスタントを起動しないでください。パージが完了するまで待ってから、アップグレード・プロセスを開始してください。アップグレード・アシスタントを使用してスキーマをアップグレードしようとしたときにパージ・スクリプトが実行中であると、アップグレードは失敗します。アップグレードの詳細は、Oracle SOA SuiteおよびOracle Business Process Managementのアップグレードを参照してください。
SQL*Plusでパージ・スクリプトを実行して、より古いフロー・インスタンス、アダプタ・レポートおよびフォルト・アラート・データをデータベースから削除します。パージ・スクリプトには次の2つのタイプがあります。
-
ループされるパージ・スクリプト
-
dbms_scheduler
を使用したパラレル・スクリプトでのループされるパージ
ループされるパージ・スクリプト
マスター・パージ・スクリプトには、バッチによるパージを実行できるループ構文が含まれています。また、このスクリプトにはmax_runtime
パラメータを指定して、このパラメータの値を超過するとループが停止されるようにすることもできます。
マスター・スクリプトはSOAデータベース表のパージを実行します。delete_instances
プロシージャを使用してSOAデータベース表をパージできます。
ノート:
パージするインスタンスが多い場合は、max_runtime
を高い値に設定します。この場合、スクリプトが終了するまでの待機時間が長くなることが予想されます。より短い時間でパージ・スクリプトを終了させるには、小さいバッチ・サイズを使用します。
delete_instancesプロシージャ
インスタンスを削除するにはdelete_instances
プロシージャを使用します。次の例は構文を示しています。
procedure delete_instances ( min_creation_date in timestamp, max_creation_date in timestamp, batch_size in integer, max_runtime in integer, retention_period in timestamp, purge_partitioned_component in boolean ignore_state in boolean composite_name in varchar2 composite_revision in varchar2 soa_partition_name in varchar2 sql_trace in boolean PSQ integer );
表14-2で、スクリプトのパラメータについて説明します。
表14-2 delete_instancesプロシージャのパラメータの説明
パラメータ | 説明 |
---|---|
|
ビジネス・フロー・インスタンスの最短の作成期間(日数)。 |
|
ビジネス・フロー・インスタンスの最長の作成期間(日数)。 |
|
削除対象に選択され、単一のループ・パージの1回の実行でコミットされるフローの最大数。デフォルト値は |
|
パージ・スクリプトがループを終了する有効期限。デフォルト値は |
|
データを保持する期間(日数)を指定します。ジョブを実行しても、この期間内のデータはパージされません。デフォルト値は7日間です。保存期間はフロー全体に基づきます。期間は このパラメータは、 BPELインスタンス( この例では、BPELインスタンス表の min_creation_date = 1st June 2011 max_creation_date = 30 June 2011 retention_period = 1st July 2011 これにより、コンポジットの |
|
パーティション化された表をパージする必要があるかどうかを示します。 ノート: 表は、パーティション化すると |
|
ノート: オープン・インスタンスのパージは、システムを不整合状態にする可能性があるため、このパラメータは慎重に使用してください。 |
|
SOAコンポジット・アプリケーションの名前。このパラメータを |
|
SOAコンポジット・アプリケーションのリビジョン番号。 |
|
SOAコンポジット・アプリケーションが格納されているパーティション。 |
|
GRANT ALTER SESSION TO SOA_INFRA ノート: パフォーマンスに影響するため、このパラメータはデバッグのみに使用してください。 |
|
パラレル問合せスレーブの数を表示します。さらにスレーブを追加して負荷の高いSQLコマンドのパフォーマンスを向上できます。 |
ノート:
-
retention_period
に値を指定しない場合、このプロパティの値はmax_creation_date
の値にデフォルトで設定されます(つまり、retention_period
がnull
に等しい場合、retention_period
=max_creation_date
)。この結果は、「dbms_schedulerを使用したパラレル・スクリプトでのループされるパージ」で説明されているスクリプト・パラメータにも適用されます。 -
リリース11gから12cにアップグレードしているのではない場合、
max_creation_date
およびmin_creation_date
パラメータはオプションです。パージは、同様にオプションであるretention_period
によって完全に実行できます。 -
パージ・スクリプトのパージは、データベースと表内の既存行のみに制限されます。パージ・スクリプトでランタイム実行を調べる方法はありません。このため、パージ・スクリプトでアクティブな行が削除された直後に、(
ignore_state
パラメータをtrue
に設定して)自動リカバリを試行することが想定されます。このため、パージの実行後に行が作成されます。SCA_FLOW_INSTANCE
表の行はすでに削除されているため、この行は不確定のままになります。
dbms_schedulerを使用したパラレル・スクリプトでのループされるパージ
このスクリプトは、「ループしたパージ・スクリプト」で説明されているループしたパージ・スクリプトと機能的に同じです。ただし、このスクリプトでは、各ジョブがサブセット・データを処理する複数のパージ・ジョブを生成するためのdbms_scheduler
パッケージを使用します。
ノート:
複数のCPUを持つホストがある場合、パラレル・スクリプトを使用することが役立ちます。ただし、パラレル・スクリプトはオフピーク時にのみ有効化することをお薦めします。さらに、オフピーク時にデータをパージするとき、大量のデータをパージする前に索引を削除し、後で索引を追加して戻すことをお薦めします。これにより、パージ処理が高速化され、索引のバランスを維持できます。
delete_instances_in_parallelプロシージャ
インスタンスを削除するにはdelete_instances
プロシージャをパラレルで使用します。次の例は構文を示しています。
PROCEDURE delete_instances_in_parallel ( min_creation_date in timestamp, max_creation_date in timestamp, batch_size in integer, max_runtime in integer, retention_period in integer, DOP in integer, max_count integer, purge_partitioned_component in boolean, ignore_state in boolean, composite_name in varchar2, composite_revision in varchar2, soa_partition_name in varchar2, sql_trace in boolean );
表14-3で、スクリプトのパラメータについて説明します。
表14-3 delete_instances_in_parallelプロシージャのパラメータの説明
パラメータ | 説明 |
---|---|
|
ビジネス・フロー・インスタンスの最短の作成期間(日数)。 |
|
ビジネス・フロー・インスタンスの最長の作成期間(日数)。 |
|
削除対象に選択されたフローの最大数。デフォルト値は |
|
パージ・スクリプトがループを終了する有効期限。デフォルト値は |
|
データを保持する期間(日数)を指定します。ジョブを実行しても、この期間内のデータはパージされません。デフォルト値は7日間です。保存期間はフロー全体に基づきます。期間は |
|
パラレルで実行するジョブの数を定義します。デフォルト値は |
|
処理される行数を定義します(削除される行数ではありません)。大規模な |
|
同じパージを起動して、パーティション化されたデータを削除できます。デフォルト値は ノート: 表は、パーティション化すると |
|
ノート: オープン・インスタンスのパージは、システムを不整合状態にする可能性があるため、このパラメータは慎重に使用してください。 |
|
SOAコンポジット・アプリケーションの名前。このパラメータを |
|
SOAコンポジット・アプリケーションのリビジョン番号。 |
|
SOAコンポジット・アプリケーションが格納されているパーティション。 |
|
GRANT ALTER SESSION TO SOA_INFRA ノート: パフォーマンスに影響するため、このパラメータはデバッグのみに使用してください。 |
パージ・スクリプトの実行
ここでのステップのかわりに「Oracle Enterprise Manager Fusion Middleware Controlによる大量のインスタンスの削除」のステップに従って、これらのスクリプトを実行することもできます。
パージ・スクリプトを実行するには:
-
SQL*Plusで、データベース
AS
SYSDBA
に接続します。CONNECT SYS AS SYSDBA
-
次のSQLコマンドを実行します。
GRANT EXECUTE ON DBMS_LOCK TO USER; GRANT CREATE ANY JOB TO USER;
ここで、
USER
はスクリプトを実行するためのsoainfra
アカウントです。これらの特権は、スクリプトを実行するために必要です。 -
パージ・スクリプトをロードするには、メイン・パージ・スクリプトを
MW_HOME
/soa/common/sql/soainfra/sql/oracle/122130/soa_purge12/soa_purge_scripts.sql
で実行します。パラレル・パージの場合、パラレル・パージによって生成されたジョブからのデバッグ・ログは、
SOA_PURGE_DIR
という名前のディレクトリに作成されるファイルに記録されます。このディレクトリはOracleデータベースからアクセスできる必要があります。 -
SOA_PURGE_DIR
を作成し、soainfra
ユーザーに書込み権限を付与します。mkdir -p /tmp/purgelog CREATE OR REPLACE DIRECTORY SOA_PURGE_DIR AS 'SERVER_DIRECTORY'
ここで、
SERVER_DIRECTORY
は作成するディレクトリ('/tmp/purgelog/'
など)です。ディレクトリ・パスを囲む一重引用符は必須です。 -
スクリプトをデバッグ・モードで実行する場合、
common/debug_on.sql
を実行し、SQL*Plusでserverout
をon
に設定します。このステップは省略可能です。SET SERVEROUT ON
生成されたジョブからのログは、ステップ4で作成されたディレクトリに記録されます(ジョブごとに別のファイル)。残りのログは
stdout
(または構成された場合はspool
ファイル)に表示されます。パージには次の2つのオプションがあります。
-
ループされるパージ
-
パラレル・パージ
-
-
次に示すようにパージ・スクリプトを実行します。両方のオプションに対して例を示します。
-
ループされるパージの場合:
DECLARE MAX_CREATION_DATE timestamp; MIN_CREATION_DATE timestamp; batch_size integer; max_runtime integer; retention_period timestamp; composite_name varchar2(500); composite_revision varchar2(50); soa_partition_name varchar2(200); PQS integer; ignore_state boolean; BEGIN MIN_CREATION_DATE := to_timestamp('2019-10-01','YYYY-MM-DD'); MAX_CREATION_DATE := to_timestamp('2019-10-31','YYYY-MM-DD'); max_runtime := 60; retention_period := to_timestamp('2019-10-31','YYYY-MM-DD'); batch_size := 10000; composite_name := 'example_composite'; composite_revision := '1.0'; soa_partition_name := 'default'; ignore_state := false; PQS := 5; soa.delete_instances( min_creation_date => MIN_CREATION_DATE, max_creation_date => MAX_CREATION_DATE, batch_size => batch_size, max_runtime => max_runtime, retention_period => retention_period, purge_partitioned_component => false, ignore_state => ignore_state, sql_trace => true); END;
-
パラレル・パージの場合:
DECLARE max_creation_date timestamp; min_creation_date timestamp; batch_size integer; max_runtime integer; retention_period timestamp; composite_name varchar2(500); composite_revision varchar2(50); soa_partition_name varchar2(200); PQS integer; DOP integer; max_count integer; ignore_state boolean; BEGIN min_creation_date := to_timestamp('2019-10-01','YYYY-MM-DD'); max_creation_date := to_timestamp('2019-10-31','YYYY-MM-DD'); batch_size integer; max_runtime integer; retention_period := to_timestamp('2019-10-31','YYYY-MM-DD'); composite_name := 'michael_composite'; composite_revision := '1.0'; soa_partition_name := 'default'; ignore_state := true; PQS := 5; DOP := 2; max_count := 100000; soa.delete_instances_in_parallel( min_creation_date => min_creation_date, max_creation_date => max_creation_date, batch_size => batch_size, max_runtime => max_runtime, retention_period => retention_period, DOP => DOP, max_count => max_count, purge_partitioned_component => false, ignore_state => ignore_state, sql_trace => true); END;
-
パラレル・スクリプトでのループされるパージの実行後のデッドロックの解決
パラレル・スクリプトでループされるパージを実行した後にいずれかのスレッドのスレッド・ログでデッドロック検出される場合があります。次の例は、スレッド・ログで見つかったエラーを示します。
SOA_PURGE_LOG_THREAD1 (total of 4 threads) 17-JUL-2012 03:03:48 : Purge AUDIT_DETAILS. Error Code = -60, Error Message = ORA-00060: deadlock detected while waiting for resource 17-JUL-2012 03:03:48 : ERROR(delete_inst_in_parallel_job. Error Code = -60, Error Message = ORA-00060: deadlock detected while waiting for resource
デッドロック問題を解決するには、AUDIT_DETAILS
表を再構築して、次のいずれかの値を大きくします。
-
PCTFREE
を大きくします(関連トランザクション・リスト(ITL)の割当てを拡大できるようにするため)。 -
INITRANS
(初期ITL)を大きくします。このオプションは、以下で説明します。
AUDIT_DETAILS
表を拡大し、INITRANS
値を増やすには:
特定のSOAコンポジット・アプリケーションのインスタンスのパージ
特定のSOAコンポジット・アプリケーションのインスタンスをパージし、その他のコンポジットのインスタンスはパージせずに残すことができます。このアクションを使用して、大量または保存期間が長い特性のために、特定のフローを他のフローより頻繁にパージできます。
パージ・スクリプトには、COMPOSITE_DN
に基づいてパージするためのオプションが含まれています。COMPOSITE_DN
をベースとするパージでは、composite_name
およびcomposite_revision
パラメータとの併用がサポートされます。
パージ・ロジックは、COMPOSITE_ID
ではなくフローIDに基づいています。したがって、目的のCOMPOSITE_DN
以外に、同じフローIDを共有している他のコンポジットが削除されます。次に示すシナリオが発生する場合があります。
-
ビジネス・フロー・インスタンスはクローズされますが、フローはオープンしたままになります。
コンポジットAがコンポジットBをコールするシナリオでは、パージにより、コンポジットAのインスタンスが削除の対象となります。ただし、コンポジットAのインスタンスがクローズされ、対応するコンポジットBのインスタンスがオープンしたままの場合があります。したがって、全体的なフローがオープン状態にあり、コンポジットAのインスタンスは(クローズしたとしても)パージされません。
-
ビジネス・フロー・インスタンスはクローズされ、フローもクローズされます。
コンポジットAがコンポジットBを再度コールします。パージにより、コンポジットAのインスタンスが削除の対象となります。したがって、コンポジットAがクローズされ、コンポジットBもクローズされている場合は、フロー全体がクローズされているため、ビジネス・フロー・インスタンスAおよびBの両方がパージされます。
これらのシナリオにより、フローの一貫性が維持されます。
composite_name
およびcomposite_revision
パラメータの詳細は、「ループされるパージ・スクリプト」および「dbms_schedulerを使用したパラレル・スクリプトでのループされるパージ」を参照してください。
Oracle Mediatorのリシーケンスされたメッセージのパージの状態
パージ・スクリプトには、Oracle Mediatorのリシーケンサ表(MEDIATOR_GROUP_STATUS
およびMEDIATOR_RESEQUENCER_MESSAGE
)内の情報をパージするパージ・コマンドが含まれています。パージ・スクリプトを実行すると、次の情報がリシーケンサ表からパージされます。
-
すべてのリシーケンサ・タイプの完了したメッセージおよび中断したメッセージ
-
標準のリシーケンサのタイムアウトしたメッセージ
-
ベスト・エフォートおよびFIFO(先入れ先出し)のリシーケンサの準備完了状態のグループ(これらのグループのみをパージできます)
フォルト・リカバリおよびメッセージ処理を完了させるため、パージ・スクリプトは、リシーケンス・メッセージ情報をすべてパージするわけではありません。さらに、標準のリシーケンサ・グループには、パージしてはいけない情報が格納されています。パージ・スクリプトを実行しても、次のものはパージされません。
-
すべてのリシーケンサ・タイプの失敗したメッセージ
-
すべてのリシーケンサ・タイプの実行中のメッセージ
-
標準のリシーケンサのグループ情報
-
ベスト・エフォートおよびFIFOのリシーケンサの、準備完了以外の状態のグループ
ノート:
Oracle Mediatorリシーケンサのパージ・スクリプトは、最初にメッセージをパージし、次にグループに移動します。MEDIATOR_RESEQUENCER_MESSAGE
表にグループのメッセージがある場合は、グループを削除できません。
上記では、インスタンスのトラッキングが有効であるか無効であるかに関係なく、パージ・スクリプトのループ処理およびパラレル処理の両方について説明しています。シーケンス・グループがパージされる前に、グループに関連付けられているすべてのメッセージが処理されていることを確認するためのチェックが実行されます。
次に、リシーケンサ表で使用されているグループ状態コードのリストを示します。
-
0: 準備完了
-
1: ロック
-
2: エラー
-
4: タイムアウト
-
6: グループ・エラー
次に、リシーケンサ表で使用されているメッセージ状態コードのリストを示します。
-
0: 準備完了
-
1: ロック
-
2: 完了
-
3: エラー
-
4: タイムアウト(これは無視されます)
-
5: 中断
パージのステータスの監視
Oracle Enterprise Manager Fusion Middleware Controlから実行されたパージ・ジョブは、表14-4に示されているSQLコマンドを使用して監視できます。
表14-4 パージのステータスを監視するためのSQL*Plusコマンド
使用目的 | 実行するコマンド |
---|---|
ジョブ履歴およびステータスの表示 |
SQL> select log_date, status from user_scheduler_job_ log where job_name = 'DELETE_INSTANCES_AUTO_JOB1' order by log_date;
「自動パージ」ページでのジョブの選択の詳細は、Oracle Enterprise Manager Fusion Middleware Controlによる大量のインスタンスの削除を参照してください。 |
実行中のジョブの表示 |
SQL> select session_id, running_instance, elapsed_time, cpu_used from user_scheduler_running_jobs where job_name = 'DELETE_INSTANCES_AUTO_JOB1'; |
ジョブの詳細の表示 |
SQL> select log_date, status, req_start_date, actual_start_date, run_duration from user_scheduler_job_run_details where job_name = 'DELETE_INSTANCES_AUTO_JOB1' order by log_date; |
ジョブ・スケジュールの検索 |
SQL> select SCHEDULE_TYPE,START_DATE,REPEAT_INTERVAL from user_scheduler_schedules where schedule_name = 'DELETE_INSTANCES_AUTO_SCH1';
|
デフォルトのジョブ・スケジュールの変更 |
BEGIN DBMS_SCHEDULER.set_attribute ( name => 'DELETE_INSTANCES_AUTO_SCH1', attribute => 'repeat_interval', value => 'freq=daily; byhour=0; byminute=0; bysecond=0'); END; |
ジョブ・スケジュールの変更(この例では、毎時30分に変更) |
BEGIN DBMS_SCHEDULER.set_attribute ( name => 'DELETE_INSTANCES_AUTO_SCH1', attribute => 'repeat_interval', value => 'freq=hourly; byminute=30'); END; |
データベースSQLトレースの生成
パージ・スクリプトには、SQLトレースを生成するためのパラメータが含まれています。
-
パージ・スクリプトをSQL*Plusから直接実行する場合、パラメータは
sql_trace
パラメータと名付けられます。 -
パージ・スクリプトをOracle Enterprise Manager Fusion Middleware Controlの「自動パージ」ページから実行する場合、パラメータはsqlTraceと名付けられます(「詳細な自動パージ構成プロパティ」リンクの下にあります)。
このパラメータをtrue
に設定すると、データベース・ユーザーのdump
ディレクトリに配置されるデータベースSQLトレースが生成されます。パラレル・パージ・スクリプトの場合、従属する各パラレル・パージ・ジョブ(J000、J001など)にもSQLトレースが生成されます。
パージ・スクリプトでパラレル問合せスレーブが有効になっている場合は、トレース・ファイルが作成されます。トレース・ファイルは、sql_trace
の設定時に生成されます。パラレル・パージ・スクリプトを使用すると、J*
という名前で複数のトレース・ファイルが作成されます。
SQLトレースの詳細は、Oracle Database SQLチューニング・ガイドを参照してください。
コンポーネント表のパーティション化
次のコンポーネントのランタイムおよびスキーマ・コードは、フロー作成日付列をトランザクション表に格納するように変更されました。
-
Oracle BPEL Process Manager
-
Oracle Mediator
-
ヒューマン・ワークフロー
-
Oracle B2B
-
SOAインフラストラクチャ
-
Oracle BPM Suite
CPST_CREATED_DATE
列には、インスタンス・トラッキング・コードによって移入されたフロー作成日時が含まれています。これは、正規化されたメッセージ・プロパティoracle.integration.platform.instance.CommonConstants.SCA_FLOW_INSTANCE_CREATED_TIME
として使用できます。
すべてのSOAコンポーネントは同じパーティション・キーでパーティション化されます。これらのパーティション化されたコンポーネントでは同じ時間範囲とパーティションIDが使用されます。
ノート:
完全または部分的なパーティション化を実行する前に、パージ・スクリプトを実行してください。
リポジトリ作成ユーティリティを使用したデータベースのパーティション化
リポジトリ作成ユーティリティの実行中に、データベース・プロファイルを選択できます。プロファイルにより、SOAデータベースのサイズが決定され、Oracle SOA Suite関連ストレージのためのOracleデータベースのパフォーマンス機能を使用できるようになります。
-
大: 大規模なパーティション化されたスキーマを提供します。これは、200 GB以上のデータベースに対して選択します。
-
小: パーティションのない小さなスキーマを提供します。
詳細は、『リポジトリ作成ユーティリティによるスキーマの作成』のカスタム変数に関する項を参照してください。
コンポーネント・データベース表のパーティション化
Oracle SOA Suiteには、DBAがOracle RDBMSのパーティション化機能を活用できるように、パーティション・キーが備えられています。このアクションにより、スキーマ表を時間間隔に基づいてレンジ・パーティション化できます。これは、大規模な表のデータベース・メンテナンス・ウィンドウを短縮する必要がある場合に役立ちます。(この章では説明していませんが、これにより、パーティション化されたデータをアーカイブすることもできるようになります。)
Oracle SOA Suiteの表をパーティション化するタスクは、熟練したDBAが実行する必要があります。表のパーティション化はDBAのコア・スキルであるため、この章では表をパーティション化する方法について、ステップを追った詳細な説明は行いません。ここでは、Oracle SOA Suiteのスキーマおよび関連するスクリプトに関する、DBA向けの知識と説明を提供します。DBAは、この知識を活用して、各自の環境での任意のパーティション化戦略をカスタマイズし、データベースのパフォーマンスに応じたチューニング・パラメータを組み込むことができます。チューニングは状況に応じて実施する必要があり、また、構成に1回変更を加えるのみでは完了しません。これは監視とチューニングの反復プロセスです。
次のコンポーネントは、コンポーネント独自のデータベース・スキーマに関連付けられています。
-
Oracle BPEL Process Manager
-
Oracle Mediator
-
ヒューマン・ワークフロー
-
Oracle B2B
-
SOAインフラストラクチャ
-
Oracle BPM Suite
表のパーティション化の詳細は、次のURLにあるOracleデータベース管理ドキュメント・ライブラリを参照してください。
http://www.oracle.com/technetwork/indexes/documentation/index.html
ノート:
-
DBAは、特に、ラージ・オブジェクト(LOB)セグメントがある表について、ハッシュ・サブパーティションの適用を検討することがあります。これは最高水位(HW)エンキューの競合への対応に役立つ場合があります。
-
単調に増加する主キー(
CIKEY
など)に対してグローバル・ハッシュ索引を使用すると、ブロックの競合が緩和されることがあります。
参照整合性および同一レベル・パーティション化
パフォーマンス上の理由から、Oracle BPEL Process Manager、Oracle Mediator、ヒューマン・ワークフロー、Oracle B2B、SOAインフラストラクチャおよびOracle BPM Suiteスキーマでは、整合性を強制するための外部キー制約がありません。このことには、参照パーティション化と呼ばれるRDBMS機能を使用することが考慮されています。この機能は、外部キー制約を横断して、マスター表と詳細表の同一レベル・パーティション化を行うことによって、大きな利点をもたらします。同一レベル・パーティション化とは、関連する依存表の行が、マスター表の行と同じパーティション・キー間隔を持つ、1つのデータベース・パーティションに存在することを意味します。
この機能には、同一レベル・パーティション内の各詳細行の状態(完了、フォルトなど)について、その行に関連するマスター表の行から推測できるという利点があります。
RDBMSの参照パーティション化機能は使用できませんが、類似した動作を模倣して、いくつかの同じ利点を得ることができます。Oracle BPEL Process Manager、Oracle Mediator、ヒューマン・ワークフロー、Oracle B2B、SOAインフラストラクチャおよびOracle BPM Suiteのコンポーネントでは、詳細表の各行のパーティション・キーが、マスター表の行のパーティション・キーと同じであることが保証されます(つまり、詳細表でも日付(タイムスタンプ)がパーティション・キーとなります)。この場合、設定を完了するために、DBAはマスター表と詳細表が同じ間隔でレンジ・パーティション化されていることを確認する必要があります。この章の後の各項で、いくつかの例を示します。
ノート:
実際のサイトでは、古いパーティションについては参照整合性を考慮する必要がないと判断することがあります。たとえば、サイトに十分なディスク領域があるために、古いデータを格納することが許容されている場合や、参照されないデータを依存表に保管しておいても、特に悪影響がない場合をあげることができます。
レンジ時間隔パーティション化
レンジ時間隔パーティション化は、リリース11gのレンジ・パーティション化機能の拡張で、リリース12cの機能です。レンジ・パーティション化では、各パーティションを手動で割り当てる必要がありました。レンジ時間隔パーティション化では、パーティションを手動で割り当てる必要はありません。指定された間隔のパーティションは、割り当てたパーティション・キーの間隔値が既存のすべてのレンジ・パーティションを超えると自動的に作成されます。検証スクリプトではレンジ時間隔パーティション化がサポートされています。
レンジ時間隔パーティション化の詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。
同一レベル・パーティション化およびレンジ時間隔パーティション化
同一レベル・パーティション化の目標は、すべての依存表パーティションに、マスター表パーティションに対応する関連付けられた行の完全なセットが含まれるようにすることです。これは次のようにして行います。
-
パーティション・キー値は、依存表のレンジが同じになるように、マスター・キーからすべての依存表に伝播されます。
-
マスター・キーには、各フローの状態(オープンまたはクローズ)が格納されます。マスターがチェックされ、すべてがクローズされていると、同じパーティション・レンジを持つ依存表の削除が可能になります。
レンジ時間隔パーティション化の検証スクリプトでは、依存表パーティションごとに、マスター・パーティションと比較して次の点をチェックします。
-
同じ間隔定義(各表では、月次、週次、日数などについて同じ間隔定義が必要です)。
-
上限値と下限値はデータベースによって自動的に維持されます。
-
-
削除する必要のあるパーティションでは、上限値が同じであることが必要です。
レンジ時間隔パーティション化の例
次の例では、レンジ時間隔パーティション化の動作を示します。この例では、SCA_FLOW_INSTANCE
マスター表が使用されます。
CREATE TABLE SCA_FLOW_INSTANCE (FLOW_ID INTEGER NOT NULL; . . . . . . CREATED_TIME TIMESTAMP NOT NULL) PARTITION BY RANGE (CREATED_TIME) INTERVAL(NUMTOYMINTERVAL(1, 'MONTH')) PARTITION p0 VALUES LESS THAN (TO_DATE('1-2-2007', 'DD-MM-YYYY')));
表14-5に、前述の例で示されている構文を説明します。
表14-5 レンジ時間隔パーティション化の例
構文 | 説明 |
---|---|
PARTITION BY RANGE (CREATED_TIME) |
パーティション・キー(たとえば、2013年7月1日の日付は |
INTERVAL(NUMTOYMINTERVAL(1, 'MONTH')) |
間隔(この例では、1か月を指定)。したがって、パーティション・キーが( ノート: 同一レベル・パーティション化に対して上限および下限が作成されるように、すべてのOracle SOA Suite表はこの同じ間隔値を使用して作成する必要があります。 |
PARTITION p0 VALUES LESS THAN (TO_DATE ('1-2-2007', 'DD-MM-YYYY'))); |
最初のパーティションはレンジ・パーティションである必要があります。これは遷移ポイントで、この後はすべてのパーティションが自動的に割り当てられます。最初のレンジ・パーティションには、使用されることのない このパーティションの日付によって、パーティションは仮想メタデータになります。この日付により、必要に応じて簡単にパーティションを削除できます。 |
次の例に示すSQLコマンドでは、作成された最初のレンジ・パーティションを識別します。最後の行の値No
は、これがレンジ・パーティションであって時間隔パーティションでないことを示します。
SQL> select partition position, partition name, high value, interval from user_tab_partitions where table_name = 'SCA_FLOW_INSTANCE'; -------------------------------------------------------------- 1 P0 TIMESTAMP' 2007-02-01 00:00:00' No
次の例に示すSQLコマンドでは、システム名、上限値、およびこれが時間隔パーティションであるかどうかを識別します。最後の行の値Yes
は、これが時間隔パーティションであることを示します。出力の2行目は削除されます。最初の行は単なるメタデータであり、削除されません。パーティションは、日付を挿入すると自動的に割り当てられます。システム名は自動的に生成され、パーティションは日付に基づき必要に応じて割り当てられます。
SQL> INSERT INTO SCA_FLOW_INSTANCE VALUES(..TO_TIMESTAMP('1-5-2013', 'DD-MM-YYYY')...}; -------------------------------------------------------------- 1 P0 TIMESTAMP' 2007-02-01 00:00:00' No 2 SYS_P532 TIMESTAMP' 2013-06-01 00:00:00' Yes
次の例に示すSQLコマンドでは、2行目と3行目を、削除するパーティションとして識別します。これは前の月(2013年5月ではなく2013年3月)から実行されているため、別のパーティションが挿入されます。パーティションの位置は変更されます。
SQL> INSERT INTO SCA_FLOW_INSTANCE VALUES(..TO_TIMESTAMP('1-3-2013', 'DD-MM-YYYY')...}; -------------------------------------------------------------- 1 P0 TIMESTAMP' 2007-02-01 00:00:00' No 2 SYS_P578 TIMESTAMP' 2013-04-01 00:00:00' Yes 3 SYS_P532 TIMESTAMP' 2013-06-01 00:00:00' Yes
パーティション・キーの選択の概要
スキーマのパーティション・キーを選択する場合は、次の要素を考慮します。
-
参照整合性の状態(完了など)を伝達するか、または暗黙的に示すこと
-
メンテナンス操作のための、時間間隔でのレンジ・パーティション化が可能であること
-
参照されないデータが生じる可能性がある行の移動を回避するために静的であること
-
表のメンテナンス操作を実行する場合に行が移動されないように、静的であること
-
パーティション・プルーニングによってコンソール問合せに対するパフォーマンス上の利点がもたらされること
パーティションの構成
パーティション化は、デフォルトでは構成されていません。手動で実行する必要があるインストール後ステップです。データベースのパーティション化を実装することにした場合は、いくつかの初期構成タスクを1回のみ実行する必要があります。
-
この章の情報に従がって、パーティション化するグループを決定します。
-
それらのグループごとに、パーティション化する必要がある各グループに一部の必須表があることを念頭に、パーティション化する表を決定します。
-
グループごとに、パーティション間隔を決定します。
-
Oracle SOA Suiteスキーマをパーティション化するパーティション・スクリプトを作成します。スクリプトは提供されないため、各DBAに、各自の環境に適したパーティション・スクリプトを作成する責任があります。
検証スクリプトの概要
パーティションおよび同一レベル・パーティション化された依存表を削除するタイミングを識別するために、DBAには検証スクリプトが提供されています。この検証スクリプトでは、長時間実行されているアクティブなインスタンスの存在も識別されます。その後、これらのインスタンスを別のパーティションに移動し、元のパーティションを削除できます。検証スクリプトではレンジ時間隔パーティション化がサポートされています。
ノート:
検証スクリプトではパーティションが削除できることを確認するのみであり、パーティションを削除しません。スクリプトで正確なデータを得るためには、すべての表に対してパーティション化を有効にすることが重要です。
コンポーネント表
この項では、パーティション化の制約について説明し、コンポーネント表、コンポーネント表が属するグループおよびそのパーティション・キーのリストを示します。
パーティション化の制約
次に示す表のパーティション化の制約に注意してください。
-
パーティション化のアプローチには、次の選択肢があります。
-
完全なパーティション化: サービス・コンポーネント/サービス・エンジンのすべての表をパーティション化します。
-
パーティション化なし: サービス・コンポーネント/サービス・エンジンの表をパーティション化しません。
-
部分的なパーティション化: パーティション化を増加率が高い特定の表に制限します。
いずれの表も、次の制限に従ってパーティション化できます。
-
依存表をパーティション化する場合は、そのマスター表もパーティション化する必要があります。
-
すべての表は、同じ日付範囲と同じ名前に従って同一レベル・パーティション化される必要があります。
-
SCA_FLOW_INSTANCE
表は、常にパーティション化します。いずれかのコンポジットの「監査レベル」プロパティが「開発」または「本番」に設定されている場合、この制約は必須です。検証スクリプトは、そのパーティション内のアクティブなビジネス・フロー・インスタンスに基づいて、アクティブなフローをチェックします。したがって、SCA_FLOW_INSTANCE
表がパーティション化されていない場合、すべての表の同一レベル・パーティション化に基づく全体検証スクリプト・ロジックは機能しません。
-
-
-
グループやコンポーネントに関係なく、パーティション化されたすべての表では、同じ時間範囲およびパーティションIDが使用されます。
コンポーネント表、レンジ・パーティション・キーおよびグループ
表14-6から表14-11までは、3つのグループに分けられます。
-
グループ1: コンポジットのエンドツーエンド・フロー・トレースに直接関係する表が含まれます。表の大多数がこのグループに該当します。
-
グループ1A: フロー・トレースに直接関係しない表の小規模なセットが含まれます。
-
グループ2: グループ1とグループ1Aの表の複数の表に依存する表の小規模なセットが含まれます。グループ2の検証スクリプトを実行する前に、まず、グループ1の検証スクリプトを実行して、グループ1のパーティションを削除する必要があります。
ノート:
グループ1と1Aは、検証スクリプト内で結合されています。検証スクリプトを実行する際に、この分類に関する知識は必要ありません。
表14-6 コンポーネント: SOAインフラストラクチャ
表 | レンジ・パーティション・キー | グループ |
---|---|---|
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
表14-7 コンポーネント: Oracle BPEL Process Manager
表 | レンジ・パーティション・キー | グループ |
---|---|---|
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1A |
|
|
1A |
|
|
1A |
|
|
2 |
表14-8 コンポーネント: Oracle Mediator
表名 | レンジ・パーティション・キー | グループ |
---|---|---|
|
|
1 |
|
|
2 |
表14-9 コンポーネント: ヒューマン・ワークフロー
表 | レンジ・パーティション・キー | グループ |
---|---|---|
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
表14-10 コンポーネント: Oracle B2B
表 | レンジ・パーティション・キー | グループ |
---|---|---|
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
表14-11 コンポーネント: Oracle BPM Suite
表 | レンジ・パーティション・キー | グループ |
---|---|---|
|
|
1 |
|
|
1 |
|
|
1 |
同一レベル・パーティション化および時間隔パーティション化の検証スクリプト・チェック
検証スクリプトでは、チェックの実行時に次の2つの表を使用します。
-
USER_PART_TABLES
-
USER_TAB_PARTITIONS
表に対して定義した間隔の定義をチェックするには、次のようにします。
SQL> select INTERVAL from USER_PART_TABLES
where table_name = 'table_name';
パーティションの上限値をチェックするには:
SQL> select high_value from USER_TAB_PARTITIONS where table_name = 'table_name' and partition_name = 'partition_name';
検証スクリプトの実行
MW_HOME
/
SOA_ORACLE_HOME
/rcu/integration/soainfra/sql/verify
のディレクトリにあります。検証スクリプトには、スキーマが時間隔パーティションかレンジ・パーティションかによって2つのバージョンがあります。
-
soa_exec_interval_verify.sql
-
soa_exec_verify.sql
検証スクリプトは、パーティションが削除可能かどうかを判断するのに役に立ちます。検証スクリプトを実行すると、パーティションごとにログ・ファイルと結果ファイルが生成されます。ログ・ファイルを調べ、データベース管理者は、結果ファイルを実行してパーティションを削除できるかどうかを評価する必要があります。
ログ・ファイルを調べると、アクティブなインスタンスが多すぎることが判明し、データベース管理者がパーティションの延長を決定する場合があります。少数のインスタンス、たとえば5%のインスタンスしか開かれていないことがわかった場合、データベース管理者は行の移動を実行して、そのインスタンスを他のパーティションに移すことができます。パーティションの特定のインスタンスを他のパーティションに移すと、そのパーティションは削除できます。
検証スクリプトを実行するには:
ノート:
検証スクリプトは、ビジネス・ルールには用意されていません。
別のパーティションへの長時間実行されているアクティブなインスタンスの移動
行移動プロシージャは、等しくパーティション化されたすべての表で行を移動する必要があるため、行の移動は負荷が高くなります。パーティショニング戦略を計画する際には、オープン・インスタンスの比率がパーティションの全行数の5%未満になるように、パーティションが十分に時間経過できることを確認します。
パーティションのメンテナンスに役立つルーチン
Oracle SOA Suiteには、データベース側のパーティション・メンテナンスを支援するルーチンが複数あります。ルーチンには、外部キーを有効または無効にするスクリプト、時間隔パーティション表の間隔を変更するスクリプト、行の移動後に行をリストアするスクリプトがあります。
行の移動などパーティションのメンテナンス・ルーチンは、パッチ21181834を通じて12.1.3に追加されました。ルーチンは、パッチ21520523を通じて12.2.1に追加されています。次のルーチンについて説明します。
行のリストア(verify_soa.exec_row_restore_1)
このルーチンは、グループ1の表のパーティション・キーをリストアして元の値に戻す際に使用されます。フローが行移行され、適切なパーティションを削除すると、行リストアのルーチンを実行できます。ルーチンが正常に完了すると、行リストア切捨てのルーチンを実行できます。
BEGIN
verify_soa.exec_row_restore_1;
END;
行リストア切捨て(verify_soa.trunc_verify1_rst_temp_tables)
このルーチンは、表verify_r_group1
を切り捨てます。これは、行リストアのルーチンが正常に実行されてから実行してください。行リストアのルーチンは、成功するまで繰り返してください。行リストア切捨てを実行すると、行リストアのルーチンは繰り返せなくなります。(ノート: 切捨ての前に表verify_r_group1のバックアップも検討してください)。
ノート:
切捨てルーチンを実行する前に、表verify_r_group1
のバックアップを検討します。
BEGIN
verify_soa.trunc_verify1_rst_temp_tables;
END;
時間隔の変更(verify_soa.alter_interval)
このルーチンを使用して、時間間パーティション表の時間間を変更します。このルーチンで、PART_DIR
ディレクトリにSQLスクリプトが生成されます。これで、SOAINFRA
ユーザーがSQLスクリプトを実行できるようになります。
ステップ1: SQLスクリプトの生成
set echo on;
set serverout on;
/*
NUMTOYMINTERVAL(1, ''MONTH'')
NUMTODSINTERVAL(1, ''DAY'')
NUMTODSINTERVAL(7, ''DAY'')
*/
begin
verify_soa.alter_interval('NUMTODSINTERVAL(1, ''DAY'')');
end;
ステップ2: 生成されたSQLスクリプトの実行
SQL> @SOA_ALTER_INTERVAL_GROUP1.SQL
外部キーの変更(verify_soa.alter_FK)
パーティションを削除する前に外部キーを無効化し、パーティション削除コマンドの後で外部キーを再度有効化する際に使用します。このルーチンで、PART_DIR
ディレクトリに2つのSQLスクリプトが生成されます。SQLスクリプトは、それぞれのパフォーマンス要件に応じてカスタマイズできます。SQLスクリプトは、SOAINFRA
ユーザーとして実行する必要があります。
ステップ1: SQLスクリプトの生成:
set echo on;
set serverout on;
begin
verify_soa.alter_fk;
end;
ステップ2: 有効化および無効化コマンドを、必要に応じて実行します。
SQL> @SOA_DISABLE_FK.SQL
SQL> @SOA_ENABLE_FK.SQL
グローバル索引の更新
パーティション・メインテナンス・スクリプトは、update global index句を使用してdrop partition文を実行します。この句を使用すると索引の再構築は避けられますが、競合が発生します。競合を回避するには、オフピーク時に、またはメンテナンス・ウィンドウでパーティション・メンテナンスを実行してください。
コンポーネントの部分的なパーティション化
一部のコンポーネントがパーティション化され、他のコンポーネントがパーティション化されていない環境の場合、パーティション化されていないデータセットは、第13.3項「大量のフロー・インスタンス、アダプタ・レポートおよびフォルト・アラートの削除」で説明したパージ・スクリプトを使用してパージする必要があります。
たとえば、ヒューマン・ワークフローがパーティション化されておらず、他のコンポーネントがパーティション化されているとします。検証スクリプトでは、すべてのSOAパーティションがパーティションの削除コマンドを使用して削除可能とレポートされます。ただし、ヒューマン・ワークフローの各表は、ループ/パラレル・パージ・スクリプトを使用してデータがパージされるまで、引続きワークフロー・データを保持します。
表削除なしでの実行時表からのレコードの削除
切捨てスクリプト(truncate_soa_oracle.sql
、およびOracle SOA Suiteクイック・スタート・インストールで提供されるJavaデータベースの場合はtruncate_soa_javadb.sql
)により、表を削除することなくすべてのOracle SOA Suiteランタイム表からすべてのレコードを削除できます。切捨てスクリプトでは、データベース領域の再利用はできません。
切捨てスクリプトは、次のシナリオで役立ちます。
-
本番のカスタマイズおよび新規ジョブ定義を保管できるように本番環境のスキーマを保持する一方で、SOAインフラストラクチャ内(つまりクローン・データベース内)のすべてのインスタンス・データを状態にかかわりなく切り捨てる必要がある状況で、本番環境またはテスト環境クローンを作成する場合。
-
テスト・シナリオの再作成および再実行を必要とするテストでの使用。
切捨てスクリプトは、次のコンポーネントのすべての実行時表を対象とする切捨て文を含めることによって、このオプションを提供します。
-
Oracle BPEL Process Manager
-
Oracle Mediator
-
ビジネス・ルール
-
Oracle B2B
-
SOAインフラストラクチャ
-
Oracle BPM Suite
表を削除することなく実行時表からレコードを削除するには: