Oracle官方提供清理偵聽器日志的4種方式
偵聽器日志,例如:
[root@dev-testdb trace]# ll /u01/app/grid/diag/tnslsnr/dev-testdb/listener/trace/listener.log -rw-r----- 1 grid oinstall 1129 Jan 20 10:35 /u01/app/grid/diag/tnslsnr/dev-testdb/listener/trace/listener.log
根據實際執行和Why Are My Listener Logs & Traces Not Purged By The ADR (文檔 ID 1438242.1)可知,不會被如下命令adrci的交互式命令清除:
purge -age <min> -type alert
該命令只會清理xml格式的文本。
以11g為例子,總結了官方提供的4種清除方式。
- ARCHIVED How to Rotate or Purge Listener Log Data to Avoid Large listener.log File (文檔 ID 1457196.1)
停止監聽后刪除或重命名日志,下次啟動偵聽器會創建新的日志 - ARCHIVED How to Rotate or Purge Listener Log Data to Avoid Large listener.log File (文檔 ID 1457196.1)
LSNRCTL> set current_listener <listenername>
LSNRCTL> set log_status off
在另一個窗口中重命名日志文件。然后返回上一個窗口
LSNRCTL> set log_status on
這將創建一個新的空 listener.log 文件,該文件將繼續記錄。 - Excessive Listener XML FILES CREATED IN $GRID_HOMElogdiagtnslsnr (文檔 ID 1927067.1)
Adrci Purge Does Not Clear the Text-formatted Alert.Log located in the Trace Folder (文檔 ID 751082.1)
How To Purge Listener Log.Xml File (文檔 ID 816871.1)
這3篇官方文檔指出adrci不會清理文本格式的 alert.log 文件,只修改 XML 格式的警報文件,而不是 Text 格式的警報文件。
需要手工編輯或者刪除文本基礎.log的文件,例如:對文件進行拆分,或者使用 Unix 上的“vi”之類的編輯器來清空文件等... -
echo "" >| /u01/app/grid/diag/tnslsnr/dev-testdb/listener/trace/listener.log
咋一看簡單且暴力,一點也不優雅。
purgeLogs Cleanup traces, logs in one command (文檔 ID 2081655.1)中提供了一個腳本purgeLogs,需要使用root用戶執行並且需要有/etc/init.d/init.ohasd腳本,即單機環境無法使用。
下邊詳細說說這第4點。
echo方式清空日志實際上就是purgeLogs這個腳本的處理方式。
腳本功能比較強大,可以清理osw,tfa,rdbms等等的信息文件,不僅僅限於日志。
[root@dev-testdb trace]# /soft/purgeLogs -h Usage: purgeLogs [ -days <days> [ -aud ] [ -lsnr ] ] | [ -orcl <days> [ -aud ] [ -lsnr ] ] | [ -tfa <days> ] | [ -osw <days> ] | [ -oda <days> ] | [ -extra '<folder>':<days> | [, '<folder>':<days>] ] [ -automigrate ] [ -dryrun ] purgeLogs OPTIONS -days <days> Purge orcl,tfa,osw,oda components logs & traces older then # days -orcl <days> Purge only GI/RDBMS logs & traces (Default 30 days) -tfa <days> Purge only TFA repository older then # days (Default 30 days) -osw <days> Purge only OSW archives older then # days (Default 30 days) -oda <days> Purge only ODA logs and trace older then # days (Default 30 days) -extra '<folder>':<days> Purge only files in user specified folders (Default 30 days) -aud Purge Audit logs based on '-orcl <days>' option -lsnr It will force the cleanup of listeners log independently by the age -dryrun It will show the purge commands w/o execute them -automigrate It will run the adrci schema migrate commands in case of DIA-49803 -h Display this help and exit Example: purgeLogs purgeLogs -days 20 purgeLogs -orcl 50 purgeLogs -orcl 50 -aud -lsnr purgeLogs -tfa 50 purgeLogs -osw 20 -oda 10 purgeLogs -orcl 20 -osw 20 -oda 10 purgeLogs -orcl 20 -osw 20 -oda 10 -extra /tmp:10,/var/log:20
根據幫助手冊,刪除GI/RDBMS日志和trace文件,同時刪除偵聽日志的指令:
/soft/purgeLogs -orcl 10 -lsnr -aud -dryrun
輸出案例:
[root@dev-testdb ~]# /soft/purgeLogs -orcl 10 -lsnr -aud -dryrun │▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│ purgeLogs version: 1.65 Copyright (c) 2015-2020 Oracle and/or its affiliates. ------------------------------------------------------- Author: Ruggero Citton <ruggero.citton@oracle.com> RAC Pack, Cloud Innovation and Solution Engineering Team │▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│ 2022-01-20 11:01:04: I DRYRUN - Cleaning up Listener logs, ORACLE_BASE is '/u01/app/grid' echo "" >| /u01/app/grid/diag/tnslsnr/dev-testdb/listener/trace/listener.log 2022-01-20 11:01:04: I DRYRUN - Cleaning up SCAN1 Listener logs, ORACLE_BASE is '/u01/app/grid' 2022-01-20 11:01:04: W Path /u01/app/grid/diag/tnslsnr/dev-testdb/listener_scan1/trace does not exist, SCAN1 Listener logs cleanup skipped... 2022-01-20 11:01:04: I DRYRUN - Cleaning up SCAN2 Listener logs, ORACLE_BASE is '/u01/app/grid' 2022-01-20 11:01:04: W Path /u01/app/grid/diag/tnslsnr/dev-testdb/listener_scan2/trace does not exist, SCAN2 Listener logs cleanup skipped... 2022-01-20 11:01:04: I DRYRUN - Cleaning up SCAN3 Listener logs, ORACLE_BASE is '/u01/app/grid' 2022-01-20 11:01:04: W Path /u01/app/grid/diag/tnslsnr/dev-testdb/listener_scan3/trace does not exist, SCAN3 Listener logs cleanup skipped... 2022-01-20 11:01:04: I DRYRUN - Cleaning up Management Listener logs, ORACLE_BASE is '/u01/app/grid' 2022-01-20 11:01:04: W Path /u01/app/grid/diag/tnslsnr/dev-testdb/mgmtlsnr/trace does not exist, Management Listener logs cleanup skipped... 2022-01-20 11:01:04: I DRYRUN - Cleaning up ASM Listener logs, ORACLE_BASE is '/u01/app/grid' 2022-01-20 11:01:04: W Path /u01/app/grid/diag/tnslsnr/dev-testdb/asmnet1lsnr_asm/trace does not exist, ASM Listener logs cleanup skipped... 2022-01-20 11:01:04: I GI Audit logs purge started 2022-01-20 11:01:04: I DRYRUN - Purging GI Audit logs under '/u01/app/11.2.0/grid/rdbms/audit' older then 10 days rm /u01/app/11.2.0/grid/rdbms/audit/null_ora_26047_20210517200222237009143795.aud rm /u01/app/11.2.0/grid/rdbms/audit/+ASM1_ora_26076_20210517200222587121143795.aud rm /u01/app/11.2.0/grid/rdbms/audit/+ASM1_ora_26076_20210517200222588926143795.aud rm /u01/app/11.2.0/grid/rdbms/audit/+ASM1_ora_26089_20210517200222906375143795.aud rm /u01/app/11.2.0/grid/rdbms/audit/+ASM1_ora_26089_20210517200259048887143795.aud rm /u01/app/11.2.0/grid/rdbms/audit/+ASM1_ora_26201_20210517200259071998143795.aud ...省略部分內容... 2022-01-20 11:01:04: I DRYRUN - Purging GI Audit logs under '/u01/app/grid/admin/_mgmtdb/adump' older then 10 days 2022-01-20 11:01:04: W Path /u01/app/grid/admin/_mgmtdb/adump does not exist, GI Audit archive logs cleanup skipped... ~~~~~~~~~~~~~~~~~~~~~~adrci GI purge started~~~~~~~~~~~~~~~~~~~~~~ 2022-01-20 11:01:04: I Checking if this is an Oracle Restart environment 2022-01-20 11:01:04: I DRYRUN - adrci GI purging diagnostic destination diag/asm/+asm/+ASM1 older than 10 days su grid -c 'export ORACLE_HOME=/u01/app/11.2.0/grid;/u01/app/11.2.0/grid/bin/adrci exec="set homepath diag/asm/+asm/+ASM1;purge -age 14400 -type ALERT "' su grid -c 'export ORACLE_HOME=/u01/app/11.2.0/grid;/u01/app/11.2.0/grid/bin/adrci exec="set homepath diag/asm/+asm/+ASM1;purge -age 14400 -type INCIDENT "' su grid -c 'export ORACLE_HOME=/u01/app/11.2.0/grid;/u01/app/11.2.0/grid/bin/adrci exec="set homepath diag/asm/+asm/+ASM1;purge -age 14400 -type TRACE "' su grid -c 'export ORACLE_HOME=/u01/app/11.2.0/grid;/u01/app/11.2.0/grid/bin/adrci exec="set homepath diag/asm/+asm/+ASM1;purge -age 14400 -type CDUMP "' su grid -c 'export ORACLE_HOME=/u01/app/11.2.0/grid;/u01/app/11.2.0/grid/bin/adrci exec="set homepath diag/asm/+asm/+ASM1;purge -age 14400 -type STAGE "' su grid -c 'export ORACLE_HOME=/u01/app/11.2.0/grid;/u01/app/11.2.0/grid/bin/adrci exec="set homepath diag/asm/+asm/+ASM1;purge -age 14400 -type SWEEP "' su grid -c 'export ORACLE_HOME=/u01/app/11.2.0/grid;/u01/app/11.2.0/grid/bin/adrci exec="set homepath diag/asm/+asm/+ASM1;purge -age 14400 -type HM "' su grid -c 'export ORACLE_HOME=/u01/app/11.2.0/grid;/u01/app/11.2.0/grid/bin/adrci exec="set homepath diag/asm/+asm/+ASM1;purge -age 14400 -type UTSCDMP "' 2022-01-20 11:01:04: I DRYRUN - adrci GI purging diagnostic destination diag/tnslsnr/dev-testdb/listener older than 10 days su grid -c 'export ORACLE_HOME=/u01/app/11.2.0/grid;/u01/app/11.2.0/grid/bin/adrci exec="set homepath diag/tnslsnr/dev-testdb/listener;purge -age 14400 -type ALERT "' su grid -c 'export ORACLE_HOME=/u01/app/11.2.0/grid;/u01/app/11.2.0/grid/bin/adrci exec="set homepath diag/tnslsnr/dev-testdb/listener;purge -age 14400 -type INCIDENT "' su grid -c 'export ORACLE_HOME=/u01/app/11.2.0/grid;/u01/app/11.2.0/grid/bin/adrci exec="set homepath diag/tnslsnr/dev-testdb/listener;purge -age 14400 -type TRACE "' su grid -c 'export ORACLE_HOME=/u01/app/11.2.0/grid;/u01/app/11.2.0/grid/bin/adrci exec="set homepath diag/tnslsnr/dev-testdb/listener;purge -age 14400 -type CDUMP "' su grid -c 'export ORACLE_HOME=/u01/app/11.2.0/grid;/u01/app/11.2.0/grid/bin/adrci exec="set homepath diag/tnslsnr/dev-testdb/listener;purge -age 14400 -type STAGE "' su grid -c 'export ORACLE_HOME=/u01/app/11.2.0/grid;/u01/app/11.2.0/grid/bin/adrci exec="set homepath diag/tnslsnr/dev-testdb/listener;purge -age 14400 -type SWEEP "' su grid -c 'export ORACLE_HOME=/u01/app/11.2.0/grid;/u01/app/11.2.0/grid/bin/adrci exec="set homepath diag/tnslsnr/dev-testdb/listener;purge -age 14400 -type HM "' ......
可以看到腳本實際就是使用了echo來清理日志的。10[天]這個參數不生效。