我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么用shell脚本实现对OGG进程过期trail文件的删除处理

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么用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}<<-RAYinfo extract *RAY}###################################################################获取进程信息checkpoint信息##################################################################getOGGExtractShowch(){${ComGgsci}<<-RAYinfo $1 showchRAY}###################################################################函数:删除投递进程指定保留数量前的trail文件 ##################################################################deleteExtractfile(){echo "################################# delete Extract tail #################################" >> ${rmlog}###################################################################按照指定进程名称,删除指定保留数量前的日志##################################################################arrayExtract=()arrayExtractNum=0isupdate=0for 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 ];thenarrayExtract[${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}'` ];thenarrayExtract[${n}]=$i" "${trailePre}" "${traileSeq}  #根据数组下标,替换seq小的进程信息isupdate=1                #修改变量,表示在数组内替换过内容#arrayReplicatNum=$[${arrayReplicatNum}-1]breakfifidoneif [ ${isupdate} -eq 0 ];then  #如果数组内没有替换过内容,则把当前进程信息添加到数组内,否则修改变量值为0,表示没有替换过数组内容。arrayExtract[${arrayExtractNum}]=$i" "${trailePre}" "${traileSeq}arrayExtractNum=$[${arrayExtractNum}+1]elseisupdate=0fifi#arrayExtractNum=$[${arrayExtractNum}+1]donefor ((i=0;i<${#arrayExtract[@]};i++))doecho "####################### 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文件的前置名称lsdo#获取文件的序列号,如果为0号文件,可能没有文件号需要重新复制文件序列号。existsfilenum=`echo $j | sed -e 's#'"${trailePre}"'##g'`#循环去掉文件前缀后的数字,可能会006302,所以要把前面的00去掉。判断第一个非零的数字的位置for((pos=0;pos<${#existsfilenum};pos++))doif [ ${existsfilenum:$pos:1} -ne 0 ];then                breakfidonevarlen=$[ ${#existsfilenum} - ${pos} ]       #获取非零数字到字符串结尾的长度existsfilenum=`echo ${existsfilenum:$pos:${varlen}}`    #截取字符串,获取真正的文件的seq号if [ -z ${existsfilenum} ];thenexistsfilenum=0fi#判断当前文件是否小于指定seq号,如果小于则删除文件extractProcNum=`echo "${arrayExtract[${i}]}" | awk '{print $3}'`if [ $[ ${extractProcNum} - ${keepfiles} ] -gt ${existsfilenum} ];thenecho $j >> ${rmlog}#echo "rm -f ${j}" | bashfidone#echo ${arrayExtract[${i}]}done#循环判断指定投递进程对应的抽取进程的抽取trail文件}###################################################################获取所有replicat进程信息##################################################################getOGGReplicatInfo(){${ComGgsci}<<-RAYinfo replicat *RAY}###################################################################函数:删除复制进程指定保留数量前的trail文件 ##################################################################deleteReplicatfile(){arrayReplicat=()arrayReplicatNum=0isupdate=0echo "################################# 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<length($NF);i++) if(substr($NF,i,1)!=0) {mynum=i;break}}END{print substr($NF,mynum)}'`#获取当前存在的源端投递过来的trail文件#判断是否为第一次,如果为第一次表示数组内没有存放任何replicat进程信息。需要给数组内赋值if [ ${arrayReplicatNum} -eq 0 ];thenarrayReplicat[${arrayReplicatNum}]=`echo $i | awk -F ',' '{print $1}'`" "${replicatFilePre}" "${replicatSeq}arrayReplicatNum=$[${arrayReplicatNum}+1]else#循环数组,判断数组内的replicat进程读取的trail文件是否和当前的replicat进程读取的文件一致。如果一致,比对2个进程读取人间的seq号。如果当前进程读取的seq号比数组内进程读取的seq号小,则把数组内的比对的进程信息替换为当前进程信息。for ((n=0;n<${#arrayReplicat[@]};n++))do#判断数组内进程读取的checkpoint文件前置名称是否和当前的进程读取的文件前置名称一样if [ "${replicatFilePre}" == `echo ${arrayReplicat[${n}]} | awk '{print $2}'` ];then#如果2个进程的前置名称一样,则比对checkpoint文件的seq号,把相对seq号小的进程保留在数组内if [ ${replicatSeq} -le `echo ${arrayReplicat[${n}]} | awk '{print $3}'` ];thenarrayReplicat[${n}]=`echo $i | awk -F ',' '{print $1}'`" "${replicatFilePre}" "${replicatSeq}isupdate=1                      #修改变量,表示在数组内替换过内容breakfifidoneif [ ${isupdate} -eq 0 ];thenarrayReplicat[${arrayReplicatNum}]=`echo $i | awk -F ',' '{print $1}'`" "${replicatFilePre}" "${replicatSeq}arrayReplicatNum=$[${arrayReplicatNum}+1]elseisupdate=0fifi#arrayReplicatNum=$[${arrayReplicatNum}+1]donefor ((i=0;i<${#arrayReplicat[@]};i++))doecho "####################### Replicat: $(echo ${arrayReplicat[${i}]} | awk '{print $1}') ########################" >> ${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++))doif [ ${existsfilenum:$pos:1} -ne 0 ];then                breakfidonevarlen=$[ ${#existsfilenum} - ${pos} ]       #获取非零数字到字符串结尾的长度existsfilenum=`echo ${existsfilenum:$pos:${varlen}}`    #截取字符串,获取真正的文件的seq号#如果文件的seq为0,重新复制seq为0if [ -z ${existsfilenum} ];thenexistsfilenum=0fi#判断当前的trail文件是否小于保留时间的条件replicatProcNum=`echo "${arrayReplicat[${i}]}" | awk '{print $3}'`if [ $[ ${replicatProcNum} - ${keepfiles} ] -gt ${existsfilenum} ];thenecho $j >> ${rmlog}#echo "rm -f ${j}" | bashfidonedone}help_fun(){echo "Discription:"echo "This is a script to delete oracle goldengate trail files."echo "Parameters:"echo "-pspecify a value for deleting action."echo "avalable value: extract/replicat/all"echo "-hto get help."}###################################################################脚本的执行入口,获取参数##################################################################if [ $# -eq 0 ];thenecho "You must specify a right parameter."echo "You can use -h or -H to get help."exit 99fiwhile (($#>=1))docase `echo $1 | sed s/-//g | tr [a-z] [A-Z]` inH)help_fun          #执行帮助函数exit 0;;P)shiftrmAction=$1       #获取-p参数的值shiftcontinue;;*)echo "You must specify a right parameter."echo "You can use -h or -H to get help."exit 98;;esacdone###################################################################记录日志##################################################################if [ ! -f ${rmlog} ];thentouch ${rmlog}fiecho ""echo "#################################`date +"%Y-%m-%d %H:%M:%S"`#################################" >> ${rmlog}###################################################################判断-p参数的值,执行删除函数##################################################################case `echo ${rmAction} | tr [a-z] [A-Z]` inEXTRACT)deleteExtractfile          exit 0;;REPLICAT)deleteReplicatfileexit 0;;ALL)deleteExtractfiledeleteReplicatfileexit 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文件的删除处理”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么用shell脚本实现对OGG进程过期trail文件的删除处理

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么用shell脚本实现对OGG进程过期trail文件的删除处理

本篇内容主要讲解“怎么用shell脚本实现对OGG进程过期trail文件的删除处理”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用shell脚本实现对OGG进程过期trail文件的删除处理”
2023-06-04

怎么用批处理实现的结束进程并删除文件

这篇文章给大家分享的是有关怎么用批处理实现的结束进程并删除文件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。代码如下:@echo off title=结束进程并删除文件[Null] echo.请输入进程名: se
2023-06-08

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录