通过远程服务器上的ORACLE在当地执行SHELL脚本

4 篇文章 0 订阅
--先在oracle中创建scheduler用于执行shell
begin
  DBMS_SCHEDULER.create_job(job_name => 'getTycData', job_type => 'EXECUTABLE', job_action => '/home/spider/opt/main.sh');
end;

--执行方法一
--PL/SQL developer
begin
  DBMS_SCHEDULER.run_job('getTYCData');
end;
--sqlplus命令行
exec DBMS_SCHEDULER.run_job('getTYCData');

--执行方法二,使用存储过程,适用于informatica
--*****注意job名和存储过程名不可以相同,否则会报已有对象错误!!*****
create or replace  procedure pcapp.getData
as
begin
DBMS_SCHEDULER.run_job('getTYCData');
end;
--在infa的post sql中使用即可调用远程服务器上的脚本
call pcapp.getData();

--删除scheduler
begin
  DBMS_SCHEDULER.drop_job('getTYCData');
end;

select * from all_scheduler_jobs ;

说明:===========================================================

需要若干权限(execute、create external table等)

注意job名和存储过程名不可以相同,否则会报已有对象错误!!

设置oracle执行脚本的用户,无需重启oracle(默认为nobody,不行)

vim /u01/app/oracle/product/11.2.0/dbhome_1/rdbms/admin/externaljob.ora

run_user = oracle
run_group = oinstall

oracle用户对待执行的sh文件的各级路径和sh本身都需要有x权限(有时候全部权限都授好后仍然报错:"操作不被允许",可能是脚本运行时出错,报错信息不一定准,需要在shell

脚本中将日志输出到外部文件,在文件中查看正确的报错信息)

sh文件开头要加上这个:    #!/bin/bash

sh中执行python时要加上类似下面的环境变量

#!/bin/bash

#下面这一句非常重要,防止oracle执行python脚本时报字符集错误
export PYTHONIOENCODING=utf-8
export LC_ALL=en_US.utf-8
export LANG=en_US.utf-8

export PATH=/home/gjspider/anaconda3/bin:$PATH

export ORACLE_BASE=/oracle
export ORACLE_HOME=$ORACLE_BASE/instantclient_12_2
export LD_LIBRARY_PATH=$ORACLE_HOME
export PATH=$PATH:$ORACLE_HOME:$HOME/bin
export TNS_ADMIN=/oracle/instantclient_12_2/network/admin
python /home/gjspider/main.py  > /home/gjspider/logs/`date '+%Y-%m-%d-%H-%M-%S'`.log  2>&1

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值