2022年6月6日月曜日

APEXセッションのデバッグ情報取得スクリプトのADB対応

 最近、問題があってOracle APEXのセッションに関する情報を取得する必要がありました。こちらからダウンロードできるOracle APEXのダウンロード・メディア(ZIPファイル)の、apex/utilities/debug以下に、デバッグ情報を取得するためのスクリプトが含まれています。

情報取得のためのスクリプトは、以下の5つです。

activity.sqld0.sqld1.sqld2.sqlds.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_IDds.sqlPAGE_VIEW_IDd2.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;


以上になります。