shell脚本批量调度Oracle存储过程

本程序批量调度Oracle存储过程,支持定时调度任务,处理存储过程调度过程中的依赖关系。

1. run_prc.sh

#!/bin/bash
#author zhangbingkai
#2018.10.14

v_prc_call=$1
v_date=$2
shell_dir=$3
V_ORACLE_HOME=`cat $shell_dir/parameter.ini | grep ORACLE_HOME`
V_ORACLE_SID=`cat $shell_dir/parameter.ini | grep ORACLE_SID`
export ORACLE_HOME=${V_ORACLE_HOME:12}
export ORACLE_SID=${V_ORACLE_SID:11}
export PATH=$PATH:$ORACLE_HOME/bin
v_dblogin=`cat $shell_dir/parameter.ini | grep dblogin`
dblogin=${v_dblogin:8}
 status=`$ORACLE_HOME/bin/sqlplus -S $dblogin <> test.txt
  $ORACLE_HOME/bin/sqlplus -S $dblogin <

2.job_pre_prc.sh

#!/bin/bash
#author zhangbingkai
#2018.10.14

#判断前驱是否成功执行完成
prc_call=$1
v_date=$2
shell_dir=$3
V_ORACLE_HOME=`cat $shell_dir/parameter.ini | grep ORACLE_HOME`
V_ORACLE_SID=`cat $shell_dir/parameter.ini | grep ORACLE_SID`
export ORACLE_HOME=${V_ORACLE_HOME:12}
export ORACLE_SID=${V_ORACLE_SID:11}
export PATH=$PATH:$ORACLE_HOME/bin
v_dblogin=`cat $shell_dir/parameter.ini | grep dblogin`
dblogin=${v_dblogin:8}
pre_job_id=`$ORACLE_HOME/bin/sqlplus -S $dblogin <

3.job_main_prc.sh

#!/bin/bash
#author zhangbingkai
#2018.10.16
v_date=$1
shell_dir=$2
V_ORACLE_HOME=`cat $shell_dir/parameter.ini | grep ORACLE_HOME`
V_ORACLE_SID=`cat $shell_dir/parameter.ini | grep ORACLE_SID`
export ORACLE_HOME=${V_ORACLE_HOME:12}
export ORACLE_SID=${V_ORACLE_SID:11}
export PATH=$PATH:$ORACLE_HOME/bin
v_dblogin=`cat $shell_dir/parameter.ini | grep dblogin`
dblogin=${v_dblogin:8}
total_ini_err=1
  $ORACLE_HOME/bin/sqlplus -S $dblogin < 'SUC'; 
  exit
EOF`
done

4.parameter.ini

dblogin=test/password01@orcl
ORACLE_HOME=/home/oracle/app/oracle/product/12.2.0/dbhome_1
ORACLE_SID=orcl

5.readme

并行调度存储过程,需提前初始化job_prc_name表中的status(INI为初始化状态,RUN为正在执行状态,
SUC为执行成功的过程,ERR为执行失败的过程),message(初始化为NULL)字段。
修改parameter.ini配置信息,配置数据库的用户、密码、环境变量。
调用:nohup sh job_main_prc.sh 20180101 dir &

定时调用:必须写绝对路径
crontab -e
30 * * * * shell_dir=/home/oracle/run_shell_parallel; $shell_dir/job_main_prc.sh `date +\%Y\%m\%d` $shell_dir
***crontab command
分  时  日  月  周  命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令

 

你可能感兴趣的:(Oracle,Linux)