Oracleデータベースを連続稼働しているとトレースファイル等が溜まってきますので定期的に削除するためのスクリプトです.
必要に応じて, 削除前にzipアーカイブするなどします.
運用する環境に応じて,変数COMMANDS
に対象ファイルの検索条件を追記してください.
- シェルスクリプトファイルを作成・配置します.
~/bin/remove_old_files.sh
#!/bin/bash
##
## @file remove_old_files.sh
##
## @brief Oracleの古いトレースファイル等の削除
##
## @details Oracleデータベース起動中はトレースファイル等のファイルが自動生成されます.<br/>
## データベースを連続稼働する場合は, これらのファイルは適切なタイミングで削除する必要があります.<br/>
## このスクリプトは, これら自動生成されるファイルのうち"一部の"ファイルを削除します.<br/>
##
## @param [in] $1 保存期間(日数)
## @param [in] $2 ORACLE SID
##
## @note 監視対象のファイルを追加する場合はCOMMANDS変数のfindコマンドで指定してください.<br/>
##
## @return none.
##
# ユーザー環境変数読み込み
. ~/.bash_profile
# ログファイル定義
LOGFILE=/var/tmp/remove_old_files_`date "+%Y%m%d_%H%M%S"`.log
# 変数定義
KEEP_DAYS=$1
ORACLE_SID=$2
ORACLE_BASE=`orabase` # oracle db verion 12c or later.
ORACLE_HOME=`orabasehome` # oracle db verion 12c or later.
echo "[INFO] KEEP_DAYS="${KEEP_DAYS} >> ${LOGFILE}
echo "[INFO] ORACLE_SID="${ORACLE_SID} >> ${LOGFILE}
echo "[INFO] ORACLE_BASE="${ORACLE_BASE} >> ${LOGFILE}
echo "[INFO] ORACLE_HOME="${ORACLE_HOME} >> ${LOGFILE}
# ファイル検索コマンド定義
COMMANDS=(
"find ${ORACLE_BASE}/admin/${ORACLE_SID}/adump -name "*.aud" -type f -mtime +${KEEP_DAYS}"
"find ${ORACLE_BASE}/diag/rdbms/${ORACLE_SID,,}/${ORACLE_SID}/trace \( -name "*.trc" -o -name "*.trm" \) -type f -mtime +${KEEP_DAYS}"
"find ${ORACLE_HOME}/rdbms/log \( -name "*.trc" -o -name "*.trm" \) -type f -mtime +${KEEP_DAYS}"
)
# ファイル検索コマンド実行
for cmd in "${COMMANDS[@]}"; do
echo "[INFO] cmd="$cmd >> ${LOGFILE}
eval $cmd | grep -q .
if [ $? -eq 0 ]; then
eval $cmd | xargs ls -l >> ${LOGFILE}
# eval $cmd | xargs rm -f # uncomment after testing
else
echo "[INFO] file not found." >> ${LOGFILE}
fi
done
echo "[INFO] done." `date "+%Y-%m-%d %H:%M:%S"` >> ${LOGFILE}
- crontabに登録します.
適切なタイミングでスクリプトが実行されるように設定します.
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
5 5 * * * sh /home/oracle/bin/remove_old_files.sh 7 ORCLCDB > /dev/null 2>&1