1.传递参数方式
1.1.创建sh脚本
vi execute_oracle_procedure.sh
source ~/.bash_profile
date
$ORACLE_HOME/bin/sqlplus -S monkey/monkey << eof
begin
$1;
COMMIT;
end;
/
exit;
eof
date
1.2.crontab写入排程
crontab -e
*/5 * * * * sh /Data/scripts/execute_oracle_procedure.sh monkey.test_procedure01 >> /Data/scripts/log/execute_oracle_procedure.log 2>&1;
2.自动生成SH脚本
2.1.使用存储过程生成sh脚本
/* Formatted on 2021/3/23 上午 11:00:43 (QP5 v5.163.1008.3004) */
DECLARE
v_string VARCHAR2 (4000);
v_name VARCHAR2 (200);
v_count NUMBER;
v_filename VARCHAR2 (200);
v_dir VARCHAR2 (200);
-----Note:plase replace v_dir v_string with right string
BEGIN
v_dir := '/Data/scripts/';
v_string := 'MONKEY.SP01 ,
MONKEY.SP02 ,';
WHILE INSTR (v_string, ',') > 0
LOOP
v_count := INSTR (v_string, ',');
v_name := TRIM (CHR (10) FROM TRIM (SUBSTR (v_string, 1, v_count - 1)));
v_filename := v_dir || REPLACE (v_name, '.', '_') || '.sh';
DBMS_OUTPUT.put_line (
'touch ' || v_dir || REPLACE (v_name, '.', '_') || '.sh');
DBMS_OUTPUT.put_line (
'echo ''' || 'source ~/.bash_profile'' >> ' || v_filename);
DBMS_OUTPUT.put_line ('echo ''' || 'date'' >> ' || v_filename);
DBMS_OUTPUT.put_line (
'echo '''
|| '$ORACLE_HOME/bin/sqlplus -S monkey/monkey. <<EOFarch1'' >> '
|| v_filename);
DBMS_OUTPUT.put_line ('echo ''' || 'begin'' >> ' || v_filename);
DBMS_OUTPUT.put_line ('echo ''' || v_name || ';'' >> ' || v_filename);
DBMS_OUTPUT.put_line ('echo ''' || ' COMMIT;'' >> ' || v_filename);
DBMS_OUTPUT.put_line ('echo ''' || 'end;'' >> ' || v_filename);
DBMS_OUTPUT.put_line ('echo ''' || ' /'' >> ' || v_filename);
DBMS_OUTPUT.put_line ('echo ''' || 'exit;'' >> ' || v_filename);
DBMS_OUTPUT.put_line ('echo ''' || 'EOFarch1'' >> ' || v_filename);
DBMS_OUTPUT.put_line ('echo ''' || 'date'' >> ' || v_filename);
v_string := SUBSTR (v_string, v_count + 1);
END LOOP;
END;
/
2.2.执行2.1生成的脚本
进入系统,执行2.1步生成的sh脚本,就会在对应的目录下生成对应存储过程的sh文件
2.3.crontab写入排程
3.脚本改进
vi execute_oracle_procedure.sh
source ~/.bash_profile
$ORACLE_HOME/bin/sqlplus -S monkey/monkey << eof >>/Data/scripts/log/${1//./_}.log
set heading off;
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
begin
$1;
COMMIT;
end;
/
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
exit;
eof
crontab -e
*/5 * * * * sh /Data/scripts/execute_oracle_procedure.sh monkey.test_procedure01
以上会自动在/Data/scripts/log里面生成对应procedure的日志。