デフォルトでは、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の説明を参照してください。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
declare | |
l_format clob; | |
l_attributes clob; | |
l_location varchar2(4000); | |
begin | |
l_location := '事前承認済リクエスト' || 'activity'; | |
select json_object( | |
'type' value 'json' | |
) into l_format | |
from dual; | |
select json_object( | |
-- 'credential_name' value 'MY_OCI_CRED' | |
'format' value l_format -- format jsonを付けると認識されない。 | |
,'interval' value 2 | |
,'key_column' value 'VIEW_TIMESTAMP' | |
,'location' value l_location | |
,'priority' value 'LOW' | |
,'table_name' value 'APEX_WORKSPACE_ACTIVITY_LOG' | |
) into l_attributes | |
from dual; | |
dbms_output.put_line(l_attributes); | |
dbms_cloud_pipeline.create_pipeline( | |
pipeline_name => 'APEX_ACTIVITY_LOG_EXPORT' | |
,pipeline_type => 'EXPORT' | |
,attributes => l_attributes | |
); | |
end; |
作成したパイプラインを確認します。ビューUSER_CLOUD_PIPELINESを検索します。
select * from user_cloud_pipelines;
パイプラインをスタートします。DBMS_CLOUD_PIPELINE.START_PIPELINEを呼び出します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
begin | |
dbms_cloud_pipeline.start_pipeline( | |
pipeline_name => 'APEX_ACTIVITY_LOG_EXPORT' | |
,start_date => systimestamp | |
); | |
end; |
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の紹介は以上になります。
完