APEXアプリケーションの変更(コンポーネントの作成、変更、削除)は、管理メニューのアクティビティのモニターを開いた画面にある、開発者アクティビティのアプリケーション変更(詳細)から確認することができます。
デフォルトではいくつかの列が非表示になっています。すべて表示させると以下のレポートになります。一覧される履歴を制限するために、期間やアプリケーションによる絞り込みを行うと良いでしょう。日付の降順で一覧すると見やすくなると思います。
このレポートに列として、APEX表名、SCNおよびコンポーネント・キーが含まれています。
Autonomous Databaseの場合、APEXがインストールされているスキーマが保護されているため、APEX表に直接アクセスすることはできません。すべて標準ビューを介してのアクセスになるため、これから説明する作業はできません。
誰が何をいつ変更したか、といったことはAutonomous Databaseでも、上記のレポートより確認できます。いつ、についてはSCNより正確な時刻を割り出すことも可能です。
select scn_to_timestamp(<SCN>) at time zone 'Asia/Tokyo' from dual;
オンプレミス環境の場合、APEX表に直接問い合わせを発行できるため、実施された変更を確認できます。
アクションが作成および削除であれば、コンポーネント(の種類)とコンポーネント名から概ね実行された作業は分かります。そのため、詳細まで調べる必要性はあまりないかと思います。
以下は、アクションが変更のときの確認手順です。
例としてアプリケーションIDが110、ページ番号が3のページにあるファセットP3_MGRのラベルを、マネージャーから上司に変更し保存します。
アプリケーションの変更のレポートを確認すると、変更履歴が見つかります。変更されたAPEX表名として、WWV_FLOWS_STEPSとWWV_FLOW_STEP_ITEMSがあります。
コマンドライン・ツールでデータベースに接続します。
APEXがインストールされているスキーマをカレント・スキーマに変更します。APEX 22.1の場合はAPEX_220100がAPEXがインストールされているスキーマになります。
SQL> alter session set current_schema = apex_220100;
Session altered.
SQL>
現在のデータと変更前のデータを、別の表に保存します。APEX表名、SCN、コンポーネント・キーの値を使い、以下のCREATE TABLE文を実行します。
CREATE TABLE <変更後の表> AS SELECT * FROM <APEX表名> where ID = <コンポーネント・キー>;
CREATE TABLE <変更前の表> AS SELECT * FROM <APEX表名> as of scn <列SCNの値> where ID = <コンポーネント・キー>;
APEXのワークスペース・スキーマとして、APEXDEVが作成済みであるとします。
上記のDDLを実行して、表を作成します。変更後のアイテムのデータを表STEP_ITEMS_AC、変更前をSTEP_ITEMS_BC、変更後のページのデータを表STEPS_AC、変更前をSTEPS_BCに保存しています。
SQL> create table apexdev.step_items_ac as select * from wwv_flow_step_items where id = 4025742564048869;
Table created.
SQL> create table apexdev.step_items_bc as select * from wwv_flow_step_items as of scn 3874676 where id = 4025742564048869;
Table created.
SQL> create table apexdev.steps_ac as select * from wwv_flow_steps where flow_id = 110 and id = 3;
Table created.
SQL> create table apexdev.steps_bc as select * from wwv_flow_steps as of scn 3874678 where flow_id = 110 and id = 3;
Table created.
SQL>
APEX表は大抵列ID が主キーで、コンポーネント・キーで検索すると1行だけが返されます。ただし、表WWV_FLOW_STEPS(これはページのメタデータ)は例外で、アプリケーションIDであるFLOW_IDとページIDであるIDの複合主キーなので、FLOW_IDとIDを検索条件にします。
変更前の情報の検索には、フラッシュバック問い合わせ(AS OF SCN)を使っています。そのため、初期化パラメータのundo_retentionの期間内に検索を実行する必要があります。
APEXのアプリケーションを作って、変更後と変更前の表の違いを確認します。
アプリケーションのページにクラシック・レポートのリージョンを2つ作成します。ひとつはソースの表名に変更後の表STEP_ITEMS_ACを指定します。もうひとつはソースの表名に変更前の表STEP_ITEMS_BCを指定します。リージョンの配置を横並びにするため、変更前のリージョンのレイアウトの新規行の開始をOFFにします。
クラシック・レポートの
属性を開き、
外観の
テンプレートとして
Value Attribute Pairs - Columnを選択します。列と値を縦方向に一覧表示します。
以上の設定を行い、アプリケーションを実行します。
Promptがマネージャーから上司に変更されていることが確認できます。
変更後の列Last Updated ByとLast Updated Onより、変更した人と時刻を確認できます。
変更履歴には表WWV_FLOW_STEPSへの変更がレポートされています。しかし、表WWV_FLOW_STEP_ITEMSと同様の手順で変更内容を確認すると、メタデータには変更は見つかりませんでした。変更したのはファセットのラベルだけなので、これは想定通りです。列Last Updated ByとLast Updated Onのみが変更されています。
APEXアプリケーションの変更点を調べる方法の紹介は以上になります。
ちなみにアプリケーションの変更履歴はAPEX表WWV_FLOW_BUILDER_AUDIT_TRAILに保存されています。この表にはビューやシノニムは登録されていないため、ユーザーSYSやSYSTEMのみがアクセスできます。Autonomous Databaseの場合は管理者ユーザーのADMINであってもアクセスできません。必ずアクティビティのモニターを開いて確認する必要があります。
WWVで始まるAPEX表を直接問い合わせることは、サポート対象外です。そのため取得した情報の扱いは、参考程度にとどめておくべきです。APEXアプリケーションのメタデータを参照する場合は、APEX_で始まる標準ビューを使用します。
完