#!/bin/bash
#-------------------------------------------------------------
# 将oracle产生的trace日志迁移至数据硬盘
#-------------------------------------------------------------
# @author alexander
#-------------------------------------------------------------
# @time 20160105
#-------------------------------------------------------------
# 获取trace日志路径
alert_path=$1
# 获取trace日志迁移目的路径
listener_path=$2
if [[ ! -n $1 ]] || [[ ! -n $2 ]];then
echo "日志路劲和日志迁移目的路径未设置"
exit
fi
# 获取目录下所有文件函数
function ergodic(){
local files=('null')
local i=0
for file in `ls $1 | grep -E "listener\.log"`
do
if [ -f $1"/"$file ]
then
files[$i]=$1"/"$file
fi
let i++;
done
# 没有trace日志文件退出脚本
if [ $i -eq 0 ]; then
exit
fi
echo ${files[@]}
}
lsnrctl set log_status off
files=`ergodic $alert_path`
for file in ${files[*]}
do
# 获取日志文件最后修改时间
modify=`stat -c %Y $file`
# 获取时间格式年-月-日
filedate=`date -d "@${modify}" +"%Y-%m-%d"`
# 获取时间格式年月日时分秒
filesec=`date -d "@${modify}" +"%Y%m%d%H%M%S"`
# 获取日志文件路径
logpath=${file%/*}
# 获取日志文件名
logname=${file##*/}
# 获取文件后缀名
logext=${file##*.}
# 判断日志存储路径是否存在,不存见创建之
if [ ! -d $2"/"$filedate ]; then
`mkdir $2"/"$filedate`
fi
# 将日志文件移动到目的路径
`mv $file $2"/"$filedate"/"$filesec"."$logext`
done
lsnrctl set log_status on
注意:
本脚本启动须使用lsnrctl命令,如果遇到之类的错误,是环境变量的问题。
需要在shell脚本中加入(图片中的.bash_profile少个字母e)主要是加入ORACLE_HOME这个环境变量。