【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=
- echo `date +%H\:%M\'%S\"` "脚本PERIODIC_CALL.sh开始..."
- vacgwms=`ps -ef|grep -v grep|grep PERIODIC_CALL.sh |wc -l`
- if [ $vacgwms -gt ]
- then
- echo `date +%H\:%M\'%S\"` "上次PERIODIC_CALL.sh未结束..."
- exit
- fi
- loop=
- while(($loop<))
- do
- echo "通道:"${loop}"开始......"
- #.先判断lock文件是否存在
- cd ${INI_PATH}
- if [ -e ${loop}_*.lock ]
- then
- echo "通道锁文件:"${loop}.lock"仍然存在,上次存储执行未结束,下次调用再校验"
- loop=`expr $loop + `
- continue
- else
- #创建锁文件
- LOCK_NAME=${loop}_${CURDATE}.lock
- touch ${LOCK_NAME}
- echo "通道锁文件:"${LOCK_NAME}"创建成功"
- #.调用存储
- #nohup sh ${BIN_PATH}/CORE_EXEC.sh $loop $PER_NUM >> /dev/null >${LOG_PATH}/core.log &
- nohup sh ${BIN_PATH}/CORE_EXEC.sh $loop $PER_NUM >> ${LOG_PATH}/core.log >& &
- #nohup sh ${BIN_PATH}/CORE_EXEC.sh $loop $PER_NUM > /dev/null &
- fi
- loop=`expr $loop + `
- done;
- wait
- echo `date +%H\:%M\'%S\"` "脚本PERIODIC_CALL.sh结束..."
内层执行脚本:
- #!/bin/sh
- #--------------------------------------------------------------------
- # Fuction:执行存储脚本
- # Version: 1.0
- #--------------------------------------------------------------------
- . ~/.profile
- ORACLE_HOME=/oracle/product/10.2./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
- set trimspool on
- set serverout off
- var V_RESULTCODE NUMBER;
- var V_RESULTERRINFO VARCHAR2();
- call PROC_PP($,$,: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-`
- echo "RESULTCODE1:"$RESULTCODE1
- echo "RESULTCODE2:"$RESULTCODE2
- if [ $RESULTCODE1 == ]
- then
- # 删除锁文件
- cd ${INI_PATH}
- if [ -e ${}_*.lock ]
- then
- rm ${}_*.lock
- echo 删除通道$1锁文件成功!
- else
- echo 未找到通道$1的锁文件
- fi
- elif [ $RESULTCODE2 == - ]
- then
- #存储过程报错 需要发短信通知
- msg="ss2gnum#${DEALDATE}停开2G:存储过程PROC_PP,通道${1}报错:${RETINFO}"
- echo $msg
- (
- sleep
- echo $msg
- sleep
- echo "quit"
- )| telnet ${REMOTE_IP} ${REMOTE_PORT}>./log/telnet_wls.log
- fi
- echo `date +%H\:%M\'%S\"` "脚本CORE_EXEC.sh结束...通道:"$1",单次捞取数量:"$2
【Linux脚本学习案例】shell脚本多通道并发执行存储过程的更多相关文章
- linux的基本操作(shell 脚本的基础知识)
shell 脚本的基础知识 日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员.目前很多单位在招聘linux系统管理员时,shell脚本 ...
- Linux命令行与Shell脚本编程大全
快来参加<Linux命令行与Shell脚本编程大全>学习吧,提升技能,展示自我. 点击链接即可进入学习:https://s.imooc.com/WTmCO6H 课程亮点适合零基础读者,从零 ...
- linux 下RMAN备份shell脚本
RMAN备份对于Oracle数据库的备份与恢复简单易用,成本低廉.对于使用非catalog方式而言,将RMAN脚本嵌入到shell脚本,然后再通过crontab来实现中小型数据库数据库备份无疑是首选. ...
- 在Linux下如何用Shell脚本读写XML?现有一个config.xml(转)
在Linux下如何用Shell脚本读写XML?现有一个config.xml <?xml version="1.0" encoding="UTF-8"?&g ...
- 自学Linux命令行与Shell脚本之路
自学Linux命令行与Shell脚本之路[第一回]:初识Linux 1.1 自学Linux Shell1.1-Linux初识 1.2 自学Linux Shell1.2-Linux目录结构 1.3 ...
- Linux命令行与shell脚本编程大全.第3版(文字版) 超清文字-非扫描版 [免积分、免登录]
此处免费下载,无需账号,无需登录,无需积分.收集自互联网,侵权通知删除. 点击下载:Linux命令行与shell脚本编程大全.第3版 (大小:约22M)
- 《Linux命令行与shell脚本编程大全 第3版》创建实用的脚本---11
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:
- 《Linux命令行与shell脚本编程大全 第3版》高级Shell脚本编程---47
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:
- 《Linux命令行与shell脚本编程大全 第3版》Shell脚本编程基础---57
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:
随机推荐
- Dapper学习(一)之Execute和Query
Dapper是一个用于.NET的简单的对象映射,并且在速度上有着轻ORM之王的称号. Dapper扩展IDbConnection,提供有用的扩展方法来查询数据库. 那么Dapper是怎样工作的呢? 总 ...
- (原创)使用C#开发高性能PLC上位机监控系统服务器应用程序
PLC服务器监控系统的特点: 1·使用微软C#面向对象开发语言开发应用程序.2·使用了健壮性与性能良好的SUPER SOCKET服务器通信框架,实现自定义应用层通信协议,支持多台PC客户端访问服务器, ...
- vue自学笔记
做前端也做了一段时间了,为了高薪,不能一直做网页不是~~,所以从今天开始整理vue的笔记 内容都是从网上搜集整合并且自己实践过了的,需要注意的点,也在后面标注了“注” 当然了,如果有什么问题的 ...
- 在javascript中如何实现使小数保留两位精度而整数结果原样输出
Math.round(num*100)/100
- 尝试在Mac/iOS上使用tcmalloc库
概述 TCMalloc 是 Google 开发的内存分配器,在不少项目中都有使用,例如在 Golang 中就使用了类似的算法进行内存分配.它具有现代化内存分配器的基本特征:对抗内存碎片. ...
- JavaWeb 使用Session实现一次性验证码
表单 <form action="loginServlet" method="post"> 请输入验证码:<input type=" ...
- How to prove that SAP CRM WebUI is a stateful application
I create an enhancement in this function module to print out current session id: As long as I do not ...
- 虚拟机配置静态ip
参考地址 https://www.cnblogs.com/maowenqiang/articles/7727910.html TYPE=EthernetBOOTPROTO="static& ...
- lower_case_table_names和数据库在Linux和windows平台之间的相互迁移问题
MySQL关于 lower_case_table_names 的文档 https://dev.mysql.com/doc/refman/5.7/en/identifier-case-sensitivi ...
- Leetcode——2. 两数相加
难度: 中等 题目 You are given two non-empty linked lists representing two non-negative integers. The digit ...