2021年2月14日日曜日

実行時のみの環境でのデバッグ方法について

 Oracle APEXはインストール時にapexins.sqlの代わりにapxrtins.sqlを実行することで、アプリケーションの実行のみを行う環境を作ることができます。管理や開発のアプリケーションを含まず、それらの作業はすべてコマンドラインから実行します。

アプリケーションのインストール方法は、以前にこちらの記事で紹介しています。

そのような環境でアプリケーションのデバッグはどのように行うのか?という質問がありました。ひとつの方法は、Peter Raganitschさんの記事にあるような、Oracle APEXのZIPファイルに含まれるutilities/debug/以下のd0.1sq., d1.sql, d2.sql, ds.sqlなどのスクリプトを使用する方法です。ただし、これはDBにDBA権限か少なくてもAPEXの製品スキーマへ直接アクセスできる権限がないと実行できません。

APEXのセッションのデバッグ・レベルを設定するAPIとして、APEX_SESSION.SET_DEBUG、トレース・モードを設定するAPIとしてAPEX_SESSION.SET_TRACEが提供されています。このAPIと、Oracle APEXが提供している各種のビューを検索することにより、アプリケーションのデバッグができる、とのことだったので、ちょっとアプリケーションを作ってみました。

APEX_WORKSPACE_SESSIONSビューについては、デバッグ・レベル、トレース・モードを変更できるようにしていますが、それ以外は単にビューを * でselectしているだけです。

APEXが提供しているビューではありませんが、V$DIAG_TRACE_FILE_CONTENTS、V$DIAG_ALERT_EXTを表示するページも追加しています。ワークスペース・スキーマは通常、これらのビューを検索する権限は持っていないので、ページを機能させるためには管理者によって、これらのビューへのSELECT権限をGRANTしてもらう必要があります。

実行環境のみのインストールはセキュリティ面で有利なことは間違いないですが、ドイツのAPEX Connect 2018というイベントであったBuilt with APEXというセッション(11分経過くらいのスライド)によると、"Hardly anyone uses Runtime installation or protects APEX Workspace Login Page from being opened"とのことで、あまり利用されていないようです。

最近はSQLclにLiquibaseが組み込まれたりするなど、コマンド・ラインによる管理や連携方法も充実してきたので、ちゃんと検討したいテーマではあります。

作成したアプリケーションのエクスポートを以下に置きました。何かの参考になれば幸いです。

https://github.com/ujnak/apexapps/blob/master/exports/sampleapexdebug.sql

デバッグ・レベルを9まであげると、環境によっては処理がほとんど止まってしまうので、注意しましょう。