Oracle Applications開発者ガイド リリース12 E06048-01 | 目次 | 前へ | 次へ |
Oracle Applicationsでは、コンカレント処理がオンライン操作によりバックグラウンドで動作しているプログラムを同時に実行して、ハードウェアの能力を最大限に活用できます。コンカレント処理として実行されるプログラム(「コンカレント・プログラム」と呼ぶ)を記述できます。通常、コンカレント・プログラムは仕訳転送やレポート生成など、長時間実行、データ処理集中型タスク用に作成します。
ユーザーの立場からのコンカレント処理の詳細は、『Oracle Applicationsユーザーズ・ガイド』および『Oracle Applicationsシステム管理者ガイド』を参照してください。
PL/SQLを使用して、ストアド・プロシージャ・コンカレント・プログラムを作成できます。さらに、ストアド・プロシージャまたはデータベース・トリガーとして、クライアントまたはサーバーのどちらで動作する場合でも、コンカレント要求を発行してコンカレント・プログラムを実行するPL/SQLプロシージャを開発できます。
関連項目: コンカレント処理のPL/SQL API
Oracle Application Object Libraryのコンカレント処理では、アプリケーション開発に必要な次の事項を満たすために必要な、すべての機能が提供されています。
アプリケーションが処理するデータの種類に関係なく、一貫した応答時間を保証する
長時間実行プロセスが同時に動作している場合でも、端末でのエンド・ユーザーの作業を可能にする
多くのアプリケーション・タスクを同時に実行することにより、ハードウェアのすべての機能を十分に活用できるようにする
開発者およびエンド・ユーザーは、フォームから要求を発行してコンカレント・プログラムを起動できます。要求が発行されると、すぐにコンカレント・マネージャに引き継がれ、オンラインでのさらなるやりとりなしにタスクが完了します。
Oracle Application Object Libraryは、要求がいつ発行されたか、要求の優先順位、さらにすでに稼働しているプログラムとの互換性に基づいて、自動的に要求をスケジュールします。開発者は、アプリケーションのどのプログラムを同時に実行しないかを定義します。現在実行中のプログラムと互換性のないプログラムの要求は、その非互換プログラムが終了するまで起動されません。
開発者とエンド・ユーザーは、コンカレント要求のそれぞれに対して特定の実行時オプションを制御できます。プロファイル・オプションにより、どのプリンタを使用して何枚のコピーを印刷するかなど、印刷内容を決定できます。
エンド・ユーザーは、オンラインのコンカレント要求の進行状況を確認できます。要求が完了すると、コンカレント要求のレポート出力とログ・ファイルを表示できます。さらに、デフォルトのヘルプ・メニューで「要求」を選択すると、レポート全体を出力することなくコンカレント要求の状態を参照できます。
コンカレント・マネージャはコンカレント処理の構成要素であり、時間のかかる非対話型タスクを端末に関係なくモニターおよび実行できます。開発者およびユーザーが要求を発行してタスクを実行するときはいつでも、コンカレント・マネージャがバックグラウンドで要求の処理を行うので、複数のタスクを同時に実行できます。
Oracle Application Object Libraryは、他のすべてのマネージャの「ボス」として機能する内部コンカレント・マネージャを事前定義します。内部コンカレント・マネージャは、各マネージャについて、起動、状態の検証、リセットおよびシャットダウンを行います。さらに、論理データベースとして指定されたOracleユーザー名ですでに稼働しているプログラムと、要求するプログラムのプログラム定義を比較することにより、プログラムの非互換性ルールを規定します。
インストール後に、システム管理者は必要に応じてコンカレント・マネージャを作成および調整できます。システム管理者は、各コンカレント・マネージャが同時に処理できる要求の数と、処理できる要求のタイプを選択します。コンカレント・マネージャは、ジョブ混在およびアプリケーションのスループットに対する全体的な制御機能を提供します。
同時キューイングでは、要求が多くのキューを同時に待機できるので、最初に使用可能なコンカレント・マネージャが要求を開始できます。Oracle System Administrationを使用してコンカレント処理を設定すると、複数のコンカレント・マネージャで要求を実行できます。最初に使用可能なコンカレント・マネージャが要求を開始すると、他のすべてのキューから要求が自動的に削除されます。
コンカレント・プログラムの実行ファイルにより、複数のコンカレント・プログラムに同じ実行ファイルを使用できます。コンカレント・プログラムの特別なバージョンを作成するには、同じ実行ファイルを使用して新しいコンカレント・プログラムを定義するか、コンカレント・プログラムをコピーします。必要なプリンタ、特化ルールまたはアプリケーション名によりコンカレント・プログラムを特化すると、同じ実行ファイルを異なるパラメータで使用してコンカレント・プログラムを実行できます。
C言語の汎用APIであるafprcp()関数により、標準書式を使用してCまたはPro*Cプログラムを記述し、起動実行方法または即時実行方法を含むプログラムを使用できます。同じ実行ファイルを、起動プロセスとして、あるいはコンカレント・マネージャのサブルーチンとして実行できます。
コンカレント・プログラムは、パラメータの定義と非互換性とともに、実行ファイルのインスタンスです。コンカレント・プログラムは、コンカレント・プログラム実行ファイルを使用して、実行ファイルの正確な場所を特定します。いくつかのコンカレント・プログラムが、異なるパラメータ・デフォルトと非互換性を持つそれぞれのタスクを、同じ実行ファイルを使用して実行する場合があります。
コンカレント・プログラム実行ファイルは、実行ファイルと、実行ファイルを定義済コンカレント・プログラムで実行するのに使用する方法(あるいは、そのいずれか)にリンクしています。コンカレント処理の下では、実行方法に標準言語、レポート作成ツールまたはオペレーティング・システム言語で記述されたプログラムを使用できます。
実行方法には、PL/SQLストアド・プロシージャ、Oracle ReportsまたはSQL*PlusなどのOracle Tool、起動プロセスまたはオペレーティング・システム・ホスト言語を使用できます。
コンカレント・プログラム実行ファイルは、オペレーティング・システム・ファイルまたはストアド・プロシージャです。それらのファイルにはアプリケーション・ロジックが含まれており、コマンドラインで直接起動するか、そのファイル上で動作するプログラムを起動することによって実行できます。たとえば、Pro*Cプログラムはコマンドラインで起動して実行します。さらに、SQL*Plusを実行して、.sql拡張子のないSQLスクリプトの名前を渡すことにより、SQLスクリプトを実行します。
コンカレント・プログラム・サブルーチンは、アプリケーション・ロジックを含み、コンカレント・マネージャ・コードでリンクされているPro*Cルーチンです。
実行方法によって、コンカレント・プログラム実行ファイルのタイプと、Oracle Application Object Libraryが実行ファイルを実行するのに使用する方法を特定します。
実行方法には、PL/SQLストアド・プロシージャ、Oracle ReportsまたはSQL*PlusなどのOracle Tool、起動プロセスまたはオペレーティング・システム・ホスト言語を使用できます。
Oracle Reports、PL/SQL、SQL*LoaderまたはSQL*Plusで記述されたコンカレント・プログラムです。
コンカレント・マネージャによって起動され、そのコンカレント・マネージャのプロセスで実行されるのではなく、(ほとんどのオペレーティング・システムで)独立したプロセスとして実行されるコンカレント・プログラムです。起動コンカレント・プログラムは、CまたはPro*Cスタンドアロン実行ファイルとして記述します。いくつかのオペレーティング・システムでは、オペレーティング・システム言語で起動コンカレント・プログラムを記述することもできます。
起動コンカレント・プログラムは、新規のCまたはPro*C実行ファイルに対してお薦めする実行方法です。
コンカレント・マネージャにより起動され、そのコンカレント・マネージャと同じプロセスで動作するコンカレント・プログラムです。即時コンカレント・プログラムは、CまたはPro*Cサブルーチンとして記述し、それらをコンカレント・マネージャでリンクします。
重要: 即時コンカレント・プログラムの機能は、下位互換性のためにのみ提供されています。新規の即時コンカレント・プログラムは作成しないでください。
プログラム・ライブラリは、コンカレント・マネージャに割り当てられているリンク済即時コンカレント・プログラムのセットです。コンカレント・マネージャは、すべての起動コンカレント・プログラムまたはOracle Toolコンカレント・プログラムを実行できますが、自身のプログラム・ライブラリにある即時コンカレント・プログラムは実行できません。コンカレント・マネージャが実行できるコンカレント・プログラムをさらに制限するには、特化ルールによりコンカレント・マネージャを定義する際に、Oracle System Administrationを使用します。
プログラム・ライブラリは、Oracle Application Object Libraryに登録します。プログラム・ライブラリで即時コンカレント・プログラムの短縮名をリスト表示し、Oracle System Administrationを使用してプログラム・ライブラリをコンカレント・マネージャに割り当てます。
即時コンカレント・プログラムは、複数のライブラリに含めることができます。複数のマネージャが同じライブラリを共有することは可能ですが、即時コンカレント・プログラムを実行するコンカレント・マネージャには、それぞれプログラム・ライブラリが必要です。
要求タイプにより、コンカレント・プログラムがグループ化され、コンカレント・マネージャの定義およびメンテナンス時に時間を節約できます。
親要求は、別のコンカレント要求を発行するコンカレント要求です。標準要求発行の場合、レポート・セットが親になります。レポート・セットを発行する際、レポート・セットはレポート・セットに含まれるレポートまたはプログラムを発行します。親要求は、順次またはパラレル要求のどちらの場合もあり、発行する要求が一度に1つ実行されるのか、または一度にすべて実行されるのかを決定します。
子要求は、別のコンカレント要求により発行されるコンカレント要求です。コンカレント要求を発行してレポート・セットを実行する場合、レポート・セットはコンカレント処理のセットとしてレポートを発行します。レポート・セットにより発行される要求は、子要求になります。
論理データベースは、1つ以上のORACLE IDに格納され論理的に関連しているデータのセットです。コンカレント・マネージャは、論理データベースを使用してコンカレント・プログラムの互換性の有効範囲を決定します。
コンカレント・プログラムを定義する際、どのプログラムがそのプログラムと互換性がなく、同じ論理データベースでそのプログラムと同時に実行できないかを特定します。論理データベースのユーザーは、コンカレント要求を発行してコンカレント・プログラムを実行します。要求を処理可能なコンカレント・マネージャが、ユーザーの論理データベースに現在実行中の非互換プログラムがないことを確認すると、コンカレント・マネージャはコンカレント要求を処理します。コンカレント・マネージャは、論理データベースを使用して非互換プログラムが同時に実行されないようにしています。
プログラムまたは非対話型として個別に構成可能なフォームの部分はすべて、コンカレント処理として実行される可能性があります。一般的に、エンド・ユーザーの端末でコンカレント・プログラムを処理できるアプリケーション機能の作成を考慮する必要があります。コンカレント処理の利点を最もよく生かしている機能には、多くのデータベース処理を実行するファンクションおよびレポートがあります。
コンカレント処理の機能および仕様を最も効果的に利用できるように、コンカレント・プログラムを設計する必要があります。コンカレント・プログラムのパラメータとして値を渡して障害を適切に処理するプログラムを作成し、コンカレント・マネージャがデータ整合性の問題を起こすことなくプログラムを再起動できるようにします。エラー・メッセージおよび出力を生成する場合、プログラムが独立したログおよび出力ファイルを書き込むように設定します。これにより、問題の診断がより容易になります。カスタム・アプリケーションにプログラムを記述する場合、カスタム・アプリケーションをデータ・グループに含めてプログラムに確実にアクセスできるようにします。最後に、構築したカスタム表にプログラムがアクセスする場合、WHO列値を受け入れるように表を実装します。
ユーザーは、標準要求発行を使用するか、フォームのトリガー・ステップを初期化するアクションをフォームで実行することによりコンカレント要求を発行します。ユーザーが標準要求発行によってプログラムを発行するよう設定する場合は、コンカレント・プログラムの定義時に「SRSで使用」チェック・ボックスをオンにし、プログラム・パラメータを登録します。ユーザーがフォームからプログラムのコンカレント要求を発行できるようにする場合、トリガー・ステップからOracle Application Object Libraryのユーザー・イグジットをコールし、プログラム名とその引数を指定します。通常、プログラムはフォームのフィールドから引数を取得します。さらに、プログラム内からコンカレント要求を発行することもできます。Oracle Application Object Libraryには、フォームまたはプログラムのコールと、使用しているオペレーティング・システムから独立したコンカレント・プログラムの間の標準インタフェースが備わっています。
ユーザーがコンカレント要求を発行する際、要求はユーザーのコンカレント要求を実行できるように定義された各コンカレント・マネージャのキューで待機します。Oracle System Administrationを使用して、ユーザーが発行する要求の優先度を設定し、各要求の優先順位を変更します。要求の優先順位は、キューにおける要求の位置に影響します。
ユーザーの要求を処理する最初のコンカレント・マネージャは、Oracle Application Object Libraryの表にある、事前定義済のデータ・グループまたはシステム管理者が定義したデータ・グループを参照します。ユーザーの職責を割り当てられたデータ・グループには、アプリケーション名およびそれに対応するORACLE IDのリストが含まれています。コンカレント・マネージャは、コンカレント・プログラムのアプリケーションに関連付けられたORACLE IDを自動的に使用し、プログラムを実行します。各職責にデータ・グループを設定するには、Oracle System Administrationを使用します。
コンカレント・プログラムを記述および定義する際、作成するプログラムと同じ論理データベースで実行できない非互換プログラムはどれであるかを定義します。
ユーザーのコンカレント要求と同じ論理データベースで非互換プログラムを現在実行しているコンカレント・マネージャがない場合、コンカレント・マネージャはユーザーのコンカレント要求を他のすべてのキューから削除し、作成したコンカレント・プログラムを実行します。コンカレント・プログラムは、レポート出力ファイルおよびログ・ファイルを書き出します。出力を印刷するようプログラムを定義した場合、コンカレント・マネージャはレポート出力を自動的に印刷します。システム管理者およびユーザーは、接続先プリンタおよび印刷枚数などの印刷情報をユーザー・プロファイル(この場合、「プリンタ」および「コンカレント: レポートの印刷部数」)を使用して指定できます。標準要求発行を使用してプログラムを発行した場合、ユーザーは実行時に印刷および発行情報を指定できます。
SQL*Plus、PL/SQL、SQL*LoaderまたはOracle Reportsで記述されたOracle Toolプログラム、CやPro*C、あるいはホスト言語プログラムで記述されたプログラムなど、様々なタイプのコンカレント・プログラムを記述できます。
コンカレント・プログラムを作成する基本的なプロセスは、実行方法に関係なく同一です。次の手順があります。
プログラム実行ファイルを記述し、オペレーティング・システムの適切な位置に置きます。
Oracle Application Object Libraryでコンカレント・プログラム実行ファイルを定義して、プログラムの実行ファイルと実行方法を指定します。
Oracle Application Object Libraryでコンカレント・プログラムを定義し、必要に応じプログラム・パラメータを定義します。さらに、他のコンカレント・プログラムとの非互換性もすべて定義します。
「レポートの実行」フォーム、アプリケーション・フォームのトリガー・ステップまたはPro*Cコンカレント・プログラムから、作成したプログラムを要求します。
コンカレント・マネージャは、コンカレント・プログラムの引数を最大100個まで処理します。引数はそれぞれ240文字以下にします。起動Pro*Cコンカレント・プログラムでは、拡張構文を使用してプログラムを発行する場合は240文字を超える引数を処理できます。拡張構文を使用する場合、コンカレント・マネージャが処理可能な引数文字列の合計(すべての引数をあわせた長さ)は、最長で24,000文字です。
要求の処理中にコンカレント・マネージャが異常終了した場合(たとえば、システムがクラッシュした場合)でも、障害時に実行していた要求は把握されています。コンカレント・マネージャを再起動すると、それらの要求も自動的に再開されます。コンカレント・プログラムによりシステム障害が適切に処理されるようにするには、プログラムがデータの一貫性を損なったり、「索引内でキーが重複しています」エラーなどを受け取ることなく、コンカレント・マネージャが最初から処理を再開できるようにプログラムを設計する必要があります。
最もシンプルな方法は、プログラムの最後のステップまでトランザクションのコミットを回避することです。プログラムが処理する可能性のあるデータ量から見てこれが現実的ではない場合、他の選択肢もあります。
中間トランザクションを一時表にコミットしてから、プログラムの終わりに1件の最終トランザクションを実行して、データを一時表からメイン表に転送できます。プログラムが起動すると、システム・クラッシュ時に生じた可能性のあるすべてのデータがその一時表から削除されます。
もう1つの方法は、プログラムで更新する表に特別のステータス列を含めて、処理中の行を示すことです。そうすると、プログラムの最後のトランザクションで、その列を完了と設定できます。その他のアプリケーション・プログラムが、ステータス列の値が処理中となっている行を無視するように設定する必要があります。
様々な実行方法を使用して、コンカレント・プログラムを記述できます。たとえば、Oracle Tools、Pro*Cなどのプログラミング言語またはPL/SQLプロシージャを使用して、コンカレント・プログラムによって起動される実行ファイルを作成できます。
この項では、実行ファイルとしてPL/SQLプロシージャを使用し、PL/SQLプロシージャからコンカレント・プログラムをコールする方法に焦点を当てます。
他の実行方法を使用するコンカレント・プログラム記述の詳細は、後続の章を参照してください。
起動コンカレント・プログラムおよび即時コンカレント・プログラムは、CまたはPro*Cで記述されたプログラムです。オペレーティング・システムによっては、起動コンカレント・プログラムをオペレーティング・システムのコマンド言語でも記述できます。
起動コンカレント・プログラムが独立した起動プロセスで実行されている間、即時プログラムはコンカレント・マネージャのプロセスのサブルーチンとして実行されます。C言語の汎用APIのafprcp()を使用する場合、起動実行方法および即時実行方法の両方に同じ実行ファイルを使用できます。
即時実行方法を使用する場合は、コンカレント要求を発行する前に追加の手順を完了させておく必要があります。
即時コンカレント・プログラムがインクルードされているプログラム・ライブラリを作成または変更します。
Oracle Application Object Libraryでプログラム・ライブラリを再作成してから、それをリンクします。
Oracle Applications System Administrationを使用して、新規のプログラム・ライブラリをコンカレント・マネージャに割り当てます。
コンカレント・プログラムをストアド・プロシージャとして実装できます。リリース11から、ストアド・プロシージャのファイル入出力操作がサポートされています。
コンカレント・プログラムをストアド・プロシージャとして開発することの利点は、コンカレント・プログラムがコンカレント・マネージャのデータベース接続の一部として動作し、他のコンカレント処理の実行方法のように別のプロセスを起動する必要がない点にあります。したがって、ストアド・プロシージャによる実行方法は、実行頻度の高いコンカレント・プログラム(Oracle Applicationsの以前のリリースで作成した即時コンカレント・プログラムを置き換えるために開発したものを含む)にとって適切であると言えます。
ストアド・プロシージャ・コンカレント・プログラムは入力パラメータのみを受け入れ、FND_REQUESTパッケージにより発行されます。次に示すのは、コンカレント・プログラムとして実行されるように作成が可能なPL/SQLプロシージャの設定例です。
REM /* Beginning of SQL Script */
REM
CREATE PROCEDURE FND60.SAMPLE_PROC (ERRBUF OUT VARCHAR2,
RETCODE OUT VARCHAR2,
ARGUMENT1 IN VARCHAR2,
ARGUMENT2 IN VARCHAR2,
ARGUMENT3 IN VARCHAR2,
.
.
.
.
ARGUMENT100 IN VARCHAR2,
)
作成するストアド・プロシージャ・コンカレント・プログラムは、前述の例に示されているように正確に指定する必要のある最初の2つの必須パラメータに加えて、100のパラメータに制限されます(ストアド・プロシージャ作成時に、これらの2つのパラメータを考慮に入れる必要があります)。エラー・メッセージを戻すにはerrbufを、完了ステータスを戻すにはretcodeを使用します。パラメータretcodeは、成功した場合は0を、警告を伴う成功の場合は1を、エラーの場合は2を戻します。コンカレント・プログラムの実行後、コンカレント・マネージャはerrbufとretcodeの両方の内容を、コンカレント要求に関連付けられたログ・ファイルに書き込みます。
重要: ストアド・プロシージャ・コンカレント・プログラムを作成または再インストールする際は、必ずコンカレント・マネージャを再起動する必要があります。
作成したコンカレント・プログラムをテストする最も簡単な方法は、CONCSUBユーティリティを使用してコンカレント処理のプログラムを発行することです。標準要求発行のコンカレント・プログラムを開発している場合は、「要求の発行」フォームから要求を発行するオプションもあります。プログラムをテストする他の方法は、プログラムを発行するフォームの使用です。要求の進行状況を要求が完了するまでモニターし、その完了メッセージと出力をチェックします。プロセスが異常終了した場合、対処措置を取るのに必要な情報がログ・ファイルに記録されます。
オペレーティング・システムから、CONCSUBを使用してコンカレント・プログラムを発行します。WAITトークンを使用することにより、ユーティリティは要求ステータスを60秒ごとにチェックし、オペレーティング・システムのプロンプトに要求の完了が表示されます。コンカレント・マネージャは、コンカレント要求が完了するまで強制終了、シャットダウン、または起動を行いません。
作成したコンカレント・プログラムの同時起動が可能な場合、複数回発行して同時に動作させることにより、データ整合性およびデッドロックを確認できます。
PL/SQLプロシージャは、FND_REQUEST.SUBMIT_REQUESTをコールすることにより、要求を発行してプログラムをコンカレント処理として実行できます。要求を発行する前に、プロシージャは3つのファンクションをオプションでコールして、印刷および再発行の動作を決定するコンカレント要求属性を設定できます。
FND_REQUEST.SET_OPTIONS
FND_REQUEST.SET_REPEAT_OPTIONS
FND_REQUEST.SET_PRINT_OPTIONS
これらのファンクションのいずれかが失敗すると、設定機能パラメータはすべてデフォルト値にリセットされます。
さらに、データベース・トリガーからFND_REQUEST.SUBMIT_REQUESTをコールする前に、FND_REQUEST.SET_MODEをコールする必要があります。
FND_REQUEST.SUBMIT_REQUESTをコールする際は、要求するコンカレント・プログラムに必要ななんらかの引数を渡します。FND_REQUEST.SUBMIT_REQUESTは、成功した場合は発行した要求のIDを戻し、それ以外の場合は0を戻します。
FND_REQUEST.SUBMIT_REQUESTファンクションが完了すると、設定機能パラメータはすべてデフォルト値にリセットされます。コミットの実行による要求発行の完了は、コール元が行います。
FND_REQUESTファンクションは、「PL/SQLプロシージャのコンカレント処理API」の項で詳しく説明します。
コンカレント要求は、コミットされるまで発行されません。ただちに要求をコミットするのが望ましい場合もありますが、フォームの他の変更をすべてコミットせずに要求はコミットできない点に注意してください。ユーザーが持つすべてのロックがリリースされてしまうので、サーバー側のみでコミットしないでください。ユーザーが何の変更も行わない場合(SYSTEM.FORM_STATUSのチェックをオンにする)に、コミットする変更がないとのメッセージを受け取らないようにするには、APP_FORM.QUIET_ COMMITルーチンを使用します。
関連項目: コンカレント処理のPL/SQL API
PL/SQLプロシージャは、FND_CONCURRENT.GET_REQUEST_STATUSをコールすることによりコンカレント要求のステータスをチェックできます。
FND_CONCURRENT.GET_REQUEST_STATUSは、コンカレント要求の現在のステータスを戻します。要求がすでに完了している場合は、FND_CONCURRENT.GET_REQUEST_STATUSも要求に関連した完了メッセージを戻します。
FND_CONCURRENT.WAIT_FOR_REQUESTファンクションは要求の完了を待機し、要求のフェーズとステータス、および完了メッセージをコール元に戻します。このファンクションは、要求完了チェックの間の開発者が指定した期間はスリープします。
FND_CONCURRENTファンクションは、「コンカレント処理でのPL/SQL API」の項で詳しく説明します。
関連項目: コンカレント処理のPL/SQL API
Oracle Application Object Library for Windowsには、コンカレント・プログラムの起動および結果の表示に使用するユーザー・インタフェース・プログラムが備わっています。「コンカレント・プログラムの開始」というインタフェースは、プログラム・マネージャの「実行」ダイアログ上でモデル化します。
そのダイアログには、コンカレント・プログラム、データベース接続文字列およびオプション引数のフィールドが含まれています。さらに、インストールされたコンカレント・プログラムをリスト表示するコンボ・ボックスも含まれています。プログラムを使用するには、次の手順に従います。
「パス」フィールドへパスを入力するか、「ブラウズ」ボタンでプログラムを選択または「プログラム」コンボ・ボックスに表示されたコンカレント・プログラムから1つを選択して、実行するコンカレント・プログラムを選択します。
「接続文字列」フィールドにユーザー名とパスワードを含む、有効なデータベース接続文字列を入力します。
「実行」ボタンをクリックします。「動作中...」メッセージがダイアログの右端のボタンに表示されます。プログラムが終了すると、「完了」メッセージが表示されます。この時点で、「ログの表示」または「出力の表示」ボタンをクリックすることにより、コンカレント・プログラムのログおよび出力ファイル(存在する場合)を参照できます。
無効な接続文字列を入力した場合、「ABNORMAL PROGRAM TERMINATION」という警告が表示されます。「閉じる」をクリックし、接続文字列を修正して再試行します。
重要: 「コンカレント・プログラムの開始」(startcp.exe)に対するプログラムおよび関連するプログラム項目は、開発用のApplication Object Libraryをインストールしている場合のみインストールされます。
エンド・ユーザーがコンカレント処理の存在に気付かないようにアプリケーションを構築できます。ユーザーまたはフォームがコンカレント要求を発行した後であっても、エンド・ユーザーは中断することなく端末での作業を継続できます。ただし、ユーザーは要求のコンカレント処理が動作を開始するまで、そのオプションを変更できます。たとえば、ユーザーはレポートを印刷するプリンタを変更できます。
エンド・ユーザーは、「要求」ウィンドウを使用してコンカレント要求の進行状況をモニターできます。たとえば、エンド・ユーザーは要求が実行を開始したことを把握して、コンカレント要求の完了ステータスおよび完了メッセージを参照できます。
Oracle Application Object Libraryは、ユーザー・プロファイル・オプションの値をデフォルト値として使用し、ユーザーが発行するすべてのコンカレント要求に適用します。
レポートの印刷枚数
オペレーティング・システムのファイルへの、レポート出力の保存
レポートを印刷するプリンタ
コンカレント要求の開始日および開始時刻
要求の順次実行
要求の一時的な保持
コンカレント要求の優先順位
レポートを参照可能なユーザー
ユーザーは、ユーザー・プロファイルを使用してこれらのオプションをログイン・セッション全体に設定でき、値はいつでも変更できます。要求が標準要求発行で発行された場合は、要求発行時に印刷および発行情報を変更できます。ユーザーがコンカレント要求を発行した後、コンカレント要求が動作を開始するまで、ユーザーおよびシステム管理者はこれらのコンカレント要求の処理オプションを変更できます。要求のコンカレント・オプションを変更するには、「要求」フォームを使用します。実行時は、Pro*Cコンカレント・プログラムでOracle Application Object Libraryのユーティリティafpoputを使用して、ユーザー・プロファイル・オプションを変更できます。
この変更は、コンカレント・プログラムの実行中にのみ有効になります。コンカレント要求のステータスの表示
エンド・ユーザーは、要求をチェックすることにより、動作中、起動の待機中、正常に完了またはエラーを伴う終了など、どのようなステータスであるかを調査できます。コンカレント・プログラムが正常に完了しない場合は、問題を示すエラー・メッセージを表示するようコンカレント・プログラムを構築できます。要求が正常に保留になっている場合、その要求を実行できる様々なコンカレント・マネージャのキューにある要求の位置を確認することにより、いつ要求を開始するかを決定できます。
コンカレント処理は、Oracle Applicationsの日常のオペレーションにおける重要な構成要素です。様々な種類の不測の事態にコンカレント・マネージャがどのように反応するかを理解すると、Oracle Applicationsをスムーズに運用できるようになります。コンカレント・マネージャにより、異常終了したコンカレント・プログラムまたはコンカレント処理を検出できます。さらに、セグメント障害などのオペレーティング・システムまたは内部障害のような異常事態から、自動的にリカバリすることもできます。この項では、一般的なシステム問題からリカバリするために、コンカレント・マネージャが行うアクションについて説明します。
開発者またはユーザーはコンカレント要求を発行した後、実行中の要求を終了する場合があります。「要求」フォームでステータスを「完了」に変更することにより、実行中の要求を終了できます。実行中の要求を終了する場合は常に、可能であればこれらのフォームから行い、コンカレント・マネージャが要求のステータスをすぐに変更できるようにする必要があります。
「要求」フォームでは、発行済でレポート・セキュリティ・グループに属するプログラムのみを取り消すことができます。必要な場合は、「コンカレント要求の要約」から特権「システム管理」フォームを使用して他の要求を取り消します。
コンカレント要求の処理に対してシステム・シグナルまたはセグメント障害による割込みがあった場合、コンカレント・マネージャは実行中の要求の中断を検出し、要求のフェーズおよびステータスを「完了」または「エラー」に更新します。その後、コンカレント・マネージャは保留中の他のコンカレント要求の処理を継続します。中断された要求がサブ要求の場合、コンカレント・マネージャはそのステータスを「エラー」に更新して親要求を再起動します。その後、親要求は残りのサブ要求の処理を中断するかまたは継続するかについて、コンカレント・マネージャとの間でやりとりを行います。コンカレント処理を再開するには、その他のリカバリ・プロシージャは必要ありません。
コンカレント処理機能を起動すると、内部コンカレント・マネージャはすべての定義済コンカレント・マネージャ・プロセスを起動します。内部コンカレント・マネージャは、コンカレント・マネージャ・プロセスが定義されたとおりに機能しているか、その動作をモニターします。それらのプロセスのいずれかが異常終了した場合、内部コンカレント・マネージャは新しいプロセスを起動して、コンカレント・マネージャ・プロセスが正確な数だけ稼働するようにします。このモニタリング・プロセスは、開発者およびユーザーからは見えません。
通常、要求の実行中にコンカレント・マネージャ・プロセスが異常終了すると、フェーズおよびステータスが「完了」または「エラー」の状態で要求が終了します。実行中の要求がサブ要求(レポート・セットのメンバーなど)の場合、要求は「エラー」ステータスで終了します。親要求(レポート・セットなど)が再起動してレポートの障害を検出すると、他のサブ要求の処理を中断するかまたは継続するかをコンカレント・マネージャ・プロセスに通知します。実行中の要求が親要求(レポート・セットなど)の場合、要求は「エラー」ステータスで終了し、そのサブ要求のステータスはすべて「エラー」に更新されます。
失敗したコンカレント・マネージャ・プロセスが内部コンカレント・マネージャのプロセスである場合、必要なのはコンカレント処理機能の再起動のみです。内部コンカレント・マネージャが異常終了しても、他のコンカレント・マネージャ・プロセスは動作を継続し、新たに発行されたコンカレント要求は別の利用可能なコンカレント・マネージャのキューに入ります。
内部コンカレント・マネージャ・プロセスの障害の影響を受けたコンカレント要求のみが、単独のコンカレント・プログラムおよび非互換コンカレント・プログラムとして実行されます。これらのコンカレント要求は、内部コンカレント・マネージャが異常終了した後に発行される場合、内部コンカレント・マネージャ・プロセスを再起動するまで保留ステータスとなります。これらのコンカレント要求が内部コンカレント・マネージャの異常終了前に発行される場合、これらの要求は保留のままとなり、同じ論理データベースに属する他のすべてのコンカレント要求を停止させます。ただし、これは影響を受けた要求を保留に設定していない場合のみです。内部コンカレント・マネージャは一度再起動すると、他のコンカレント・マネージャ・プロセスのモニタリングと、単独で実行され非互換であるコンカレント・プログラム処理の調整という本来の任務を再開します。
オペレーティング・システムおよびデータベースの異常終了は、コンカレント・マネージャ・プロセスの失敗を引き起こす2つの主な原因です。それらの状況では、すべてのコンカレント・マネージャ・プロセスが通知を行うことなく終了し、コンカレント要求のフェーズおよびステータスは動作時のままになります。通常のコンカレント処理を再開するために必要なのは、コンカレント処理機能の再起動のみです。コンカレント処理機能を一度再起動すると、コンカレント・マネージャはコンカレント・マネージャ・プロセスに障害が発生したときに実行中であった要求をすべて再実行します。コンカレント・マネージャは、前の実行中要求を処理した後、他の保留中のコンカレント要求を処理します。
Oracle Application Object Libraryには、コンカレント・プログラム出力の印刷形式に対応するプリンタ・ドライバがあります。これらのドライバでは、各種プリンタ向けに次の4つの印刷形式が準備されています。
L(横長)
P(縦長)
A(A4)
W(超横長)
最初に、コンカレント・マネージャは印刷形式に関連したプリンタ・タイプ名を定義可能なプリンタ・ドライバを検索します。プリンタ・タイプはプリンタと関連しており、印刷形式はコンカレント・プログラムと関連しています。Oracle Reportsでは、すべてのプリンタ・ドライバがフォーム(L.prt)のOracle Reportsドライバと関連しています。これらのOracle Reportsドライバには、太字、イタリック、下線および新規ページ・マーカーなど、プリンタ特有の書式文字が含まれています。
レポートをオンラインで確認する場合、Oracle Application Object Libraryのプリンタ・ドライバを使用するレポートは正しく表示されます。カスタム・プリンタ・ドライバを使用するレポートは、特定の端末で正しく表示されない場合があります。
コンカレント処理を活用したアプリケーションを構築するには、コンカレント・プログラムのすべてのタイプに共通する特徴と各タイプの実装方法を理解する必要があります。
Oracle Application Object Libraryには、コンカレント・プログラムの実装方法がいくつか用意されています。
Oracle Toolコンカレント・プログラム
Pro*Cコンカレント・プログラム
ホスト言語コンカレント・プログラム
プログラムの記述を始める前に、それぞれの方法の利点を勘案して、ニーズに最も合致したものを選択します。
Oracle Reports、PL/SQL、SQL*LoaderおよびSQL*Plusプログラムを使用すると、記述と、Oracle Application Object Libraryとの統合を最も容易に実行できます。さらに、PL/SQLストアド・プロシージャをコンカレント・プログラムとして記述することもできます。
関連項目: Oracle Reportsでのコンカレント処理
起動コンカレント・プログラムまたは即時コンカレント・プログラムのいずれも、CおよびPro*Cで記述できます。起動コンカレント・プログラムは、独立したプロセスで動作するスタンドアロン・プログラムです(いくつかのオペレーティング・システムでは、起動コンカレント・プログラムをオペレーティング・システムのコマンド言語で記述できます。詳細は、『Oracle Applicationsシステム管理者ガイド』を参照してください)。即時コンカレント・プログラムは、コンカレント・マネージャのサブルーチンとして実行されます。
起動コンカレント・プログラムは、コンカレント・マネージャとリンクしません。ほとんどのオペレーティング・システムで、コンカレント・マネージャは起動コンカレント・プログラムをコンカレント・マネージャではなくオペレーティング・システムの独立したプロセスで起動します。したがって、起動コンカレント・プログラムは、多くのシステム・リソースを必要とします。起動コンカレント・プログラムでは、個々のプログラムが起動している間でSQL文が解析されたままということはありません。
即時コンカレント・プログラムは、CまたはPro*Cでサブルーチンとして実行されます。即時コンカレント・プログラムのプログラム・ライブラリを構築し、プログラム・ライブラリをコンカレント・マネージャに割り当てます。即時コンカレント・プログラムをコールするには、コンカレント・マネージャからサブルーチン・コールを起動します。
即時コンカレント・プログラムは、ほどんどのオペレーティング・システムにおいて、コンカレント・マネージャと同じオペレーティング・システム・プロセスで実行されます。コンカレント・マネージャはすでにデータベースに接続しているので、プログラムが明示的に接続する必要はありません。さらに、プログラムの終了時でもプロセスは終了しないので、プログラムのSQL文はプログラムの最初の起動後も解析されたままになります。同じプログラムが次に起動した際は、データベースがSQL文を解析する必要がないのでより迅速に実行されます。
ただし、即時プログラムはメンテナンスとサポートを行うことが難しいとも言えます。コンカレント・マネージャのサブルーチンとして動作するため、障害はマネージャそのものに影響を及ぼすことがあります。それで、新規Pro*Cコンカレント・プログラムが起動されるよう実装することをお薦めします。将来のリリースでは、PL/SQLストアド・プロシージャによりコンカレント・プログラムをコンカレント・マネージャと同じプロセスで実行するメカニズムが提供されるため、起動されるプログラムとしてはPro*Cプログラムのみがサポートされることになります。
重要: 即時コンカレント・プログラムの機能は、下位互換性のためにのみ提供されています。新規の即時コンカレント・プログラムは作成しないでください。
使用しているオペレーティング・システムによっては、別の方法でホスト言語コンカレント・プログラムを実装します。
ホスト言語プログラムを使用して、外部プログラムまたはパッケージとOracle Applicationsを統合できます。たとえば、プラットフォームによってはホスト言語プログラムとしてシェル・スクリプトを作成できます。作成したスクリプトからはサード・パーティ・プログラムをコールでき、プログラムが正常に完了したかどうかを決定します。その後、ホスト・プログラムはこの情報をコンカレント・マネージャに戻します。
コンカレント・プログラムは非対話形式で実行されるため、ファイルに出力を行う必要があります。Pro*Cプログラムでは、レポート出力を出力ファイルに書き込み、デバッグまたは他の技術的情報をFNDログ・ファイルに書き込む必要があります。詳細は、『Oracle Applications Supportability Guide』および『Oracle Applicationsシステム管理者ガイド』を参照してください。
次の3つのタイプのログ・ファイルがあります。
出力ログ(エンド・ユーザー用)
要求ログ(エンド・ユーザー用)
FNDログ(システム管理者、サポート担当者および開発用)
ヒント: エラー・メッセージを出力ファイルにではなくログ・ファイルに書き込むと、ユーザーとシステム管理者はレポートおよび診断情報を容易に検出できるようになり、技術的なエラー・メッセージに不慣れな初級ユーザーが、レポートをオンラインで参照する際に混乱することを防止できます。
標準的なログ・ファイルまたはレポート出力ファイルを書き込むには、いくつかの方法があります。
1つ目の方法は、最も簡単な方法です。プラットフォームをまたがって使用できる唯一の方法でもあります。CまたはPro*Cコンカレント・プログラムから、Oracle Application Object Libraryユーティリティ・ルーチンをコールします。
変数 | 説明 |
---|---|
fdpwrt() | メッセージを標準ログ・ファイルまたはレポート出力ファイルに書き込みます。Oracle Application Object Libraryは、標準命名規則に従ってこのファイルに名前を付けます。 |
この方法は、サポートするのに最も簡単であり、プラットフォームおよびリリースの変更にも最も耐えることのできる方法ですので、お薦めします。
2つ目の方法では、fopen()またはfclose()などの標準C関数を使用してファイルを書き込みます。この方法を使用する場合、ファイル名にOracle Application Object Library標準命名規則を使用してください。Oracle Application Object Libraryは、標準命名規則を使用してレポートおよびログ・ファイルを検索し、「要求の表示」フォームへのオンライン表示とレポート出力の自動印刷を行います。
logおよびoutディレクトリの場所と、使用中のオペレーティング・システムにおけるファイルの標準命名規則については、『Oracle Applicationsシステム管理者ガイド』の「要求、要求ログ・ファイルおよびレポート出力ファイルの確認」を参照してください。『Oracle Applicationsシステム管理者ガイド』では、レポート出力およびログ・ファイルのデフォルト・ファイル保護の変更方法も説明されています。
この2つ目の方法は、Oracle Application Object Libraryの以前のバージョンで記述されたコンカレント・プログラムとの互換性のために用意されています。新規のコンカレント・プログラムを記述する際は、最初の方法を選択してfdpwrt()ユーティリティ・ルーチンを使用してください。
コンカレント・プログラムを定義する際、レポート出力を自動的に印刷するかどうかと、行および列の必要な最大値と最小値を指定できます。さらに、お薦めまたは必須の印刷スタイルも指定できます。コンカレント・マネージャは、ユーザー・プロファイル・オプションを使用して、レポート出力のコピーを特定のプリンタへ送信します。標準要求発行で発行されたレポートには、発行時に指定された印刷および発行オプションがあります。
ユーザーは、レポート出力の再印刷を要求する際に「要求の発行」フォームの「詳細」ゾーンで、プリンタ、レポートの印刷枚数および印刷スタイルの変更を実行できます。
関連項目: ユーザー・プロファイルの実装
他のアプリケーションのユーザーが自分のプログラムを作成できるようにする場合、アプリケーションを適切なデータ・グループに含める必要があります。詳細は、「標準要求発行」の章の「アプリケーション間レポート作成」の項を参照してください。
表に特別なWHO列を追加すると、アプリケーションのユーザーはデータに対して行われた変更を追跡できます。Oracle Application Object Libraryにより、フォームを使用して行った変更とコンカレント・プログラムを使用して行った変更とを、ユーザーが区別できるようになります。行の作成および最終更新に関する情報を示す列は次のとおりです。
LAST_UPDATED_BY
LAST_UPDATE_DATE
LAST_UPDATE_LOGIN
CREATED_BY
CREATION_DATE
行を更新したコンカレント・プログラムに関する情報を示すには、次の列を追加します。
REQUEST_ID, type NUMBER(15)
PROGRAM_APPLICATION_ID, type NUMBER(15)
PROGRAM_ID, type NUMBER(15)
PROGRAM_UPDATE_DATE, type DATE
これらの列は、ユーザーがフォームを使用して新しい行を挿入した場合は値を持たないので、NULLを許可してください。
表にWHO列を含めた場合、コンカレント・プログラムではその一部を挿入および更新操作ごとに更新する必要があります。Oracle Application Object Libraryは、これらの列の更新に使用した値とともにユーザー・プロファイル・オプションをロードします。コンカレント・プログラムの始めの部分でafpogetファンクションをコールし、ユーザー・プロファイル・オプションの現在の値を取得します。次の表にリストされたユーザー・プロファイル・オプションの値を使用して、対応するWHO列を更新します。行を挿入する場合にかぎり、CREATED_BY列を更新します。
Who列名 | プロファイル・オプション名 |
---|---|
REQUEST_ID | CONC_REQUEST_ID |
PROGRAM_ APPLICATION_ID | CONC_PROGRAM_APPLICATION_ID |
PROGRAM_ID | CONC_PROGRAM_ID |
LAST_UPDATE_LOGIN | CONC_LOGIN_ID |
CREATED_BY | USER_ID |
オペレーティング・システムの現在の日付またはSQLのSYSDATEを使用して、次のWHO列を更新します。行を挿入する場合にかぎり、CREATION_DATE列を更新します。
PROGRAM_UPDATE_DATE
CREATION_DATE
関連項目: ユーザー・プロファイルの実装およびコンカレント処理のPL/SQL API