デフォルトでは、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のコンソールより、ストレージのバケットを開きます。
クリデンシャルの作成方法やリソース・プリンシパルの設定方法は他の説明を参照していただき、今回は手っ取り早く事前認証済リクエストを使います。
右端のアイコンよりメニューを開き、事前承認済リクエストの作成を実行します。
事前承認済リクエスト・ターゲットとしてバケットを選択します。アクセス・タイプとしてオブジェクトの書込みを許可(事前承認済ターゲットからオブジェクトを読むことはありません)を選択します。有効期限も確認します。
事前承認済リクエストの作成をクリックします。
事前承認済リクエストが作成されます。現在のURLは非推奨とのことなので、推奨されるURLをコピーしておきます。
APEXのSQLコマンドよりパイプラインAPEX_ACTIVITY_LOG_EXPORTを作成します。DBMS_CLOUD_PIPELINE.CREATE_PIPELINEを呼び出します。
以下のコードを実行します。
バケットの一覧を見ると、ファイルが作成されていることが確認できます。
事前承認済リクエストの部分は、作成したURLで置き換えます。ログはそのバケットの下にプレフィックスactivityが付与されたファイルとして作成されます。
テストなのでintervalとして2分を指定しています。table_nameはAPEX_WORKSPACE_ACTIVITY_LOG、key_columnはVIEW_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の紹介は以上になります。
完