【Linux脚本学习案例】shell脚本多通道并发执行存储过程

使用shell脚本开启多个子任务并发调用存储过程,存储过程按照通道处理数据,提高效率:

外层调用脚本:

#!/bin/sh
#--------------------------------------------------------------------
# Fuction:调用脚本
# Version: 1.0
#--------------------------------------------------------------------

. ~/.profile

. /web/interface/common/FuncCommon.def
#######################公共配置###############################################
#当前时间 yyyymmdd
CURDATE=`date +%Y%m%d%H%M%S`
#执行文件路径
BIN_PATH=~/interface
#日志文件
LOG_PATH=~/interface/log
#配置文件路径
INI_PATH=~/interface/ini/
#每次每通道处理数量
PER_NUM=500000

echo `date +%H\:%M\‘%S\"` "脚本PERIODIC_CALL.sh开始..."

vacgwms=`ps -ef|grep -v grep|grep PERIODIC_CALL.sh |wc -l`
if [ $vacgwms -gt 1 ]
then
echo `date +%H\:%M\‘%S\"` "上次PERIODIC_CALL.sh未结束..."
exit 0
fi

loop=0
while(($loop<50))
do

echo "通道:"${loop}"开始......"
#1.先判断lock文件是否存在
cd ${INI_PATH}
if [ -e ${loop}_*.lock ]
then
echo "通道锁文件:"${loop}.lock"仍然存在,上次存储执行未结束,下次调用再校验"
loop=`expr $loop + 1`
continue

else
#创建锁文件
LOCK_NAME=${loop}_${CURDATE}.lock
touch ${LOCK_NAME}
echo "通道锁文件:"${LOCK_NAME}"创建成功"

#2.调用存储
#nohup sh ${BIN_PATH}/CORE_EXEC.sh $loop $PER_NUM >> /dev/null 2>${LOG_PATH}/core.log &
nohup sh ${BIN_PATH}/CORE_EXEC.sh $loop $PER_NUM >> ${LOG_PATH}/core.log 2>&1 &
#nohup sh ${BIN_PATH}/CORE_EXEC.sh $loop $PER_NUM > /dev/null &
fi

loop=`expr $loop + 1`

done;

wait

echo `date +%H\:%M\‘%S\"` "脚本PERIODIC_CALL.sh结束..."

内层执行脚本:

#!/bin/sh
#--------------------------------------------------------------------
# Fuction:执行存储脚本
# Version: 1.0
#--------------------------------------------------------------------

. ~/.profile

ORACLE_HOME=/oracle/product/10.2.0/db
TNS_ADMIN=/ngbss/mddms/etc
export TNS_ADMIN
export ORACLE_HOME
. /web/interface/common/FuncCommon.def
#######################公共配置###############################################
#配置文件路径
INI_PATH=~/interface/ini/
#营业库连接
CONN=`/web/interface/passwd/pwd.sh CON_CC`
#短信配置
DEALDATE=`date +"%Y年%m月%d日%H时%M分"`

echo `date +%H\:%M\‘%S\"` "脚本CORE_EXEC.sh开始...通道:"$1",单次捞取数量:"$2
#1调用存储

RETINFO=`sqlplus -S $CONN << !
          set heading off
          set feedback off
          set pages 0
          set trimspool on
          set serverout off
          var V_RESULTCODE    NUMBER;
          var V_RESULTERRINFO VARCHAR2(500);
          call PROC_PP($1,$2,:V_RESULTCODE, :V_RESULTERRINFO);
          select :V_RESULTCODE ||‘,‘|| :V_RESULTERRINFO from dual;
       EXIT ;
       !`

echo "存储过程返回信息:" $RETINFO
#echo ${RETINFO##*,}
RESULTCODE1=`echo $RETINFO|cut -c1`
RESULTCODE2=`echo $RETINFO|cut -c1-2`
echo "RESULTCODE1:"$RESULTCODE1
echo "RESULTCODE2:"$RESULTCODE2

if [ $RESULTCODE1 == 0 ]
then
    #2 删除锁文件
  cd ${INI_PATH}
    if [ -e ${1}_*.lock ]
    then
        rm ${1}_*.lock
        echo 删除通道$1锁文件成功!
    else
        echo 未找到通道$1的锁文件
    fi
elif [ $RESULTCODE2 == -1 ]
then
  #存储过程报错 需要发短信通知
    msg="ss2gnum#${DEALDATE}停开2G:存储过程PROC_PP,通道${1}报错:${RETINFO}"
     echo $msg
  (
        sleep 1
        echo $msg
        sleep 1
        echo "quit"
    )| telnet ${REMOTE_IP} ${REMOTE_PORT}>./log/telnet_wls.log
fi

echo `date +%H\:%M\‘%S\"` "脚本CORE_EXEC.sh结束...通道:"$1",单次捞取数量:"$2

原文地址:https://www.cnblogs.com/cac2020/p/11577253.html

时间: 2024-11-08 02:25:31

【Linux脚本学习案例】shell脚本多通道并发执行存储过程的相关文章

&lt;&lt;linux命令行与shell脚本编程大全&gt;&gt;学习笔记(1)

一章初识linux shell 一.什么是linux 1.linux系统可大致划分为四部分: l Linux内核 l GNU工具组件 l 图形化桌面环境 l 应用软件 在linux系统里,这四部分中的每一部分都扮演着一个特别的角色,但如果将他们分开,每一部分都没太大的作用. 1)探究linux内核 Linux系统的核心是内核,内核控制着计算机系统上的所有硬件和软件,必要时分配硬件,有时需要执行软件. 内核基本负责以下四项主要功能: l 系统内存管理 l 软件程序管理 l 硬件设备管理 l 文件系

《Linux命令行与shell脚本编程大全》学习笔记(转)

第一部分:Linux命令行<Linux命令行与shell脚本编程大全> 第一章:初识Linux shell<Linux命令行与shell脚本编程大全> 第二章:走进shell<Linux命令行与shell脚本编程大全> 第三章:基本的bash shell命令<Linux命令行与shell脚本编程大全> 第四章:更多的bash shell命令<Linux命令行与shell脚本编程大全> 第五章:使用Linux环境变量<Linux命令行与she

Linux基础之-利用shell脚本实现自动监控系统服务

目的:监控集群内nginx及nfs服务运行是否正常,如任一服务异常,则发送邮件通知用户 条件:1. 主机及子机IP地址,hostname已确定: 2. 主机与子机能够免密通讯,即基于密匙通讯(相关命令:ssh-keygen;ssh-copy-id -i web1); 需要的文件:    1. python邮件发送工具: 2. nfc.sh监控脚本,监控nginx及nfs服务状态,并调用mail发送工具通知用户: 3. nfc-install.sh监控部署脚本,运行在主机,为子机配置文件,执行命令

马哥教育视频学习笔记-shell脚本完成磁盘分区格式化

马哥教育视频学习笔记-shell脚本完成磁盘分区格式化-http://edu.51cto.com/lesson/id-28201.html 以下是脚本内容,内容比较简单,不做详解 在Linux上准备一块空闲的磁盘即可,如何分区可以在脚本内改下 #!/bin/bash # echo "Initial a disk..." echo -e "\033[31mWarning: \033[0m " #开始的说明信息,其中Warning以红色字体显示 fdisk -l 2&g

linux 下RMAN备份shell脚本

RMAN备份对于Oracle数据库的备份与恢复简单易用,成本低廉.对于使用非catalog方式而言,将RMAN脚本嵌入到shell脚本,然后再通过crontab来实现中小型数据库数据库备份无疑是首选.本文提供了一个简单易用的基于linux shell下的RMAN备份脚本供参考.大家可根据自己的需要进行适当调整. RMAN备份相关方面的知识较多,可以参考:    RMAN 概述及其体系结构    RMAN 配置.监控与管理    RMAN 备份详解    RMAN 还原与恢复    RMAN ca

【持续更新中】Linux命令行与Shell脚本编程大全(第3版)读书笔记12-20章

<Linux命令行与Shell脚本编程大全(第3版)>读书笔记 第十二章 使用结构化命令 根据条件使脚本跳过某些命令,这样的命令称为结构化命令(structured command).结构化命令允许改变程序执行的顺序. If-then语句: If command Then Commands Fi 如果if后的command执行退出码是0(也就是执行成功了),then后面的语句就会被执行. 也可以写成: If command; then Commands Fi 注意了,if后的command结果

《Linux命令行与Shell脚本编程大全第2版.布卢姆》pdf

下载地址:网盘下载 内容简介  · · · · · · 本书是一本关于Linux 命令行与shell 脚本编程的全面教程.全书分为四部分:第一部分介绍Linuxshell 命令行:第二部分介绍shell 脚本编程基础:第三部分深入探讨shell 脚本编程的高级内容:第四部分介绍如何在现实环境中使用shell 脚本.本书不仅涵盖了详尽的动手教程和现实世界中的实用信息,还提供了与所学内容相关的参考信息和背景资料. 本书内容全面,语言简练,示例丰富,适合于linux 系统管理员及Linux 爱好者阅读

shell脚本编程学习笔记-shell脚本编程基础介绍

一. Shell脚本介绍及第一个规范shell脚本说明 1.1 shell脚本简介 1.1.1 shell是什么? shell是一个命令解释器它在操作系统的最外层负责直接与用户对话把用户的输入解释给操作系统并处理各种各样的操作系统的输入结果输出到屏幕返回给用户,这种对话可以是交互是的(从键盘输入命令可以立即得到shell的回应)或非交互(脚本的方式). 下图中×××的部分就是shell处于操作系统的位置. 1.1.2什么是shell脚本 当linux命令或语句不在命令行下执行(严格的说命令行执行

Linux命令行与shell脚本编程大全.第3版(文字版) 超清文字-非扫描版 [免积分、免登录]

此处免费下载,无需账号,无需登录,无需积分.收集自互联网,侵权通知删除. 点击下载:Linux命令行与shell脚本编程大全.第3版 (大小:约22M) 原文地址:https://www.cnblogs.com/pluse/p/9408724.html