Autonomous Database：一定間隔で監査レコードをオブジェクト・ストレージにCSV形式でエクスポートしてみた


# 1. 事前準備

エクスポートしたCSVファイルを保存するオブジェクト・ストレージ・バケットを作成します。

![スクリーンショット 2023-12-14 18.10.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/2729bc42-126b-f6ef-4551-b71c838f88ff.png)

また、今回の検証ではバケットへのアクセスにリソース・プリンシパルを使用しますので、Autonomous Databaseインスタンスを含む動的グループ、オブジェクト・ストレージ・バケットへのアクセスを許可するポリシーを正しく設定し、 Autonomous Databaseのリソース・プリンシパルを有効にしておきます。

# 2.パイプラインの作成と設定

SQLcliで、adminユーザとしてAutonomous Databaseに接続します。
```
[opc@tools ~]$ sql admin/Demo#1Demo#1@adb
 

SQLcl: Release 23.3 Production on Thu Dec 14 09:09:28 2023

Copyright (c) 1982, 2023, Oracle.  All rights reserved.

Last Successful login time: Thu Dec 14 2023 09:09:35 +00:00

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.1.0

SQL> 
```
unified_audit_trailビューの内容をCSV形式でエクスポートするパイプライン「EXPORT_UNIFIED_AUDIT_TRAIL_CSV」を作成します。

```
SQL> BEGIN
         DBMS_CLOUD_PIPELINE.CREATE_PIPELINE(
             pipeline_name => 'EXPORT_UNIFIED_AUDIT_TRAIL_CSV',
             pipeline_type => 'EXPORT',
             description   => 'Export unified_audit_trail to object store in CSV format'
         );
     END;
     /

PL/SQL procedure successfully completed.

SQL> 
```
パイプライン「EXPORT_UNIFIED_AUDIT_TRAIL_CSV」の属性を設定します。
こちらの例では、event_timestamp_utc列をタイムスタンプ・キーとして、unified_audit_trailビューを10分間隔で指定したバケットにCSV形式でエクスポートする設定を行っています。
```
SQL> BEGIN
         DBMS_CLOUD_PIPELINE.SET_ATTRIBUTE(
             pipeline_name => 'EXPORT_UNIFIED_AUDIT_TRAIL_CSV',
             attributes    => JSON_OBJECT('credential_name' VALUE 'OCI$RESOURCE_PRINCIPAL',
                                          'location' VALUE 'https://objectstorage.ap-tokyo-1.oraclecloud.com/n/namespace/b/unified_audit_trail/o/',
                                          'table_name' VALUE 'unified_audit_trail',
                                          'key_column' VALUE 'event_timestamp_utc',
                                          'format' VALUE '{"type": "csv", "quote":"\""}',
                                          'priority' VALUE 'MEDIUM',
                                          'interval' VALUE '10')
         );
     END;
     /

PL/SQL procedure successfully completed.

SQL> 
```
unified_audit_trailのレコード数を確認します。
```
SQL> SELECT COUNT(*) FROM unified_audit_trail;

   COUNT(*) 
___________ 
         64 

SQL> 
```
unified_audit_trailには64件の監査レコードがあることがわかりました。

バケットの内容を確認します。
![スクリーンショット 2023-12-14 18.10.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/79bb1ba4-e748-c134-172a-3814699f2b03.png)
この時点では、パイプラインを開始していないので、まだファイルはありません。

# 3. パイプラインの開始と動作確認

準備が整ったので、パイプラインEXPORT_UNIFIED_AUDIT_TRAIL_CSVを開始します。
```
SQL> BEGIN
         DBMS_CLOUD_PIPELINE.START_PIPELINE(
             pipeline_name => 'EXPORT_UNIFIED_AUDIT_TRAIL_CSV'
         );
     END;
     /

PL/SQL procedure successfully completed.

SQL> 
```
バケットの内容を確認します。
![スクリーンショット 2023-12-14 18.11.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/8f8ed535-0ac9-4a6a-ac6f-6970f82438f2.png)
CSVファイルが作成されていることが確認できました。

作成されたCSVファイルをダウンロードして、内容を確認してみます。
![スクリーンショット 2023-12-14 18.26.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/e370a451-b8a2-2201-5bcb-39c1c604b3f6.png)

データが64行含まれていることがわかりました。

unified_audit_trail内の64件の監査レコードが、CSVファイルとしてエクスポートされたことが確認できました。

監査レコードを増やすため、別のセッションから正しくないパスワードでadminユーザへのログインを複数回試みます。
（Autonomous Databaseでは、デフォルトでユーザのログイン失敗の監査が有効になっています。）

unified_audit_trailのレコード数を確認します。
```
SQL> SELECT COUNT(*) FROM unified_audit_trail;

   COUNT(*) 
___________ 
         66 

SQL> 
```
unified_audit_trailのレコード数が2件増えていることがわかりました。

10分（パイプラインの実行間隔）ほど待って、バケットの中身を確認してみます。

![スクリーンショット 2023-12-14 18.21.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/4087984b-ee5d-f2ae-f072-e3b0f16d1313.png)

CSVファイルが追加されていることが確認できました。

追加されたCSVファイルをダウンロードして、内容を確認してみます。
![スクリーンショット 2023-12-14 18.22.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/9698644b-fa21-6485-737b-979a0adfd8cc.png)
データが2行含まれていることがわかりました。

unified_audit_trailに追加された2件のレコードがCSVファイルとしてエクスポートされたことが確認できました。