Oracle® Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suiteの管理 12c (12.2.1) E69952-02 |
|
前 |
次 |
この章の内容は次のとおりです。
注意:
表のパーティション化は高度なデータベース・タスクであるため、熟練したデータベース管理者(DBA)のみが実行する必要があります。
データベース増大問題のトラブルシューティングに関する詳細は、「パラレル・パージと表のパーティション化の問題」、「表領域の拡張による実行時の問題の回避」および「大量のトランザクションによるデータベース増大の問題の解決」を参照してください。
データベース増分管理戦略の詳細は、「データベース増分管理戦略の策定」を参照してください。
Oracle SOA Suiteデータベースのデータ量が増加して非常に大きくなると、データベースのメンテナンスが困難になる場合があります。この課題に対処するため、データベースの増分管理には表13-1 に示すようにいくつかの方法が用意されています。
表13-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で手動実行
パージ・スクリプトおよびパーティション化(つまり、表パーティションの削除)
すべての表のパーティション化
最初の2つの場合では、同じパージ・スクリプトが使用されます。パーティション化する場合でも、パーティション化された表をコメント・アウトするためにパージ・スクリプトを編集する必要があります。
パージ・スクリプトでは、BPEL表から行を削除するために標準のSQL DELETE
文を使用します。ほとんどのサイトではこれで十分です。ただし、サイトによっては蓄積されたデータが多すぎて、パージ・スクリプトの実行時間が非常に長くなることがあります。このような場合は、パーティション化の方がより適切な解決策となります。ただし、パーティション化によって非常に多くのデータベース・メンテナンス作業が発生することがトレードオフとなります。また、パーティション化は高度な技術であり、知識のあるDBAが必要となります。一方、パージ・スクリプトは簡単に実行でき、かつ、DBAの専門的な知識を必要としません。
入力メッセージ、データベース増分率およびパージ・プロセスでパージされるデータ量の概要を確認します。入力レートとパージ・レートが同じである場合は、通常のパージで十分です。これ以外の場合、パーティション化を検討します。
パーティション化を使用する場合、ディスク領域を追加し、最終的にパーティションを削除することをお薦めします。ただし、このことによってディスク容量の管理や適切なパーティション・サイズの決定などの追加要件が発生します。パーティション化を使用し、かつ、ディスク領域を解放するためにパージ・スクリプトに依存することは避けてください。
フロー・インスタンス、アダプタ・レポートおよびフォルト・アラートは、(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からパージ・スクリプトを呼び出して、フロー・インスタンス、アダプタ・レポートおよびフォルト・アラートを削除する方法について説明します。
注意:
IBM DB2データベースでは、パージ・スクリプトはサポートされません。
次の状態のインスタンスは、Oracle Enterprise Manager Fusion Middleware Controlまたはパージ・スクリプトを使用してパージします。
正常終了
フォルト
ユーザーによって終了されました
中断
不明(インスタンス・トラッキングが無効)
次のインスタンス状態のパージはサポートされていません。
BPELプロセス・サービス・エンジン・レベルまたはSOAコンポジット・アプリケーション・レベルでのリカバリを保留中のインスタンス
実行中のインスタンス
このようなインスタンスをパージするには、まずパージ・スクリプトによってサポートされるインスタンス状態のいずれかに移行する必要があります。
Oracle Enterprise Manager Fusion Middleware Controlの「自動パージ」ページを使用して、より古いフロー・インスタンス、アダプタ・レポートおよびフォルト・アラートを自動的にデータベースから削除するジョブをスケジュールおよび実行します。
注意:
ランタイム環境のパフォーマンスを最適化するために、「自動パージ」ページで自動パージを有効にすることをお薦めします。自動パージの状態は、SOAインフラストラクチャおよび個々のパーティション・レベルの「ダッシュボード」ページの「キー構成」セクションに表示されます。自動パージは、12cの新規インストールで自動的に有効になりますが、アップグレードされた環境では有効になりません。
パージ構成を有効化または変更する前に、重要なデータをバックアップするようにしてください。
SOA開発者インストール・オプションに含まれるJavaデータベースを使用している場合、「自動パージ」ページは使用できません。truncate_soa_javadb.sql
スクリプトを使用してデータベースをパージします。
次のいずれかのオプションを使用して、このページにアクセスします。
SOAインフラストラクチャのメニューから... | ナビゲータのSOAフォルダから... | 「ダッシュボード」ページの「キー構成」セクションから... | 「ダッシュボード」ページの「キー構成」セクションから... |
---|---|---|---|
|
|
|
|
自動パージ・ページが表示されます。
環境に適した値を選択し、「適用」をクリックします。
フィールド | 説明 |
---|---|
自動パージ・ジョブ |
実行する事前定義済のデータベース・パージ・ジョブを選択します。ジョブを追加することはできません。たとえば、次を選択できます。
警告: 自動パージ・ジョブを有効化または無効化する場合は、別のジョブを選択するか、このページから移動する前に、変更内容を保存するか元に戻す必要があります。そうしないと、現在選択しているジョブに対して行った未保存の変更は失われます。 |
有効 |
選択すると、「自動パージ・ジョブ」リストから選択されたデータベース・パージ・ジョブによる自動データベース・パージが有効になります。 有効にした時点で、パージ期間が開始します。たとえば、データの保存フィールドに7日間と指定した場合、このチェック・ボックスを再び有効にした日からデータが保存されます。より新しいデータは作成後7日間保存されます。 |
カレンダ式アイコン |
クリックすると、ジョブのスケジュール設定構文の例が表示されます。環境に合う構文をコピーして、「ジョブ・スケジュール」フィールドに貼り付け、必要に応じて変更します。「詳細情報」をクリックすると、 |
ジョブ・スケジュール |
インスタンスをパージするジョブ実行スケジュールを指定します。デフォルトのスケジュールでは、毎日午前0時にパージを実行します。これは必須フィールドです。スケジュールを指定するには、有効なカレンダ式を使用します。一般的に使用される式の例を表示するには、「情報」アイコンまたはカレンダ式アイコンをクリックします。スケジュール構文では、大文字と小文字は区別されません。 |
パージ・タイプ |
実行するパージ・スクリプトのタイプを選択します。これは必須フィールドです。
単一(ループ)およびパージ・パラレル・スクリプトの詳細は、「ループされるパージ・スクリプト」および「dbms_schedulerを使用したパラレル・スクリプトでのループされるパージ」を参照してください。 |
データの保持 |
データを保持する期間(日数)を指定します。ジョブを実行しても、この期間内のデータはパージされません。デフォルト値は7日間です。たとえば、7日間のデータ保持間隔を指定する場合、データは作成されてから7日間、パージから保護されます。システム内にすでに存在する古いデータは、自動パージが有効化されてから7日間保持されます。このプロパティを |
パージする最大フロー |
1回のジョブ実行でパージするインスタンス・フローの最大数を選択します。 |
バッチ・サイズ |
一度に削除するビジネス・フローの最大数を選択します。デフォルト値は このフィールドが表示されるのは、「パージ・タイプ」リストで「パラレル」が選択されている場合です。 |
並列度 |
パラレルで実行するジョブの数を選択します。デフォルト値は このフィールドが表示されるのは、「パージ・タイプ」リストで「パラレル」が選択されている場合です。 |
システムMBeanブラウザの詳細な構成プロパティを表示して構成するには、「詳細な自動パージ構成プロパティ」をクリックします。
「PurgeJobDetails」をクリックします。
事前定義済の2つのデータベース・パージ・ジョブが表示されます。
delete_instances_auto_job1
delete_instances_auto_job2
ジョブを展開して、単一パージおよびパラレル・パージのすべてのプロパティを表示します。単一パージとパラレル・パージのいずれかのパージ・タイプが実行されると、選択したタイプに適切なプロパティ値が実行されます。
注意:
詳細パージ・プロパティを編集する必要がある場合は、最新の注意を払ってください。たとえば、ジョブ名を変更しないでください。
値を表示または変更して、「適用」をクリックします。
フィールド | 説明 |
---|---|
DOP |
パラレルで実行するジョブの数を定義します。デフォルト値は |
PQS |
パラレル問合せスレーブの数を表示します。さらにスレーブを追加して負荷の高いSQLコマンドのパフォーマンスを向上できます。 |
batchSize |
一度に削除できるビジネス・フローの最大数を表示します。デフォルト値は |
有効 |
データベース・パージ・ジョブが有効になっているかどうかを示します。 |
executionSchedule |
ジョブのスケジュール設定構文を表示します。 |
ignoreState |
注意: オープン・インスタンスのパージは、システムを不整合状態にする可能性があるため、このパラメータは慎重に使用してください。 |
maxCount |
パージするフローの最大数を表示します。 |
maxCreationPeriodDays |
最長の作成期間を日数で表示します。このプロパティは、特定の期間内に作成されたフローを選択するために、minCreationPeriodDaysとともに使用されます。 |
maxRuntime |
パージ・スクリプトがループを終了する有効期限。デフォルト値は |
minCreationPeriodDays |
最短の作成期間を日数で表示します。このプロパティは、特定の期間内に作成されたフローを選択するために、maxCreationPeriodDaysとともに使用されます。 |
purgePartitionedComponent |
パーティション化された表をパージする必要があるかどうかを示します。 注意: 表は、パーティション化すると |
purgeType |
単一またはパラレルのいずれかを表示します。 |
retentionPeriodDays |
データを保持する期間(日数)を指定します。パージ・ジョブを実行しても、この期間内のデータはパージされません。 |
sqlTrace |
SQLトレースの詳細は、Oracle Database SQLチューニング・ガイドを参照してください。 |
注意:
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
プロシージャを使用します。次の例は構文を示しています。
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 );
表13-2 で、スクリプトのパラメータについて説明します。
表13-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
パッケージを使用します。
SOAデータベース表をパージするには、次の手順を使用します。
注意:
複数のCPUを持つホストがある場合、パラレル・スクリプトを使用することが役立ちます。ただし、パラレル・スクリプトはオフピーク時にのみ有効化することをお薦めします。さらに、オフピーク時にデータをパージするとき、大量のデータをパージする前に索引を削除し、後で索引を追加して戻すことをお薦めします。これにより、パージ処理が高速化され、索引のバランスを維持できます。
インスタンスを削除するには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
表13-3 で、スクリプトのパラメータについて説明します。
表13-3 パラレルでのdelete_instancesプロシージャのパラメータの説明
パラメータ | 説明 |
---|---|
|
ビジネス・フロー・インスタンスの最短の作成期間(日数)。 |
|
ビジネス・フロー・インスタンスの最長の作成期間(日数)。 |
|
削除対象に選択されたフローの最大数。デフォルト値は |
|
パージ・スクリプトがループを終了する有効期限。デフォルト値は |
|
データを保持する期間(日数)を指定します。ジョブを実行しても、この期間内のデータはパージされません。デフォルト値は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_ORACLE_HOME
/soa/common/sql/soainfra/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('2010-01-01','YYYY-MM-DD'); MAX_CREATION_DATE := to_timestamp('2010-01-31','YYYY-MM-DD'); max_runtime := 60; retention_period := to_timestamp('2010-01-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('2010-01-01','YYYY-MM-DD'); max_creation_date := to_timestamp('2010-01-31','YYYY-MM-DD'); batch_size integer; max_runtime integer; retention_period := to_timestamp('2010-01-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コンポジット・アプリケーションのインスタンスをパージし、その他のコンポジットのインスタンスはパージせずに残すことができます。このアクションを使用して、大量または保存期間が長い特性のために、特定のフローを他のフローより頻繁にパージできます。
パージ・スクリプトには、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のリシーケンサ表(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から実行されたパージ・ジョブは、表13-4 に示されているSQLコマンドを使用して監視できます。
表13-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*Plusから直接実行する場合、パラメータはsql_trace
パラメータと名付けられます。
パージ・スクリプトをOracle Enterprise Manager Fusion Middleware Controlの「自動パージ」ページから実行する場合、パラメータはsqlTraceと名付けられます(「詳細な自動パージ構成プロパティ」リンクの下にあります)。
このパラメータをtrue
に設定すると、データベース・ユーザーのdump
ディレクトリに配置されるデータベースSQLトレースが生成されます。パラレル・パージ・スクリプトの場合、従属する各パラレル・パージ・ジョブ(J000、J001など)にもSQLトレースが生成されます。
パージ・スクリプトでパラレル問合せスレーブが有効になっている場合は、トレース・ファイルが作成されます。トレース・ファイルは、sql_trace
の設定時に生成されます。パラレル・パージ・スクリプトを使用すると、J*
という名前で複数のトレース・ファイルが作成されます。
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')));
表13-5 に、前述の例で示されている構文を説明します。
表13-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が使用されます。
表13-6 から表13-11 までは、3つのグループに分けられます。
グループ1: コンポジットのエンドツーエンド・フロー・トレースに直接関係する表が含まれます。表の大多数がこのグループに該当します。
グループ1A: フロー・トレースに直接関係しない表の小規模なセットが含まれます。
グループ2: グループ1とグループ1Aの表の複数の表に依存する表の小規模なセットが含まれます。グループ2の検証スクリプトを実行する前に、まず、グループ1の検証スクリプトを実行して、グループ1のパーティションを削除する必要があります。
注意:
グループ1と1Aは、検証スクリプト内で結合されています。検証スクリプトを実行する際に、この分類に関する知識は必要ありません。
表13-6 コンポーネント: SOAインフラストラクチャ
表 | レンジ・パーティション・キー | グループ |
---|---|---|
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
表13-7 コンポーネント: Oracle BPEL Process Manager
表 | レンジ・パーティション・キー | グループ |
---|---|---|
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1A |
|
|
1A |
|
|
1A |
|
|
2 |
表13-8 コンポーネント: Oracle Mediator
表名 | レンジ・パーティション・キー | グループ |
---|---|---|
|
|
1 |
|
|
2 |
表13-9 コンポーネント: ヒューマン・ワークフロー
表 | レンジ・パーティション・キー | グループ |
---|---|---|
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
表13-10 コンポーネント: Oracle B2B
表 | レンジ・パーティション・キー | グループ |
---|---|---|
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
表13-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';
データベース管理者がパーティションおよびパーティションの同一レベル・パーティション化された依存表を削除するタイミングを識別できるように、検証スクリプトが提供されています。soa_exec_interval_verify.sql
検証スクリプトは、MW_HOME
/
SOA_ORACLE_HOME
/rcu/integration/soainfra/sql/verify
にあります。
検証スクリプトを実行する手順は次のとおりです。
注意:
検証スクリプトは、ビジネス・ルールには用意されていません。
パーティションを検証して削除するには、次の手順を実行します。
verify_soa.verify_interval_1
を実行します。PART_DIR
フォルダのSOA_
PARTITION_NAME
_LOG_1
という名前のログ・ファイルにエラーがあるかどうかをチェックします。PART_DIR
フォルダに生成されたSOA_
PARTITION_NAME
_RESULT_1.sql
という名前のスクリプトを使用して、削除可能なパーティションを削除します。verify_soa.verify_interval_2
を実行します。PART_DIR
フォルダのSOA_
PARTITION_NAME
_LOG_2
という名前のログ・ファイルにエラーがあるかどうかをチェックします。PART_DIR
フォルダに生成されたSOA_
PARTITION_NAME
_RESULT_2.sql
という名前のスクリプトを使用して、削除可能なパーティションを削除します。注意:
Oracle B2B表に外部キー制約が存在することによって発生する問題があります。パーティションを削除する場合にB2Bパーティションのパージが起動されるとき、パーティションを削除する前に外部キー制約を無効化し、後で有効化する必要があります。このアクションを実行するには、前述の手順の適切なステップで、PL/SQLプロシージャb2b_disable_constraints
およびb2b_enable_constraints
を実行する必要があります。これらのプロシージャでは外部キーが有効化および無効化されるため、稼働中のシステムでは実行しないことをお薦めします。
この検証スクリプトでは、パーティション内にアクティブなインスタンスが存在するかどうかが確認されます。アクティブなインスタンスがない場合は、パーティションを削除できます。しかし、パーティションには長時間実行されているアクティブなインスタンスが存在することがあります。これらのアクティブなインスタンスがあると、パーティションは削除されません。この問題を回避するために、長時間実行されているインスタンスを別のパーティションに移動できます。
Oracleデータベースには、パーティション間での行の移動を有効または無効にするためのオプションが用意されています。パーティション表を作成または変更する際は、行移動句(ENABLE
ROW
MOVEMENT
またはDISABLE
ROW
MOVEMENT
のいずれか)を指定できます。この句は、キーが更新された場合の新しいパーティションへの行の移動を有効または無効にします。このオプションによって、パーティションの削除を阻止する長時間実行されているプロセスを処理できます。
検証スクリプトでは、合計インスタンス数、オープン・インスタンス数およびパーティション内のオープン・インスタンスの割合が提供されます。この情報に基づいて、行移動プロシージャの実行が選択可能になります。これによりターゲット表のパーティション・キーが更新され、これらのインスタンスの別のパーティションへの行移動が順に開始されます。パーティション化されたすべての表からアクティブなインスタンスすべてが別のパーティションに移動した後は、ターゲット・パーティションを削除できます。
注意:
長時間実行されているアクティブなトランザクションには、個別のパーティションを作成してください。次に、そのパーティションの範囲に該当するnew_partition_date
を指定することで、現在のパーティションから新規のパーティションに、これらのインスタンスを移動できます。これらの長時間実行されているインスタンスには、定期的なパージを実行することをお薦めします。
行移動には、複数の行に負荷の高い更新が発生します。行の移動はアクティブなプロセス数が少ない場合にのみ実施してください。検証スクリプトによりアクティブなインスタンス数が提供されますが、依存表の多くにマスター表との多対1の関係があります。これは、大規模な一連の行がパーティション間で移動することになります(依存表もパーティション化されている場合)。パーティション化された表、パーティションのアクティブ・インスタンス、データ形状および使用可能なインフラストラクチャ設定に基づいて、個別の行移動を使用してください。
パーティション・キーが頻繁に更新される場合は、パーティション間での行移動を有効にすると、実行時のパフォーマンスが大幅に低下する可能性があります。一方、Oracle SOA Suiteのデータベース表のパーティション・キー列は、作成後に変更されることはありません。したがって、実行時に行移動は発生しません。
長時間実行されているインスタンスを別のパーティションに移動する手順は、次のとおりです。
グループ1の検証スクリプトを実行します。このスクリプトの説明は、「検証スクリプトの実行」を参照してください。
ログ・スクリプトをチェックして、パーティションの削除を阻止するアクティブなインスタンスがあるかどうかを確認します。
行移動プロシージャを実行します。ステップ2のログに基づいて、オープン・インスタンス数をチェックします。この件数に基づいて、行移動スクリプトを実行するか、パーティションの削除を延期するかを判断します。
SQL*PlusにSOAINFRA
ユーザーとしてログインします。
CONNECT SOAINFRA/password
次のPL/SQLプロシージャを実行して、グループ1の表の行を移動します。
SQL> PROCEDURE exec_row_movement_interval_1( partition_name in varchar2, new_partition_date in timestamp );
説明:
partition_name
は、行移動を実行するパーティションの名前です。
new_partition_date
は、パーティション・キー列を更新する新しい日付です。
「パージ・スクリプトの実行」の説明に従って、パージ・スクリプトを実行してパーティション化されていない表を削除します。パージ・プロシージャのpurge_partitioned_component
パラメータは、false
に設定する必要があります。
グループ1のパーティションを(ステップ3に基づいて)削除します。
グループ2の検証スクリプトを実行します。
パーティションの削除を妨げるアクティブなインスタンスがあるかどうかを確認します。
行移動プロシージャを実行します。ステップ7のログに基づいて、オープン・インスタンス数をチェックします。この件数に基づいて、行移動スクリプトを実行するか、パーティションの削除を延期するかを判断します。
SQL*PlusにSOAINFRA
ユーザーとして復帰します。
CONNECT SOAINFRA/password
次のPL/SQLプロシージャを実行して、グループ2の表の行を移動します。
SQL> PROCEDURE exec_row_movement_interval_2( partition_name in varchar2, new_partition_date in timestamp );
説明:
partition_name
は、行移動を実行するパーティションの名前です。
new_partition_date
は、パーティション・キー列を更新する新しい日付です。
グループ2のパーティションを(ステップ8に基づいて)削除します。
一部のコンポーネントがパーティション化され、他のコンポーネントがパーティション化されていない環境の場合、パーティション化されていないデータセットは、第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
表を削除することなく実行時表からレコードを削除する手順は次のとおりです。