最近、問題があってOracle APEXのセッションに関する情報を取得する必要がありました。こちらからダウンロードできるOracle APEXのダウンロード・メディア(ZIPファイル)の、apex/utilities/debug以下に、デバッグ情報を取得するためのスクリプトが含まれています。
情報取得のためのスクリプトは、以下の5つです。
activity.sql、d0.sql、d1.sql、d2.sql、ds.sql
スクリプトの使用方法は、Oracle CorporationでOracle APEXを開発しているChristian Neumuellerさんが、彼のブログで説明しています。
Debugging APEX Authentication Issues
https://chrisonoracle.wordpress.com/2020/04/03/debugging-apex-authentication-issues/
元スクリプトはAPEXのスキーマに直接アクセスしているため、そのままではADBでは動きません。また、activity.sqlについては、内部表を公開している標準ビューに列DEBUG_PAGE_VIEW_IDが含まれていないため、ADBに対応させることができません。
それ以外のスクリプトは少々の変更で、ADBで動作させることができました。
d0.sqlはシステム・パラメータのSYSTE_DEBUG_LEVELを9に設定する(またはデバッグを解除する)スクリプトです。ADBの管理者ユーザーADMINで、変更無しで実行できます。すべてのAPEXセッションで完全トレースが取られるため、全体のパフォーマンスが大幅に低下します。そのため、完全トレースの設定はできる限りセッション単位で行なうべきです(以前に、セッションを選んでデバッグ・レベルを設定するAPEXアプリを作成しています)。ただし、ソーシャル・サインインで使用されるapex_authentication.callback(およびSAML認証で使用されるapex_authentication.saml_callback)のデバッグ・メッセージを取得する方法は、これ以外にはありません。
SQL> @d0
Changed debug level from "" to "9"
SQL>
d1.sqlをADBで動作させるための差分は以下です。patchコマンドを使って、差分を適用します。
SESSION_IDはds.sql、PAGE_VIEW_IDをd2.sqlに渡して、さらに詳細のデータを取得します。
d2.sqlをADBで動作させるための差分は以下です。
ds.sqlをADBで動作させるための差分は以下です。
activity.sqlについては、以下のように手順を変えて情報を取得します。
APEX_ACTIVITY_LOGはAPEXセッションが生成されていないとデータが検索できないため、最初にAPEX_SESSION.CREATE_SESSIONを呼び出します。ユーザーは管理者ロールを持っている必要があります。
exec apex_session.create_session(アプリケーションID,ページID,'ユーザー名');select * from apex_activity_log where session_id = セッションID order by time_stamp desc;
以上になります。
完