真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

怎么用shell腳本實現(xiàn)對OGG進程過期trail文件的刪除處理-創(chuàng)新互聯(lián)

本篇內(nèi)容主要講解“怎么用shell腳本實現(xiàn)對OGG進程過期trail文件的刪除處理”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“怎么用shell腳本實現(xiàn)對OGG進程過期trail文件的刪除處理”吧!

在鎮(zhèn)雄等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站設(shè)計、成都做網(wǎng)站、外貿(mào)網(wǎng)站建設(shè) 網(wǎng)站設(shè)計制作按需定制設(shè)計,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計,成都全網(wǎng)營銷,外貿(mào)營銷網(wǎng)站建設(shè),鎮(zhèn)雄網(wǎng)站建設(shè)費用合理。
#!/bin/bash
#by raysuen
#v02
ComGgsci=/u01/ggs/ggsci         #指定ggsci的絕對路徑
ExtractTrailDir=/u01/ggs/dirdat        #指定trail文件的目錄
keepfiles=1                     #指定保留文件的數(shù)量
rmlog=/u01/scripts/ray/RmOGGTrail.log    #指定刪除腳本的日志,記錄刪除那些trail文件
##################################################################
#獲取所有extract 進程信息
##################################################################
getOGGExtractInfo(){
	${ComGgsci}<<-RAY
		info extract *
	RAY
}
##################################################################
#獲取進程信息checkpoint信息
##################################################################
getOGGExtractShowch(){
	${ComGgsci}<<-RAY
		info $1 showch
	RAY
}
##################################################################
#函數(shù):刪除投遞進程指定保留數(shù)量前的trail文件 
##################################################################
deleteExtractfile(){
	echo "################################# delete Extract tail #################################" >> ${rmlog}
	##################################################################
	#按照指定進程名稱,刪除指定保留數(shù)量前的日志
	##################################################################
	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
		#獲取指定投遞進程的當(dāng)前讀取的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'`
		#獲取當(dāng)前指定投遞進程正在讀取的trail文件的序列號
		traileSeq=`echo "${extractInfo}" | awk '{if($1=="Sequence") print $3}'`
		
		#判斷是否為第一次,如果為第一次表示數(shù)組內(nèi)沒有存放任何extract進程信息。需要給數(shù)組內(nèi)賦值
		if [ ${arrayExtractNum} -eq 0 ];then
			arrayExtract[${arrayExtractNum}]=$i" "${trailePre}" "${traileSeq}
			arrayExtractNum=$[${arrayExtractNum}+1]
		else
			#循環(huán)數(shù)組,判斷數(shù)組內(nèi)的extract進程讀取的trail文件是否和當(dāng)前的extract進程讀取的文件一致。如果一致,比對2個進程讀取人間的seq號。如果當(dāng)前進程讀取的seq號比數(shù)組內(nèi)進程讀取的seq號小,則把數(shù)組內(nèi)的比對的進程信息替換為當(dāng)前進程信息。
			for ((n=0;n<${#arrayExtract[@]};n++))
			do
				#判斷數(shù)組內(nèi)進程讀取的checkpoint文件前置名稱是否和當(dāng)前的進程讀取的文件前置名稱一樣
				if [ "${trailePre}" == `echo ${arrayExtract[${n}]} | awk '{print $2}'` ];then
					#如果2個進程的前置名稱一樣,則比對checkpoint文件的seq號,把相對seq號小的進程保留在數(shù)組內(nèi)
					if [ ${traileSeq} -le `echo ${arrayExtract[${n}]} | awk '{print $3}'` ];then
						arrayExtract[${n}]=$i" "${trailePre}" "${traileSeq}  #根據(jù)數(shù)組下標,替換seq小的進程信息
						isupdate=1                #修改變量,表示在數(shù)組內(nèi)替換過內(nèi)容
						#arrayReplicatNum=$[${arrayReplicatNum}-1]
						break
					fi
					
				fi
			done
			if [ ${isupdate} -eq 0 ];then  #如果數(shù)組內(nèi)沒有替換過內(nèi)容,則把當(dāng)前進程信息添加到數(shù)組內(nèi),否則修改變量值為0,表示沒有替換過數(shù)組內(nèi)容。
				arrayExtract[${arrayExtractNum}]=$i" "${trailePre}" "${traileSeq}
				arrayExtractNum=$[${arrayExtractNum}+1]
			else
				isupdate=0
			fi
			
		fi
		
		#arrayExtractNum=$[${arrayExtractNum}+1]
		
		
	done
for ((i=0;i<${#arrayExtract[@]};i++))
do
	echo "####################### Extract: `echo "${arrayExtract[${i}]}" | awk '{print $1}'` ########################" >> ${rmlog}
	#獲取當(dāng)前進程的trail文件前置名稱
	trailePre=`echo "${arrayExtract[${i}]}" | awk '{print $2}'`
	for j in $(ls `echo "${arrayExtract[${i}]}" | awk '{print $2"*"}'`)   #根據(jù)trail文件的前置名稱ls
	do
		
		#獲取文件的序列號,如果為0號文件,可能沒有文件號需要重新復(fù)制文件序列號。
		existsfilenum=`echo $j | sed -e 's#'"${trailePre}"'##g'`
		#循環(huán)去掉文件前綴后的數(shù)字,可能會006302,所以要把前面的00去掉。判斷第一個非零的數(shù)字的位置
		for((pos=0;pos<${#existsfilenum};pos++))
		do
			if [ ${existsfilenum:$pos:1} -ne 0 ];then
                break
			fi
		done
		varlen=$[ ${#existsfilenum} - ${pos} ]       #獲取非零數(shù)字到字符串結(jié)尾的長度
		existsfilenum=`echo ${existsfilenum:$pos:${varlen}}`    #截取字符串,獲取真正的文件的seq號
		if [ -z ${existsfilenum} ];then
			existsfilenum=0
		fi
		#判斷當(dāng)前文件是否小于指定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
#循環(huán)判斷指定投遞進程對應(yīng)的抽取進程的抽取trail文件
}
##################################################################
#獲取所有replicat進程信息
##################################################################
getOGGReplicatInfo(){
	${ComGgsci}<<-RAY
		info replicat *
	RAY
}
##################################################################
#函數(shù):刪除復(fù)制進程指定保留數(shù)量前的trail文件 
##################################################################
deleteReplicatfile(){
	
	arrayReplicat=()
	arrayReplicatNum=0
	isupdate=0
	echo "################################# delete Replicat tail #################################" >> ${rmlog}
	#獲取復(fù)制進程的名稱和正在讀取的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
		
		#獲取當(dāng)前復(fù)制進程的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'`
		#獲取當(dāng)前進程正在讀取的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'`
		#循環(huán)去掉文件前綴后的數(shù)字,可能會006302,所以要把前面的00去掉。判斷第一個非零的數(shù)字的位置
		for((pos=0;pos<${#existsfilenum};pos++))
		do
			if [ ${existsfilenum:$pos:1} -ne 0 ];then
                break
			fi
		done
		varlen=$[ ${#existsfilenum} - ${pos} ]       #獲取非零數(shù)字到字符串結(jié)尾的長度
		existsfilenum=`echo ${existsfilenum:$pos:${varlen}}`    #截取字符串,獲取真正的文件的seq號
		#如果文件的seq為0,重新復(fù)制seq為0
		if [ -z ${existsfilenum} ];then
			existsfilenum=0
		fi
		#判斷當(dāng)前的trail文件是否小于保留時間的條件
		replicatProcNum=`echo "${arrayReplicat[${i}]}" | awk '{print $3}'`
		if [ $[ ${replicatProcNum} - ${keepfiles} ] -gt ${existsfilenum} ];then
			echo $j >> ${rmlog}
			#echo "rm -f ${j}" | bash
		fi
	done
done
	
}
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."
}
##################################################################
#腳本的執(zhí)行入口,獲取參數(shù)
##################################################################
if [ $# -eq 0 ];then
	echo "You must specify a right parameter."
	echo "You can use -h or -H to get help."
	exit 99
fi
while (($#>=1))
do
	case `echo $1 | sed s/-//g | tr [a-z] [A-Z]` in
		H)
			help_fun          #執(zhí)行幫助函數(shù)
			exit 0
		;;
		P)
			shift
			rmAction=$1       #獲取-p參數(shù)的值
			shift
			continue
		;;
		*)
			echo "You must specify a right parameter."
			echo "You can use -h or -H to get help."
			exit 98
		;;
	esac
done
##################################################################
#記錄日志
##################################################################
if [ ! -f ${rmlog} ];then
	touch ${rmlog}
fi
echo ""
echo "#################################`date +"%Y-%m-%d %H:%M:%S"`#################################" >> ${rmlog}
##################################################################
#判斷-p參數(shù)的值,執(zhí)行刪除函數(shù)
##################################################################
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腳本實現(xiàn)對OGG進程過期trail文件的刪除處理”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!


文章題目:怎么用shell腳本實現(xiàn)對OGG進程過期trail文件的刪除處理-創(chuàng)新互聯(lián)
文章分享:http://weahome.cn/article/josip.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部