[Oracle Cloud] DBCSの自動ログ削除ポリシー (autoLogCleanPolic) を使ってみた

# はじめに

DBCSのdbcliコマンドの一覧を見ていると、「create-autoLogCleanPolicy」というコマンドがあります。このコマンドは、[マニュアル](https://docs.oracle.com/ja-jp/iaas/Content/Database/References/dbacli.htm)では、以下のように記載されており、ログの自動クリーンアップをしてくれるそうです。

> dbcli create-autoLogCleanPolicy
dbcli create-autoLogCleanPolicyコマンドを使用して、ログの自動クリーンアップ(パージ)のポリシーを作成します。

マニュアルに記載されている、指定可能なパラメータを見てみると、以下の項目を指定できそうです。

① ログの削除対象は、GI / Database / DCSの3つのようだ。(-c)
② ログ削除を実行するトリガーとして、以下の3種類の閾値を指定できそうだ。
 ・空き容量のパーセンテージ (-f)
 ・使用サイズ (-uMB)
 ・使用量のパーセンテージ(-uPer)
③ 何日より前のログを削除対象にするか(-o)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1674918/b6fce2e8-b381-cc3f-bb15-784611bcdbe4.png)

# 試してみる
## ポリシーを作成してみる
create-autologCleanPolicyを実行して、どのような動作をするか観察してみました。

対象コンポーネントとしてgi/database/dcsのすべてを設定して、その他のオプションはデフォルトにしました。実行後の標準出力を見ると、各コンポーネントにfreeSpaceBelowPercentageが20に設定されて、olderThanが30、OlderThanUnitがDayに設定されました。「空き用量が20%以下になったときに、30日以上前のログを削除する」というポリシーのようです。


```CONSOLE:SHELL
# dbcli create-autoLogCleanPolicy -c gi,database,dcs
Component            UsageOverPercentage  freeSpaceBelowPercentage UsageOverMB          OlderThan            OlderThanUnit       
-------------------- -------------------- -------------------- -------------------- -------------------- -------------------- --------------------
gi                   0                    20                   0                    30                   Day                 
database             0                    20                   0                    30                   Day                 
dcs                  0                    20                   0                    30                   Day  
```


スケジュールを見てみると、「Log files Cleanup」というタスクが追加されていました。(★部分)
autoLogCleanPolicy以外にも、デフォルトでいくつかのハウスキーピングっぽいジョブがスケジュールされているようです。

```CONSOLE:SHELL
# dbcli list-schedules

ID                                       Name                      Description                                        CronExpression                 Disabled
---------------------------------------- ------------------------- -------------------------------------------------- ------------------------------ --------
012a9b48-8980-4055-91f5-3ec545152b9e     metastore maintenance     internal metastore maintenance                     0 0 0 1/1 * ? *                false   
038dddb7-6fc4-43f0-94cd-eda0709db453     backupreport maintenance  backup reports deletion                            0 0 0 1/3 * ? *                false   
1d3769aa-2935-483c-8dcf-f2aae045b0b0     bom maintenance           bom reports generation                             0 0 1 ? * SUN *                false   
63ca5ca5-bdb3-4f53-b308-5e964c1f2922     Big File Upload Cleanup   clean up expired big file uploads.                 0 0 1 ? * SUN *                false   
72839a79-fd79-4061-a9ad-43f9138fb01a     AgentState metastore cleanup internal agentstateentry metastore maintenance     0 0 0 1/1 * ? *                false   
9d587048-ed45-4d0b-b370-8645aedf272a     audit_files_auto_cleanup_<DBユニーク名> audit_files_auto_cleanup : <DB名>                 0 0 0 1/1 * ? *                false   
★ faebd558-8604-400c-a4a0-b9f679d2d8fb     Log files Cleanup         Auto log file purge bases on policy                0 0 3 1/1 * ? *                false   
fd4f1b98-3a29-409a-81e7-8894f8fb0f6c     Update infrastructure components Update infra components job                        0 0 0 */7 * ? *                false 
```

cronExpressionの列にスケジュールが設定されていますが、ここは注意が必要です。

linuxのcron式は列が5つで、それぞれの列は以下の意味を持っていますが、

```
<分> <時間> <日> <月> <曜日>
```

dbcliで設定するスケジュールは、列を7つ持っています。どうやら、Javaのcron用ライブラリであるQuartzのcron式を使用するようです。

```
<秒> <分> <時間> <日> <月> <曜日> <年>
```

なので、0 0 3 1/1 * ? * は、「日次で3:00 AMに実行する」を意味してそうです。


続いて、「空き用量が20%以下になったとき」ですが、どこの空き容量が20%になったときなのでしょうか。
dbcli list-logSpaceUsageコマンドを実行してみると、以下のように出力されました。どうやら、dcsは/ファイルシステムの空き容量、giとdatabaseは/u01の空き容量を対象に空き容量を確認していそうです。

```CONSOLE:SHELL
# dbcli list-logSpaceUsage

              Timestamp:  July 11, 2021 9:41:44 PM JST
----------------------------------------------------------------
Component            Size(MB)             Partition            LogUsagePercentage   PartitionFreePercentage
-------------------- -------------------- -------------------- -------------------- --------------------
dcs                  9233.00              /dev/mapper/VolGroupSys0-LogVolRoot 20.41                57.00               
gi                   490.57               /dev/sdd             0.24                 87.00               
database             40.98                /dev/sdd             0.02                 87.00

# df -Ph -T |grep -e /dev/mapper/VolGroupSys0-LogVolRoot -e /dev/sdd
/dev/mapper/VolGroupSys0-LogVolRoot ext4       45G   18G   25G  43% /
/dev/sdd                            ext4      197G   25G  163G  13% /u01
```


## ログ削除ジョブで、何が削除されるのかを観察する

giとdatabaseのログ削除処理を実行させるには、/u01の使用率を80%以上(空き容量20%以下)にする必要がありそうです。テストのため、ダミーのファイルを作成して、/u01の使用率を80%以上にしてみます。

/u01のサイズが約200GBなので、使用率を80%にするために、ダミーファイルを作成して使用量を160GBにします。現在の使用量が25GBなので、10GBのファイルを14個作成しました。

```CONSOLE:SHELL
## /u01配下にディレクトリを作成して
# mkdir /u01/test
# cd /u01/test
## 1つ10GBのダミーファイルを14個作成します
#  for i in $(seq -w 1 14)
do
 dd if=/dev/zero of=./10g.data.$i bs=1024k count=10240 &
done

```

使用率が80%を超えました。実行が3:00 AMなので、この状態で一晩寝かせます。

```CONSOLE:SHELL
# df -Ph /u01
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdf        197G  165G   24G  88% /u01
```

翌朝に、dbcli list-jobsコマンドを実行してみると、3:00 AM ごろに「log file clenaup」ジョブが2つ実行されています。(★部分)

```CONSOLE:SHELL
# dbcli list-jobs

ID                                       Description                                                                 Created                             Status    
---------------------------------------- --------------------------------------------------------------------------- ----------------------------------- ----------
//省略//
47b8d207-9f06-4527-8353-a78a0412cd0a     Manage AHF telemetry                                                        Tuesday, June 22, 2021, 17:41:55 JST Success   
c637099f-75c2-46ea-bfeb-7a8ed1c70002     Remove Audit files for DB: <DB名>                                           Wednesday, July 07, 2021, 00:00:00 JST Success   
7c3d526a-5ba0-4baa-8ae3-7440b7e70ce5     log file cleanup                                                            Wednesday, July 07, 2021, 03:00:05 JST Success   ★
e5c91224-02ad-4183-b774-5ffbcc9220e3     log file cleanup                                                            Wednesday, July 07, 2021, 03:00:17 JST Success  ★
```

それぞれのジョブをdescribe-jobで確認してみます。両方とも、「Clean TFA logs」と出力されていました。

```CONSOLE:SHELL
# dbcli describe-job -i 7c3d526a-5ba0-4baa-8ae3-7440b7e70ce5
Job details                                                      
----------------------------------------------------------------
                     ID:  7c3d526a-5ba0-4baa-8ae3-7440b7e70ce5
            Description:  log file cleanup
                 Status:  Success
                Created:  July 7, 2021 3:00:05 AM JST
               Progress:  100%
                Message:  

Task Name                                                                Start Time                          End Time                            Status    
------------------------------------------------------------------------ ----------------------------------- ----------------------------------- ----------
Clean TFA logs                                                           July 7, 2021 3:00:06 AM JST         July 7, 2021 3:00:17 AM JST         Success   


# dbcli describe-job -i e5c91224-02ad-4183-b774-5ffbcc9220e3
Job details                                                      
----------------------------------------------------------------
                     ID:  e5c91224-02ad-4183-b774-5ffbcc9220e3
            Description:  log file cleanup
                 Status:  Success
                Created:  July 7, 2021 3:00:17 AM JST
               Progress:  100%
                Message:  

Task Name                                                                Start Time                          End Time                            Status    
------------------------------------------------------------------------ ----------------------------------- ----------------------------------- ----------
Clean TFA logs                                                           July 7, 2021 3:00:17 AM JST         July 7, 2021 3:00:25 AM JST         Success 
```

これだけだと、何が実行されたのかよくわかりません。そういう時は、dcs-agentのログを見ると何が実行されたのかわかることがよくあります。まずは、database関連のログを抜粋して、見てみます。

```C
# less /opt/oracle/dcs/log/dcs-agent.0.0.log
★3:00 AMに「log file Cleanup」ジョブが実行されています
[2021-07-07 03:00:00,005] INFO [DefaultQuartzScheduler_Worker-5] com.oracle.dcs.agent.schedule.DcsJobMonitor: Job : maintenance.Log files Cleanup is going to start...

★ tfactl managelogs -show usageコマンドを使用して、databaseコンポーネントの使用率を確認しているようです。
[2021-07-07 03:00:00,079] FINE [DefaultQuartzScheduler_Worker-5] com.oracle.dcs.commons.utils.CommonsUtils: 
run: cmd= '[su,
 -,
 root,
 -c,
 /u01/app/oracle.ahf/tfa/bin/tfactl managelogs -show usage -database]' 

★ databaseの使用量合計は、38.40MBのようです。
[2021-07-07 03:00:05,786] FINE [DefaultQuartzScheduler_Worker-5] com.oracle.dcs.agent.service.logfiles.LogFileUtils: getTfaTotalSizeMb | Total                                                     | 38.40 MB |

###############################################################################
★ 翌日、実際にこのコマンドを実行してみました、38.4MBの内訳は以下のようです
# /u01/app/oracle.ahf/tfa/bin/tfactl managelogs -show usage -database

Output from host : <ホスト名>
------------------------------

.----------------------------------------------------------------------.
|                         Database Homes Usage                         |
+-----------------------------------------------------------+----------+
| Location                                                  | Size     |
+-----------------------------------------------------------+----------+
| /u01/app/oracle/diag/rdbms/<DBユニーク名>/<DB名>/alert    | 2.83 MB  |
| /u01/app/oracle/diag/rdbms/<DBユニーク名>/<DB名>/incident | 7.66 MB  |
| /u01/app/oracle/diag/rdbms/<DBユニーク名>/<DB名>/trace    | 16.06 MB |
| /u01/app/oracle/diag/rdbms/<DBユニーク名>/<DB名>/cdump    | 11.84 MB |
| /u01/app/oracle/diag/rdbms/<DBユニーク名>/<DB名>/hm       | 4.00 KB  |
| /u01/app/oracle/diag/rdbms/<DBユニーク名>/<DB名>/log      | 40.00 KB |
+-----------------------------------------------------------+----------+
| Total                                                     | 38.43 MB |
'-----------------------------------------------------------+----------'
###############################################################################

★続いて、dfコマンドでもDIAG_BASE/rdbms/<DBユニーク名>/<DB名>ディレクトリが含まれるファイルシステムの使用率を確認しています。
[2021-07-07 03:00:05,786] FINE [DefaultQuartzScheduler_Worker-5] com.oracle.dcs.agent.service.logfiles.LogFileUtils: Get partion info for /u01/app/oracle/diag/rdbms/<DBユニーク名>/<DB名>
[2021-07-07 03:00:05,786] FINE [DefaultQuartzScheduler_Worker-5] com.oracle.dcs.commons.utils.CommonsUtils: 
run: cmd= '[su,
 -,
 root,
 -c,
 /bin/df -m /u01/app/oracle/diag/rdbms/<DBユニーク名>/<DB名>]' 

★ 使用率は88%です。
[2021-07-07 03:00:05,831] FINE [DefaultQuartzScheduler_Worker-5] com.oracle.dcs.commons.utils.CommonsUtils: Output :
Filesystem 1M-blocks Used Available Use% Mounted on 
/dev/sdf 201458 167523 23680 88% /u01 

★ 閾値の80%を超えていることを検知しています。
[2021-07-07 03:00:05,833] FINE [DefaultQuartzScheduler_Worker-5] com.oracle.dcs.agent.schedule.jobs.AutoLogCleanJob: Current partition free space percentage is 12.0, less than 20.Need to purge logs for database

★ジョブが作成されました。
[2021-07-07 03:00:05,848] FINE [DefaultQuartzScheduler_Worker-5] com.oracle.dcs.commons.task.report.TaskReportRecorder:  Compile task plan for ServiceJobReport
'{
  "updatedTime" : 1625594405843,
  "jobId" : "7c3d526a-5ba0-4baa-8ae3-7440b7e70ce5",
  "status" : "Created",
  "message" : null,
  "reports" : [ ],
  "createTimestamp" : 1625594405844,
  "percentageProgress" : "totalWeight=0:completedWeight=0",
  "resourceList" : [ ],
  "description" : "log file cleanup",
  "cause" : null,
  "action" : null
}'...

★ ジョブから、tfactl managelogs -purgeコマンドを-older 30d -databaseオプションで実行していました。
[2021-07-07 03:00:06,194] FINE [Clean TFA logs : JobId=7c3d526a-5ba0-4baa-8ae3-7440b7e70ce5] com.oracle.dcs.commons.utils.CommonsUtils: 
run: cmd= '[su,
 -,
 root,
 -c,
 /u01/app/oracle.ahf/tfa/bin/tfactl managelogs -purge -older 30d -database | /bin/sed -r "s/\x1B\[([0-9]{1,
```

続いて、DCSコンポーネント関連のログを抜粋してみます。

```C
# less /opt/oracle/dcs/log/dcs-agent.0.0.log
★ dcsコンポーネントのログ使用量を確認しています。
[2021-07-07 03:00:05,939] FINE [DefaultQuartzScheduler_Worker-5] com.oracle.dcs.agent.schedule.jobs.AutoLogCleanJob: Start to decide the need to clean logs based on policy LogCleanPolicy{nodeId=node_0, component=dcs, freeSpaceBelowPercentage=20, usageOverMB=0, usageOverPercentage=0, olderThan=30, olderThanUnit=Day}

★duコマンドを使用して、/opt/oracle/dcs/log、/opt/oracle/oak/log、/opt/oracle/dcs/repo/node_0/logの使用率を確認しています。
2021-07-07 03:00:05,939] FINE [DefaultQuartzScheduler_Worker-5] com.oracle.dcs.commons.utils.CommonsUtils: 
run: cmd= '[su,
 -,
 root,
 -c,
 /usr/bin/du -sm /opt/oracle/dcs/log]' 
…
[2021-07-07 03:00:06,094] FINE [DefaultQuartzScheduler_Worker-5] com.oracle.dcs.commons.utils.CommonsUtils: 
run: cmd= '[su,
 -,
 root,
 -c,
 /usr/bin/du -sm /opt/oracle/oak/log]' 
…
[2021-07-07 03:00:06,173] FINE [DefaultQuartzScheduler_Worker-5] com.oracle.dcs.commons.utils.CommonsUtils: 
run: cmd= '[su,
 -,
 root,
 -c,
 /usr/bin/du -sm /opt/oracle/dcs/repo/node_0/log]' 

★続いて、dfコマンドを使用して/opt/oracle/oakディレクトリを含むファイルシステムの使用率を確認しています。
[2021-07-07 03:00:06,251] FINE [DefaultQuartzScheduler_Worker-5] com.oracle.dcs.commons.utils.CommonsUtils: 
run: cmd= '[su,
 -,
 root,
 -c,
 /bin/df -m /opt/oracle/oak/]' 

★今回、/ファイルシステムの使用率はそのままにしているので21%です。閾値未満なので何もしていません。
[2021-07-07 03:00:06,315] FINE [DefaultQuartzScheduler_Worker-5] com.oracle.dcs.commons.utils.CommonsUtils: Output :
Filesystem 1M-blocks Used Available Use% Mounted on 
/dev/mapper/VolGroupSys0-LogVolRoot 45229 8811 34098 21% / 

```

最後に、gi関連のログを抜粋してみます。

```C
★ tfactl managelogs -show usage コマンドを使用してgi関連ログの使用量を確認しています。
[2021-07-07 03:00:06,377] FINE [DefaultQuartzScheduler_Worker-5] com.oracle.dcs.commons.utils.CommonsUtils: 
run: cmd= '[su,
 -,
 root,
 -c,
 /u01/app/oracle.ahf/tfa/bin/tfactl managelogs -show usage -gi]' 

★ dfコマンドを使用して、/u01/app/grid/diag/crs/<ホスト名>/crsディレクトリが存在するファイルシステムの使用率を確認しています。
[2021-07-07 03:00:17,779] FINE [DefaultQuartzScheduler_Worker-5] com.oracle.dcs.commons.utils.CommonsUtils: 
run: cmd= '[su,
 -,
 root,
 -c,
 /bin/df -m /u01/app/grid/diag/crs/<ホスト名>/crs]' 

★ 使用率は88%です。
[2021-07-07 03:00:17,819] FINE [DefaultQuartzScheduler_Worker-5] com.oracle.dcs.commons.utils.CommonsUtils: Output :
Filesystem 1M-blocks Used Available Use% Mounted on 
/dev/sdf 201458 167523 23680 88% /u01 

★ 閾値である80%を超えていることを検知しています。
[2021-07-07 03:00:17,820] FINE [DefaultQuartzScheduler_Worker-5] com.oracle.dcs.agent.schedule.jobs.AutoLogCleanJob: Current partition free space percentage is 12.0, less than 20.Need to purge logs for gi

★ ジョブが作成されました。
[2021-07-07 03:00:17,885] FINE [DefaultQuartzScheduler_Worker-5] com.oracle.dcs.commons.task.report.TaskReportRecorder:  Compile task plan for ServiceJobReport
'{
  "updatedTime" : 1625594417843,
  "jobId" : "e5c91224-02ad-4183-b774-5ffbcc9220e3",
  "status" : "Created",
  "message" : null,
  "reports" : [ ],
  "createTimestamp" : 1625594417829,
  "percentageProgress" : "totalWeight=2:completedWeight=0",
  "resourceList" : [ ],
  "description" : "log file cleanup",
  "cause" : null,
  "action" : null
}'...

★ 作成されたジョブの中で、tfactl managelogs -purge -older 30dを使用して、gi関連のログを削除しています。
[2021-07-07 03:00:18,043] FINE [Clean TFA logs : JobId=e5c91224-02ad-4183-b774-5ffbcc9220e3] com.oracle.dcs.commons.utils.CommonsUtils: 
run: cmd= '[su,
 -,
 root,
 -c,
 /u01/app/oracle.ahf/tfa/bin/tfactl managelogs -purge -older 30d -gi | /bin/sed -r "s/\x1B\[([0-9]{1,
2}(;
[0-9]{1,
2})?)?[m|K]//g"]' 

```

どうやら、create-autoLogCleanPolicyのgiとdatabaseコンポーネントは、tfactl managelogsを利用してログメンテナンスをしているようです。


では、tfactl managelogsはどのようにログを削除しているのでしょうか。[マニュアル](https://docs.oracle.com/en/engineered-systems/health-diagnostics/autonomous-health-framework/ahfug/tfactl-managelogs.html#GUID-07EFE012-6954-4C77-9B8E-E83CA8A7E80A)を見ても、詳しく書いてないですね。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1674918/a9a2b45c-989d-cb25-349b-6153b3449840.png)

なので、やっぱりログを見てみます。tfactl managelogの実行ログは、/u01/app/oracle.ahf/data/repository/suptools/<ホスト名>/managelogs/root配下にありそうです。ありました。

```CONSOLE:SHELL
# cd /u01/app/oracle.ahf/data/repository/suptools/*/managelogs/root
# ls -ltr --full-time
total 40
-rw-r--r-- 1 root root 3479 2021-07-06 21:23:46.855599991 +0900 purgelogs_61226.trc
-rw-r--r-- 1 root root 3479 2021-07-06 21:45:10.153493733 +0900 purgelogs_80016.trc
-rw-r--r-- 1 root root 3479 2021-07-06 21:48:06.056736781 +0900 purgelogs_83407.trc
-rw-r--r-- 1 root root 3479 2021-07-06 21:48:35.358934932 +0900 purgelogs_84674.trc
-rw-r--r-- 1 root root  879 2021-07-07 03:00:04.614101730 +0900 purgelogs_42226.trc
-rw-r--r-- 1 root root 1909 2021-07-07 03:00:16.190330440 +0900 purgelogs_42607.trc
-rw-r--r-- 1 root root 2745 2021-07-07 03:00:16.306332876 +0900 purgelogs_42642.trc
-rw-r--r-- 1 root root 6016 2021-07-07 03:00:24.499502929 +0900 purgelogs_43106.trc
-rw-r--r-- 1 root root  879 2021-07-07 08:08:16.529972193 +0900 purgelogs_87972.trc

```

purgeが行われた時間のログを見てみます。まずは、databaseのpurgeが行われた時間のログを確認します。どうやら、adrciを使用して、diag/rdbms/\<DBユニーク名>/\<DB名>に対して、purge -age 43200(30日)を実行してるみたいですね。

```C
# cat purgelogs_42607.trc
2021-07-07 03:00:15: OTHER ARG [purge : 1]
2021-07-07 03:00:15: OTHER ARG [older : 30d]
2021-07-07 03:00:15: INFO Purging files older than 30 days

2021-07-07 03:00:15: INFO Space is calculated in bytes [without round off]

2021-07-07 03:00:15: OTHER [ Option : Purge Database ]
2021-07-07 03:00:15: DEBUG Found Diag Dest for RDBMS <DBユニーク名>: /u01/app/oracle
2021-07-07 03:00:15: DEBUG export ADR_BASE=/u01/app/oracle;export ORACLE_HOME=/u01/app/oracle/product/19.0.0.0/dbhome_1
2021-07-07 03:00:15: DEBUG ADRCI command is: /u01/app/oracle/product/19.0.0.0/dbhome_1/bin/adrci exec='show base'
2021-07-07 03:00:15: DEBUG Proposed ADR Base: /u01/app/oracle, Actual ADR Base: /u01/app/oracle
2021-07-07 03:00:15: DEBUG The ADR Base for RDBMS <DBユニーク名> is: /u01/app/oracle
2021-07-07 03:00:15: DEBUG export ADR_BASE=/u01/app/oracle;export ORACLE_HOME=/u01/app/oracle/product/19.0.0.0/dbhome_1
2021-07-07 03:00:15: DEBUG ADRCI command is: /u01/app/oracle/product/19.0.0.0/dbhome_1/bin/adrci exec='show homes'
2021-07-07 03:00:15: MESSAGE Cleaning Database ADR Destinations for Database : <DBユニーク名>
2021-07-07 03:00:15: DEBUG Cleaning destination : /u01/app/oracle/diag/rdbms/<DBユニーク名>/<DB名>
2021-07-07 03:00:15: DEBUG export ADR_BASE=/u01/app/oracle;export ORACLE_HOME=/u01/app/oracle/product/19.0.0.0/dbhome_1
★ 2021-07-07 03:00:15: DEBUG ADRCI command is: /u01/app/oracle/product/19.0.0.0/dbhome_1/bin/adrci exec='set homepath diag/rdbms/<DBユニーク名>/<DB名>;purge -age 43200'
2021-07-07 03:00:16: INFO Diagnostic Destination "/u01/app/oracle/diag/rdbms/<DBユニーク名>/<DB名>" Purged: - 0 files deleted , 0 bytes space recovered
2021-07-07 03:00:16: MESSAGE Diagnostic Destinations for Database Home(s) Purged: - 0 files deleted , 0 bytes space recovered

2021-07-07 03:00:16: MESSAGE Calculating Filesystem Before/After Sizes...

    ==== Database Home(s) ADR Filesystem(s) Size Summary ====  

```

同じようにGIのpurge logを見てみます。こちらは、クラスタ・コンポーネントの各種パスに対してadrci purge -age 43200(30日)を実行しているようです。

```C
# cat purgelogs_43106.trc
2021-07-07 03:00:22: OTHER ARG [purge : 1]
2021-07-07 03:00:22: OTHER ARG [older : 30d]
2021-07-07 03:00:22: INFO Purging files older than 30 days

2021-07-07 03:00:22: INFO Space is calculated in bytes [without round off]

2021-07-07 03:00:22: OTHER [ Option : Purge GI ]
2021-07-07 03:00:22: INFO Cleaning Grid Infrastructure ADR Destinations
//省略//
2021-07-07 03:00:23: DEBUG ADRCI command is: /u01/app/19.0.0.0/grid/bin/adrci exec='set homepath diag/crs/<ホスト名>/crs;purge -age 43200'
2021-07-07 03:00:23: INFO Diagnostic Destination "/u01/app/grid/diag/crs/<ホスト名>/crs" Purged: - 0 files deleted , 0 bytes space recovered
2021-07-07 03:00:23: DEBUG ADR Home in Hash for /u01/app/grid is: diag/asm/+asm/+ASM1
2021-07-07 03:00:23: DEBUG Cleaning destination : /u01/app/grid/diag/asm/+asm/+ASM1
2021-07-07 03:00:23: DEBUG export ADR_BASE=/u01/app/grid;export ORACLE_HOME=/u01/app/19.0.0.0/grid
2021-07-07 03:00:23: DEBUG ADRCI command is: /u01/app/19.0.0.0/grid/bin/adrci exec='set homepath diag/asm/+asm/+ASM1;purge -age 43200'
2021-07-07 03:00:23: INFO Diagnostic Destination "/u01/app/grid/diag/asm/+asm/+ASM1" Purged: - 0 files deleted , 0 bytes space recovered
2021-07-07 03:00:23: DEBUG ADR Home in Hash for /u01/app/grid is: diag/apx/+apx/+APX1
2021-07-07 03:00:23: DEBUG Cleaning destination : /u01/app/grid/diag/apx/+apx/+APX1
2021-07-07 03:00:23: DEBUG export ADR_BASE=/u01/app/grid;export ORACLE_HOME=/u01/app/19.0.0.0/grid
2021-07-07 03:00:23: DEBUG ADRCI command is: /u01/app/19.0.0.0/grid/bin/adrci exec='set homepath diag/apx/+apx/+APX1;purge -age 43200'
2021-07-07 03:00:23: INFO Diagnostic Destination "/u01/app/grid/diag/apx/+apx/+APX1" Purged: - 0 files deleted , 0 bytes space recovered
2021-07-07 03:00:23: DEBUG ADR Home in Hash for /u01/app/grid is: diag/tnslsnr/<ホスト名>/listener
2021-07-07 03:00:23: DEBUG Cleaning destination : /u01/app/grid/diag/tnslsnr/<ホスト名>/listener
2021-07-07 03:00:23: DEBUG export ADR_BASE=/u01/app/grid;export ORACLE_HOME=/u01/app/19.0.0.0/grid
2021-07-07 03:00:23: DEBUG ADRCI command is: /u01/app/19.0.0.0/grid/bin/adrci exec='set homepath diag/tnslsnr/<ホスト名>/listener;purge -age 43200'
2021-07-07 03:00:24: INFO Diagnostic Destination "/u01/app/grid/diag/tnslsnr/<ホスト名>/listener" Purged: - 0 files deleted , 0 bytes space recovered
2021-07-07 03:00:24: DEBUG ADR Home in Hash for /u01/app/grid is: diag/tnslsnr/<ホスト名>/asmnet1lsnr_asm
2021-07-07 03:00:24: DEBUG Cleaning destination : /u01/app/grid/diag/tnslsnr/<ホスト名>/asmnet1lsnr_asm
2021-07-07 03:00:24: DEBUG export ADR_BASE=/u01/app/grid;export ORACLE_HOME=/u01/app/19.0.0.0/grid
2021-07-07 03:00:24: DEBUG ADRCI command is: /u01/app/19.0.0.0/grid/bin/adrci exec='set homepath diag/tnslsnr/<ホスト名>/asmnet1lsnr_asm;purge -age 43200'
2021-07-07 03:00:24: INFO Diagnostic Destination "/u01/app/grid/diag/tnslsnr/<ホスト名>/asmnet1lsnr_asm" Purged: - 0 files deleted , 0 bytes space recovered
2021-07-07 03:00:24: MESSAGE Diagnostic Destinations for GI Home Purged: - 0 files deleted , 0 bytes space recovered

2021-07-07 03:00:24: MESSAGE Calculating Filesystem Before/After Sizes...

    ==== Grid Infrastructure ADR Filesystem(s) Size Summary ====
```

テストが終わったので、ダミーファイルを削除します。

```CONSOLE:SHELL
# cd /u01/
# rm -rfv test/
…
```

# 補足
今回dbcliのcreate-autoLogCleanPolicyを使いましたが、そのほかにもcreate-logCleanJobという機能があります。

create-autoLogCleanPolicyでは、ジョブをスケジュールして閾値をもとにログメンテナンスを実行するかどうか制御していましたが、create-logCleanJobは、スケジューリングや閾値確認はせずに、コマンド実行直後にログメンテナンスを実行するようです。linuxのcronなどを使用して、ジョブの実行時間をユーザ側で制御したい場合は、こちらを使う方がよいかもしれません。(またはtfactlのmanagelogsを直接実行するか)

```CONSOLE:SHELL
# dbcli create-logCleanJob -h
Usage: create-logCleanJob [options]
  Options:
    --components, -c
      components list delimited by comma,values are "gi|database|dcs", e.g. 
      'gi,dcs'. 
    --help, -h
      get help
    --json, -j
      json output
    --olderThan, -o
      clean logs older than specified time interval. Default is 30 if it is 
      not specified.
    --unit, -u
      unit for the "olderThan" parameter, values are "Day|Hour|Minute". 
      Default is 'Day' if it is not specified.
```

# さいごに

autoLogCleanPolicyのgi/databaseコンポーネントを対象としたログ削除は、tfactl managelogsを実行しているようだということがわかりました。ただし、この挙動はマニュアルに記載されているものではないため、あくまで現時点(2021年7月)時点での実装であり、将来的に予告なく変更される可能性があることにはご留意ください。時間があればdcsのログ削除は何をやっているのかも、追加でしらべようと思います。