怎么用shell脚本实现对OGG进程过期trail文件的删除处理
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇内容主要讲解"怎么用shell脚本实现对OGG进程过期trail文件的删除处理",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么用shell脚本实现对
千家信息网最后更新 2026年11月02日怎么用shell脚本实现对OGG进程过期trail文件的删除处理
本篇内容主要讲解"怎么用shell脚本实现对OGG进程过期trail文件的删除处理",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么用shell脚本实现对OGG进程过期trail文件的删除处理"吧!
#!/bin/bash#by raysuen#v02ComGgsci=/u01/ggs/ggsci #指定ggsci的绝对路径ExtractTrailDir=/u01/ggs/dirdat #指定trail文件的目录keepfiles=1 #指定保留文件的数量rmlog=/u01/scripts/ray/RmOGGTrail.log #指定删除脚本的日志,记录删除那些trail文件###################################################################获取所有extract 进程信息##################################################################getOGGExtractInfo(){ ${ComGgsci}<<-RAY info extract * RAY}###################################################################获取进程信息checkpoint信息##################################################################getOGGExtractShowch(){ ${ComGgsci}<<-RAY info $1 showch RAY}###################################################################函数:删除投递进程指定保留数量前的trail文件 ##################################################################deleteExtractfile(){ echo "################################# delete Extract tail #################################" >> ${rmlog} ################################################################## #按照指定进程名称,删除指定保留数量前的日志 ################################################################## arrayExtract=() arrayExtractNum=0 isupdate=0 for i in `getOGGExtractInfo | egrep -v "GGSCI|^$" | sed -n '/EXTRACT/,$p' | awk -v dumpfile="" -v mynum=1 '{if($1=="EXTRACT") {dumpfile=$2;mynum=1} else if(($4!="Oracle")&&(mynum==3)){print dumpfile;mynum++}else mynum++}'` #获取所有的投递进程名称 do #获取指定投递进程的当前读取的checkpoint信息 extractInfo=`getOGGExtractShowch $i | sed -n '/Read Checkpoint #1/,/Write Checkpoint #1/p' | grep -A 4 "Current Checkpoint"` #getOGGExtractShowch $i | sed -n '/Read Checkpoint #1/,/Write Checkpoint #1/p' | grep -A 4 "Current Checkpoint" | awk -v seqno=0 -v trailname="" '{if($1=="Sequence") {seqno=$3} else if($1$2=="ExtractTrail:") {trailname=$3}}END{for(i=6-length(seqno);i>=1;i--) trailname=trailname"0";print trailname""seqno}' #获取投递进程读取的trail文件的文件头 trailePre=`echo "${extractInfo}" | awk '{if($1$2=="ExtractTrail:") print $3}' | sed 's#\./dirdat#'"${ExtractTrailDir}"'#g'` #获取当前指定投递进程正在读取的trail文件的序列号 traileSeq=`echo "${extractInfo}" | awk '{if($1=="Sequence") print $3}'` #判断是否为第一次,如果为第一次表示数组内没有存放任何extract进程信息。需要给数组内赋值 if [ ${arrayExtractNum} -eq 0 ];then arrayExtract[${arrayExtractNum}]=$i" "${trailePre}" "${traileSeq} arrayExtractNum=$[${arrayExtractNum}+1] else #循环数组,判断数组内的extract进程读取的trail文件是否和当前的extract进程读取的文件一致。如果一致,比对2个进程读取人间的seq号。如果当前进程读取的seq号比数组内进程读取的seq号小,则把数组内的比对的进程信息替换为当前进程信息。 for ((n=0;n<${#arrayExtract[@]};n++)) do #判断数组内进程读取的checkpoint文件前置名称是否和当前的进程读取的文件前置名称一样 if [ "${trailePre}" == `echo ${arrayExtract[${n}]} | awk '{print $2}'` ];then #如果2个进程的前置名称一样,则比对checkpoint文件的seq号,把相对seq号小的进程保留在数组内 if [ ${traileSeq} -le `echo ${arrayExtract[${n}]} | awk '{print $3}'` ];then arrayExtract[${n}]=$i" "${trailePre}" "${traileSeq} #根据数组下标,替换seq小的进程信息 isupdate=1 #修改变量,表示在数组内替换过内容 #arrayReplicatNum=$[${arrayReplicatNum}-1] break fi fi done if [ ${isupdate} -eq 0 ];then #如果数组内没有替换过内容,则把当前进程信息添加到数组内,否则修改变量值为0,表示没有替换过数组内容。 arrayExtract[${arrayExtractNum}]=$i" "${trailePre}" "${traileSeq} arrayExtractNum=$[${arrayExtractNum}+1] else isupdate=0 fi fi #arrayExtractNum=$[${arrayExtractNum}+1] donefor ((i=0;i<${#arrayExtract[@]};i++))do echo "####################### Extract: `echo "${arrayExtract[${i}]}" | awk '{print $1}'` ########################" >> ${rmlog} #获取当前进程的trail文件前置名称 trailePre=`echo "${arrayExtract[${i}]}" | awk '{print $2}'` for j in $(ls `echo "${arrayExtract[${i}]}" | awk '{print $2"*"}'`) #根据trail文件的前置名称ls do #获取文件的序列号,如果为0号文件,可能没有文件号需要重新复制文件序列号。 existsfilenum=`echo $j | sed -e 's#'"${trailePre}"'##g'` #循环去掉文件前缀后的数字,可能会006302,所以要把前面的00去掉。判断第一个非零的数字的位置 for((pos=0;pos<${#existsfilenum};pos++)) do if [ ${existsfilenum:$pos:1} -ne 0 ];then break fi done varlen=$[ ${#existsfilenum} - ${pos} ] #获取非零数字到字符串结尾的长度 existsfilenum=`echo ${existsfilenum:$pos:${varlen}}` #截取字符串,获取真正的文件的seq号 if [ -z ${existsfilenum} ];then existsfilenum=0 fi #判断当前文件是否小于指定seq号,如果小于则删除文件 extractProcNum=`echo "${arrayExtract[${i}]}" | awk '{print $3}'` if [ $[ ${extractProcNum} - ${keepfiles} ] -gt ${existsfilenum} ];then echo $j >> ${rmlog} #echo "rm -f ${j}" | bash fi done #echo ${arrayExtract[${i}]}done#循环判断指定投递进程对应的抽取进程的抽取trail文件}###################################################################获取所有replicat进程信息##################################################################getOGGReplicatInfo(){ ${ComGgsci}<<-RAY info replicat * RAY}###################################################################函数:删除复制进程指定保留数量前的trail文件 ##################################################################deleteReplicatfile(){ arrayReplicat=() arrayReplicatNum=0 isupdate=0 echo "################################# delete Replicat tail #################################" >> ${rmlog} #获取复制进程的名称和正在读取的checkpoint文件名称,以逗号分隔 for i in `getOGGReplicatInfo | egrep -v "GGSCI|^$" | sed -n '/REPLICAT/,$p' | awk -v rname="" '{if($1=="REPLICAT") {rname=$2;mynum=1}else if(($1$2$3=="LogReadCheckpoint")){print rname","$5}}'` do #获取当前复制进程的trail文件的前置名称 replicatFilePre=`echo $i | awk -F ',' '{print $2}' | awk -F '/' -v prefile="" '{for(i=1;i<=NF;i++) {if(i==1){continue} else if(i==NF) {prefile=prefile"/"substr($i,1,2)} else {prefile=prefile"/"$i}}}END{print prefile}' | sed 's#\./dirdat#'"${ExtractTrailDir}"'#g'` #获取当前进程正在读取的trail文件的seq号 #replicatSeq=`echo $i | awk -F ',' '{print $2}' | awk -F ''"${replicatFilePre}"'' '{print $NF}' | sed 's#0##g'` replicatSeq=`echo $i | awk -F ',' '{print $2}' | awk -F ''"${replicatFilePre}"'' -v mynum=0 '{for(i=0;i> ${rmlog} replicatFilePre=`echo "${arrayReplicat[${i}]}" | awk '{print $2}'` for j in $(ls `echo "${arrayReplicat[${i}]}" | awk '{print $2"*"}'`) do #获取文件的seq号 existsfilenum=`echo $j | sed -e 's#'"${replicatFilePre}"'##g'` #循环去掉文件前缀后的数字,可能会006302,所以要把前面的00去掉。判断第一个非零的数字的位置 for((pos=0;pos<${#existsfilenum};pos++)) do if [ ${existsfilenum:$pos:1} -ne 0 ];then break fi done varlen=$[ ${#existsfilenum} - ${pos} ] #获取非零数字到字符串结尾的长度 existsfilenum=`echo ${existsfilenum:$pos:${varlen}}` #截取字符串,获取真正的文件的seq号 #如果文件的seq为0,重新复制seq为0 if [ -z ${existsfilenum} ];then existsfilenum=0 fi #判断当前的trail文件是否小于保留时间的条件 replicatProcNum=`echo "${arrayReplicat[${i}]}" | awk '{print $3}'` if [ $[ ${replicatProcNum} - ${keepfiles} ] -gt ${existsfilenum} ];then echo $j >> ${rmlog} #echo "rm -f ${j}" | bash fi donedone }help_fun(){ echo "Discription:" echo " This is a script to delete oracle goldengate trail files." echo "Parameters:" echo " -p specify a value for deleting action." echo " avalable value: extract/replicat/all" echo " -h to get help."}###################################################################脚本的执行入口,获取参数##################################################################if [ $# -eq 0 ];then echo "You must specify a right parameter." echo "You can use -h or -H to get help." exit 99fiwhile (($#>=1))do case `echo $1 | sed s/-//g | tr [a-z] [A-Z]` in H) help_fun #执行帮助函数 exit 0 ;; P) shift rmAction=$1 #获取-p参数的值 shift continue ;; *) echo "You must specify a right parameter." echo "You can use -h or -H to get help." exit 98 ;; esacdone###################################################################记录日志##################################################################if [ ! -f ${rmlog} ];then touch ${rmlog}fiecho ""echo "#################################`date +"%Y-%m-%d %H:%M:%S"`#################################" >> ${rmlog}###################################################################判断-p参数的值,执行删除函数##################################################################case `echo ${rmAction} | tr [a-z] [A-Z]` in EXTRACT) deleteExtractfile exit 0 ;; REPLICAT) deleteReplicatfile exit 0 ;; ALL) deleteExtractfile deleteReplicatfile exit 0 ;; *) echo "You must specify a valid value for -p." echo "You can use -h or -H to get help." exit 97 ;;esac 到此,相信大家对"怎么用shell脚本实现对OGG进程过期trail文件的删除处理"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
进程
文件
数组
信息
名称
内容
脚本
循环
一致
数字
第一次
处理
参数
序列
序列号
日志
正在
人间
位置
函数
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
科技互联网项目
中国 科技 互联网
奇酷互联网科技公司
鑫亿盛互联网科技
奇酷互联网络科技公司
互联网女皇 腾讯科技
广西互联网科技公司
狮子座互联网科技培训
华脉科技工业互联网产品
福建科技产业互联网发展
重庆互联网医院沙龙医盟信息科技
昭通互联网科技选哪家
宝灵互联网科技有限公司
互联网科技和信息
中国互联网公司排名锤子科技
互联网科技资金流入
神州科技互联网有限公司
长沙渺峰互联网科技有限公司
福仕德教育科技互联网
黑龙江互联网科技公司
互联网是不是新科技
智能科技公司是互联网公司吗
互联网金融与金融科技
伴你行互联网科技有限公司
互联网科技公司的市场部门
互联网还是高科技吗
版纳互联网科技选哪家
科技信息时代互联网发展
互联网科技对化妆品行业
银川新华互联网科技学校招聘