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

外层调用脚本:

  1. #!/bin/sh
  2. #--------------------------------------------------------------------
  3. # Fuction:调用脚本
  4. # Version: 1.0
  5. #--------------------------------------------------------------------
  6.  
  7. . ~/.profile
  8.  
  9. . /web/interface/common/FuncCommon.def
  10. #######################公共配置###############################################
  11. #当前时间 yyyymmdd
  12. CURDATE=`date +%Y%m%d%H%M%S`
  13. #执行文件路径
  14. BIN_PATH=~/interface
  15. #日志文件
  16. LOG_PATH=~/interface/log
  17. #配置文件路径
  18. INI_PATH=~/interface/ini/
  19. #每次每通道处理数量
  20. PER_NUM=
  21.  
  22. echo `date +%H\:%M\'%S\"` "脚本PERIODIC_CALL.sh开始..."
  23.  
  24. vacgwms=`ps -ef|grep -v grep|grep PERIODIC_CALL.sh |wc -l`
  25. if [ $vacgwms -gt ]
  26. then
  27. echo `date +%H\:%M\'%S\"` "上次PERIODIC_CALL.sh未结束..."
  28. exit
  29. fi
  30.  
  31. loop=
  32. while(($loop<))
  33. do
  34.  
  35. echo "通道:"${loop}"开始......"
  36. #.先判断lock文件是否存在
  37. cd ${INI_PATH}
  38. if [ -e ${loop}_*.lock ]
  39. then
  40. echo "通道锁文件:"${loop}.lock"仍然存在,上次存储执行未结束,下次调用再校验"
  41. loop=`expr $loop + `
  42. continue
  43.  
  44. else
  45. #创建锁文件
  46. LOCK_NAME=${loop}_${CURDATE}.lock
  47. touch ${LOCK_NAME}
  48. echo "通道锁文件:"${LOCK_NAME}"创建成功"
  49.  
  50. #.调用存储
  51. #nohup sh ${BIN_PATH}/CORE_EXEC.sh $loop $PER_NUM >> /dev/null >${LOG_PATH}/core.log &
  52. nohup sh ${BIN_PATH}/CORE_EXEC.sh $loop $PER_NUM >> ${LOG_PATH}/core.log >& &
  53. #nohup sh ${BIN_PATH}/CORE_EXEC.sh $loop $PER_NUM > /dev/null &
  54. fi
  55.  
  56. loop=`expr $loop + `
  57.  
  58. done;
  59.  
  60. wait
  61.  
  62. echo `date +%H\:%M\'%S\"` "脚本PERIODIC_CALL.sh结束..."

内层执行脚本:

  1. #!/bin/sh
  2. #--------------------------------------------------------------------
  3. # Fuction:执行存储脚本
  4. # Version: 1.0
  5. #--------------------------------------------------------------------
  6.  
  7. . ~/.profile
  8.  
  9. ORACLE_HOME=/oracle/product/10.2./db
  10. TNS_ADMIN=/ngbss/mddms/etc
  11. export TNS_ADMIN
  12. export ORACLE_HOME
  13. . /web/interface/common/FuncCommon.def
  14. #######################公共配置###############################################
  15. #配置文件路径
  16. INI_PATH=~/interface/ini/
  17. #营业库连接
  18. CONN=`/web/interface/passwd/pwd.sh CON_CC`
  19. #短信配置
  20. DEALDATE=`date +"%Y年%m月%d日%H时%M分"`
  21.  
  22. echo `date +%H\:%M\'%S\"` "脚本CORE_EXEC.sh开始...通道:"$1",单次捞取数量:"$2
  23. #1调用存储
  24.  
  25. RETINFO=`sqlplus -S $CONN << !
  26. set heading off
  27. set feedback off
  28. set pages
  29. set trimspool on
  30. set serverout off
  31. var V_RESULTCODE NUMBER;
  32. var V_RESULTERRINFO VARCHAR2();
  33. call PROC_PP($,$,:V_RESULTCODE, :V_RESULTERRINFO);
  34. select :V_RESULTCODE ||','|| :V_RESULTERRINFO from dual;
  35. EXIT ;
  36. !`
  37.  
  38. echo "存储过程返回信息:" $RETINFO
  39. #echo ${RETINFO##*,}
  40. RESULTCODE1=`echo $RETINFO|cut -c1`
  41. RESULTCODE2=`echo $RETINFO|cut -c1-`
  42. echo "RESULTCODE1:"$RESULTCODE1
  43. echo "RESULTCODE2:"$RESULTCODE2
  44.  
  45. if [ $RESULTCODE1 == ]
  46. then
  47. # 删除锁文件
  48. cd ${INI_PATH}
  49. if [ -e ${}_*.lock ]
  50. then
  51. rm ${}_*.lock
  52. echo 删除通道$1锁文件成功!
  53. else
  54. echo 未找到通道$1的锁文件
  55. fi
  56. elif [ $RESULTCODE2 == - ]
  57. then
  58. #存储过程报错 需要发短信通知
  59. msg="ss2gnum#${DEALDATE}停开2G:存储过程PROC_PP,通道${1}报错:${RETINFO}"
  60. echo $msg
  61. (
  62. sleep
  63. echo $msg
  64. sleep
  65. echo "quit"
  66. )| telnet ${REMOTE_IP} ${REMOTE_PORT}>./log/telnet_wls.log
  67. fi
  68.  
  69. echo `date +%H\:%M\'%S\"` "脚本CORE_EXEC.sh结束...通道:"$1",单次捞取数量:"$2

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

  1. linux的基本操作(shell 脚本的基础知识)

    shell 脚本的基础知识 日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员.目前很多单位在招聘linux系统管理员时,shell脚本 ...

  2. Linux命令行与Shell脚本编程大全

    快来参加<Linux命令行与Shell脚本编程大全>学习吧,提升技能,展示自我. 点击链接即可进入学习:https://s.imooc.com/WTmCO6H 课程亮点适合零基础读者,从零 ...

  3. linux 下RMAN备份shell脚本

    RMAN备份对于Oracle数据库的备份与恢复简单易用,成本低廉.对于使用非catalog方式而言,将RMAN脚本嵌入到shell脚本,然后再通过crontab来实现中小型数据库数据库备份无疑是首选. ...

  4. 在Linux下如何用Shell脚本读写XML?现有一个config.xml(转)

    在Linux下如何用Shell脚本读写XML?现有一个config.xml <?xml version="1.0" encoding="UTF-8"?&g ...

  5. 自学Linux命令行与Shell脚本之路

    自学Linux命令行与Shell脚本之路[第一回]:初识Linux   1.1 自学Linux Shell1.1-Linux初识 1.2 自学Linux Shell1.2-Linux目录结构 1.3  ...

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

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

  7. 《Linux命令行与shell脚本编程大全 第3版》创建实用的脚本---11

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:

  8. 《Linux命令行与shell脚本编程大全 第3版》高级Shell脚本编程---47

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:

  9. 《Linux命令行与shell脚本编程大全 第3版》Shell脚本编程基础---57

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:

随机推荐

  1. Dapper学习(一)之Execute和Query

    Dapper是一个用于.NET的简单的对象映射,并且在速度上有着轻ORM之王的称号. Dapper扩展IDbConnection,提供有用的扩展方法来查询数据库. 那么Dapper是怎样工作的呢? 总 ...

  2. (原创)使用C#开发高性能PLC上位机监控系统服务器应用程序

    PLC服务器监控系统的特点: 1·使用微软C#面向对象开发语言开发应用程序.2·使用了健壮性与性能良好的SUPER SOCKET服务器通信框架,实现自定义应用层通信协议,支持多台PC客户端访问服务器, ...

  3. vue自学笔记

      做前端也做了一段时间了,为了高薪,不能一直做网页不是~~,所以从今天开始整理vue的笔记 内容都是从网上搜集整合并且自己实践过了的,需要注意的点,也在后面标注了“注”   当然了,如果有什么问题的 ...

  4. 在javascript中如何实现使小数保留两位精度而整数结果原样输出

    Math.round(num*100)/100

  5. 尝试在Mac/iOS上使用tcmalloc库

    概述        TCMalloc 是 Google 开发的内存分配器,在不少项目中都有使用,例如在 Golang 中就使用了类似的算法进行内存分配.它具有现代化内存分配器的基本特征:对抗内存碎片. ...

  6. JavaWeb 使用Session实现一次性验证码

    表单 <form action="loginServlet" method="post"> 请输入验证码:<input type=" ...

  7. 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 ...

  8. 虚拟机配置静态ip

    参考地址  https://www.cnblogs.com/maowenqiang/articles/7727910.html TYPE=EthernetBOOTPROTO="static& ...

  9. lower_case_table_names和数据库在Linux和windows平台之间的相互迁移问题

    MySQL关于 lower_case_table_names 的文档 https://dev.mysql.com/doc/refman/5.7/en/identifier-case-sensitivi ...

  10. Leetcode——2. 两数相加

    难度: 中等 题目 You are given two non-empty linked lists representing two non-negative integers. The digit ...