D APEXセッションとデータベース・セッションの関連付け

アプリケーション・パフォーマンスの問題をトラブルシューティングするために、管理者および開発者がデータベース・セッションを特定のAPEXアプリケーションに関連付けることができるようにするベスト・プラクティスについて学習します。

関連項目:

『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』SET_IDENTIFIERプロシージャに関する項および「DBMS_APPLICATION_INFO」

D.1 APEXセッションとデータベース・セッションについて

APEXセッションとデータベース・セッションについて学習します。

Oracle APEXには、APEX_PUBLIC_USERというデータベース・アカウントが含まれています。Oracle REST Data Services (ORDS)のデータベース・セッション・プール内のすべてのデータベース・セッションで、インスタンスがどのように構成されているかに応じて、ORDS_PUBLIC_USERAPEX_PUBLIC_USERなどの単一のデータベース・ユーザーが使用されます。APEXセッションとデータベース・セッションの間に、固定された永続的な相関関係はありません。APEXリクエストを処理するためのセッション・プール内のセッションの割当ては基本的に予測不可能であり、一定ではないため、この関連付けは、APEXリクエストをアクティブに処理しているアクティブなデータベース・セッションについてのみ行うことができます。

D.2 セッション属性

システム管理者および開発者が参照できるセッション属性について学習します。

1つ以上のAPEXデータベース・プロセスがアクティブである間に、v$sessionv$sqlareav$session_longops、および様々な監査ツールやSQLトレース・ツールからシステム管理者が参照できる次のセッション属性を設定できます。開発者は、PL/SQLを使用してこれらのセッション属性を設定できます。

client_id

client_idは、一般的にユーザー/クライアント・セッションを識別するために使用される64バイトの文字列です。単一のAPEXセッションの処理を異なるデータベース・セッションで実行することが可能であるため、すべてのデータベース・セッションにわたるワークロードをそれぞれのAPEXセッションに関連付けることができます。また、client_idは多くの場合、アプリケーション・コンテキストを使用して仮想プライベート・データベース(VPD)と組み合せて使用されます。PL/SQLでは、dbms_session.set_identifierをコールすることにより、セッションに対してclient_idを設定し、sys_context('USERENV','CLIENT_IDENTIFIER')を使用して、それを取得できます。v$sessionビューのclient_identifier列で、アクティブなセッションのclient_idを参照できます。

APEXセッション内では、この属性を設定する必要がないため、通常は変更しないでください。APEXセッション内で実行されるカスタムPL/SQLコードによってclient_idが変更された場合、この変更によってOracle APEXで問題が発生することはありません。ただし、一部のモニタリング・ツールでAPEXセッションを効果的に識別できるかどうかに影響する場合があります。

client_info

client_infoは、一般的にワークスペースおよびユーザーを識別するためにAPEXで使用される64バイトの文字列です。PL/SQLでは、dbms_application_info.set_client_infoをコールすることにより、セッションに対してclient_infoを設定し、dbms_application_info.read_client_infoまたはsys_context('USERENV','CLIENT_INFO')を使用して、それを取得できます。v$sessionビューのclient_info列で、アクティブなセッションのclient_infoを参照できます。

APEXセッション内では、この属性を設定する必要がないため、通常は変更しないでください。APEXセッション内で実行されるカスタムPL/SQLコードによってclient_infoが変更された場合、この変更によってOracle APEXで問題が発生することはありません。ただし、一部のモニタリング・ツールでAPEXセッションを効果的に識別できるかどうかに影響する場合があります。

module

moduleは、一般的に現在実行中のモジュールまたはプロセスを識別するために使用される48バイトの文字列です。PL/SQLでは、dbms_application_info.set_moduleをコールすることにより、moduleを設定し、dbms_application_info.read_moduleまたはsys_context('USERENV','MODULE')を使用して、それを取得できます。v$sessionビューのmodule列で、アクティブなセッションのmoduleを参照できます。

APEXセッション内では、現在処理されている内容をモニタリング・ツールで識別できるようにするための手段として、この属性を(actionとともに)設定することをお薦めします。

action

actionは、一般的にモジュールまたはプロセス内で実行されている現在のステップを識別するために使用される32バイトの文字列です。PL/SQLでは、dbms_application_info.set_moduleまたはset_actionをコールすることにより、セッションに対してactionを設定し、dbms_application_info.read_moduleまたはsys_context('USERENV','ACTION')を使用して、それを取得できます。v$sessionビューのaction列で、アクティブなセッションのactionを参照できます。

APEXセッション内では、現在処理されている内容をモニタリング・ツールで識別できるようにするための手段として、この属性を(moduleとともに)設定することをお薦めします。

Session long ops

Session longops (長時間操作)は、処理される予定の合計単位数と対比して、これまでに処理された単位数を示すレコード構造です。session longopsを使用して、長時間実行プロセスの完了時間を推定できます。PL/SQLでは、dbms_application_info.set_session_longopsをコールすることにより、セッションに対してsession longopsを設定できます。v$session_longopsビューを問い合せることにより、長時間操作をモニターできます。

APEXセッション内では、ワークロードを個別の作業単位(たとえば、処理されるレコード数)に適切に分割できる場合、時間がかかることが予想されるプロセスに対してこの属性を設定することをお薦めします。

ノート:

Oracle APEXは、SYSバージョンのdbms_application_infoをコールします。パッケージのラッパーが存在する場合でも、それが使用されることはありません。

D.3 APEXプロセス

APEXによってアプリケーションまたはバックグラウンド・メール・セッションのセッション属性がどのように設定されるのかについて学習します。

アプリケーション・セッション

ヒント:

ほとんどのAPEXプロセスでは、終了時にセッション値がNULLにリセットされます。前の値は復元されません。

次の表では、APEXによってアプリケーション・セッションのセッション属性がどのように設定されるのかを詳しく説明します。

セッション属性 Expression 例。 その他のノート...

client_id

app_user || ':' || session-id

jane.doe@example.com:12161645673208

app_userが長すぎる場合は、収まるように切り捨てられます(たとえば、最初の50バイトまたは49バイト)。認証が完了する前は、次のようになります。

'nobody:' || session-id

client_info

workspace-id || ':' || app_user 

3574091691765823934:jane.doe@example.com

なし

module

schema || '/APEX:APP ' || app-id || ':' || page-id 

MY_DB/APEX:APP 17251:4

なし

action

次のように、様々な異なる値が表示されることがあります。

'start_page_request'
'PAGE ' || page-id 
'computation and processes' 
'fetch meta data'
'Processes - point: ' || process-point 
'Validations' 
'branching' 
'import app ' || app-id 

なし

なし

メール・バックグラウンド・セッション

次の表では、APEXによってメール・バックグラウンド・セッションのセッション属性がどのように設定されるのかを詳しく説明します。

セッション属性 Expression ノート

client_id

mail-from || ':' || message-guid

長い電子メール・アドレスは、収まるように切り捨てられます。

client_info

workspace-id || ':' || mail-from 

なし

module

(変更なし)

なし

action

(変更なし)

なし

D.4 SQLワークショップ

APEXによってSQLコマンドおよびSQLスクリプトでセッション属性がどのように設定されるのかについて学習します。

ノート:

「管理サービス」、「機能構成」で「トランザクションSQLコマンドの有効化」が有効になっている場合、SQLコマンド「自動コミット」チェック・ボックスが表示されます。詳細は、『Oracle APEX管理ガイド』SQLワークショップの構成に関する項を参照してください

SQLコマンド(自動コミット = ON)

次の表では、「自動コミット」が有効になっている場合に、APEXによってSQLコマンドでセッション属性がどのように設定されるのかを詳しく説明します。

セッション属性 Expression

client_id

app_user || ':' || session-id

client_info

workspace-id || ':' || app_user

module

'APEX:SQL Workshop'

action

sql-statement

SQLコマンド(自動コミット = OFF)

次の表では、「自動コミット」が無効になっている場合に、APEXによってSQLコマンドでセッション属性がどのように設定されるのかを詳しく説明します。「自動コミット」が無効になっている場合、SQLコマンドは別のデータベース・ジョブによって実行されます。「SQLコマンド」ウィンドウからのコマンドの待機中、ジョブはアイドル状態です。

セッション属性 Expression

client_id

app_user || ':' || session-id

client_info

workspace-id || ':' || app_user

module

'APEX:SQL Workshop-No Autocommit'

action

Working

sql-statement 

Idle, awaiting work

Stopping

関連項目:

『Oracle APEX SQLワークショップ・ガイド』「SQLコマンドの使用方法」

SQLスクリプト

次の表では、SQLスクリプトの実行中に、APEXによってセッション属性がどのように設定されるのかを詳しく説明します。

セッション属性 Expression

client_id

app_user || ':' || session-id

client_info

workspace-id || ':' || app_user

module

'APEX:SQL Workshop:Script'

action

script-name

longops

SQL statement N of M

関連項目:

『Oracle APEX SQLワークショップ・ガイド』「SQLスクリプトの使用方法」

D.5 データ・ワークショップ

データ・ワークショップを使用したデータのインポート中に、APEXによってセッション属性がどのように設定されるのかについて学習します。

次の表では、データ・ワークショップを使用したデータのインポート中に、APEXによってセッション属性がどのように設定されるのかを詳しく説明します。

セッション属性 Expression ノート

client_id

(変更なし)

なし

client_info

workspace-id || ':' || app-user 

なし

module

schema || '/APEX:APP' || app-id || ':DATA_LOADING' 
or
schema || '/APEX:APP' || app-id || ':DATA_LOADING_SODA' 

スキーマ名が長い場合は、module文字列が48バイト以内に収まるように切り捨てられることがあります。

action

Data Loading Job

なし

D.6 自動化

自動化の実行中に、APEXによってセッション属性がどのように設定されるのかについて学習します。

次の表では、自動化の実行中に、APEXによってセッション属性がどのように設定されるのかを詳しく説明します。

セッション属性 Expression ノート

client_id

(変更なし)

なし

client_info

workspace-id || ':' 

なし

module

automation-module

なし

action

automation-static-id || ':I' 

初期化プロシージャの実行中。

いずれの場合も、automation-static-IDは16文字に切り捨てられます。

action

automation-static-id

開始/データのフェッチ中。

action

automation-static-id || ':R' || row-num || ':B' 

アクション前。

action

automation-static-id || ':R' || row-num || ':A' || action-sequence 

アクションの実行中。

action

automation-static-id || ':R' || row-num

アクションの終了。

action

automation-static-id || ':T'

クリーンアップ。

関連項目:

自動化の管理

D.7 インストーラ

APEXのインストールまたはアップグレード中に、APEXのインストール・スクリプトによってセッション属性がどのように設定されるのかについて学習します。

次の表では、APEXのインストールまたはアップグレード中に、APEXのインストール・スクリプトによってセッション属性がどのように設定されるのかを詳しく説明します。

セッション属性 Expression ノート

client_id

(変更なし)

なし

client_info

(変更なし)

なし

module

'APEX ' || install-type || ' PHASE ' || phase 

install-typeは、'FULLINS''RUNTIME''PATCH'などです。

action

次のように、様々な異なる値が表示されることがあります。

'upgrade' 
'recompiling' 

なし