2023年9月29日金曜日

パッケージDBMS_CLOUD_PIPELINEを使用してビューAPEX_WORKSPACE_ACTIVITY_LOGの内容をオフロードする

Oracle APEXでは、詳細なアクティビティのログをビューAPEX_WORKSPACE_ACTIVITY_LOGから参照できるようになっています。このログの保存期間は、APEXの管理サービスのインスタンスの設定ログ間隔の管理から変更できます。


デフォルトでは、APEX_WORKSPACE_ACTIVITY_LOGは14日間ごとにログの切り替えが発生します。


これらのログを長期間保管したいという要件はあるかと思います。単純にログ切替えまでの経過日数を増やすとパフォーマンスに悪い影響がでます。また、APEXがインストールされているスキーマの表領域に(大抵はSYSAUXを使っていると思います)多くの容量が必要になります。

Autonomous Databaseでは、パッケージDBMS_CLOUD_PIPELINEが提供されています。このパッケージを使用し、ビューAPEX_WORKSPACE_ACTIVITY_LOGの内容をオブジェクト・ストレージにエクスポートできます。

APEXのワークスペース・スキーマにDBMS_CLOUD_PIPELINEの実行権限を与えます。

grant execute on dbms_cloud_pipeline to <APEXワークスペース・スキーマ>;


ビューAPEX_WORKSPACE_ACTIVITY_LOGをAPEXのワークスペース・スキーマから検索すると、検索される対象のログは、そのワークスペースに限定されます。内部ワークスペース(管理ツールや開発ツールのログを含む)を含んだすべてのワークスペースのアクティビティ・ログをエクスポートする場合は、スキーマADMINでDBMS_CLOUD_PIPELINEのパイプラインを作成し、実行します。

今回は作業をAPEXのSQLコマンドで実施したいので、ワークスペースに限定してログのオフロードを行います。

最初にログのエクスポート先となるバケットを、オブジェクト・ストレージに作成します。

Oracle Cloudのコンソールより、ストレージバケットを開きます。


バケットの作成を実行します。今回はAPEX_WORKSPACE_ACTITIVY_LOGというバケットを作成しました。


クリデンシャルの作成方法やリソース・プリンシパルの設定方法は他の説明を参照していただき、今回は手っ取り早く事前認証済リクエストを使います。

右端のアイコンよりメニューを開き、事前承認済リクエストの作成を実行します。


事前承認済リクエスト・ターゲットとしてバケットを選択します。アクセス・タイプとしてオブジェクトの書込みを許可(事前承認済ターゲットからオブジェクトを読むことはありません)を選択します。有効期限も確認します。

事前承認済リクエストの作成をクリックします。


事前承認済リクエストが作成されます。現在のURLは非推奨とのことなので、推奨されるURLをコピーしておきます。


APEXのSQLコマンドよりパイプラインAPEX_ACTIVITY_LOG_EXPORTを作成します。DBMS_CLOUD_PIPELINE.CREATE_PIPELINEを呼び出します。

以下のコードを実行します。

事前承認済リクエストの部分は、作成したURLで置き換えます。ログはそのバケットの下にプレフィックスactivityが付与されたファイルとして作成されます。

テストなのでintervalとして2分を指定しています。table_nameAPEX_WORKSPACE_ACTIVITY_LOGkey_columnVIEW_TIMESTAMPです。その他のattributeの詳細は、パッケージDBMS_CLOUD_PIPELINEの説明を参照してください。




作成したパイプラインを確認します。ビューUSER_CLOUD_PIPELINESを検索します。

select * from user_cloud_pipelines;


パイプラインをスタートします。DBMS_CLOUD_PIPELINE.START_PIPELINEを呼び出します。

start_dateとして指定した日時よりintervalで指定した時間が経過した時刻が、初回実行の時刻となります。


パイプラインの実行履歴は、ビューUSER_CLOUD_PIPELINE_HISOTRYより確認できます。

select * from user_cloud_pipeline_history;


バケットの一覧を見ると、ファイルが作成されていることが確認できます。

初回実行時は列VIEW_TIMESTAMPによる制限がかかっていないため、formatのmaxfilesizeのデフォルトである10MiBのファイルが作成されています。


以上でビューAPEX_WORKSPACE_ACTIVITY_LOGのエクスポートが確認できました。

パイプラインの停止はDBMS_CLOUD_PIPELINE.STOP_PIPELINE、削除はDBMS_CLOUD_PIPELINE.DROP_PIPELINEを呼び出します。

パッケージDBMS_CLOUD_PIPELINEの紹介は以上になります。