【问题标题】:How to execute bash/shell script in Linux from an Oracle DBMS_Scheduler?如何从 Oracle DBMS_Scheduler 在 Linux 中执行 bash/shell 脚本?
【发布时间】:2019-01-15 19:19:20
【问题描述】:

我有一个 Linux Oracle 服务器。数据库正在使用自定义存储过程生成 CSV 文件,现在位于此过程的末尾。我想在 linux 中执行一个 bash/shell 脚本来将此文件推送到 Amazon S3 Bucket。

我在尝试在 oracle 中安排进程时遇到错误:

EXTERNAL_LOG_ID="job_2369137_852690", ORA-27369: EXECUTABLE 类型的作业失败,退出代码:参数列表太长

使用 DBM_SCHEDULER 创建 JOB 类型 Sript、External

#!/bin/bash
echo hello world

DBMS_SCHEDULER.CREATE_JOB (
job_name => '"ODSMGR"."TEST_JOB"',
job_type => 'EXTERNAL_SCRIPT',
job_action => '#!/bin/bash
echo hello world',
number_of_arguments => 0,
start_date => NULL,
repeat_interval => NULL,
end_date => NULL,
enabled => FALSE,
auto_drop => FALSE,
comments => '');

【问题讨论】:

  • 现在我收到此错误:ORA-27369:EXECUTABLE 类型的作业失败,退出代码:7

标签: bash oracle plsql execute


【解决方案1】:

您使用的DBMS_SCHEDULER.CREATE_JOB 的参数不正确。您最好按照这些标准步骤来运行程序。

首先创建一个具有适当名称的程序并定义要运行的程序。在下面的示例中,我直接运行bash 命令,您可以将它们放入具有相关权限的单独shell 脚本中,并将其名称添加到program_action

BEGIN
DBMS_SCHEDULER.CREATE_PROGRAM (
 program_name=> 'COPY_PROGRAM',
 program_type=> 'EXECUTABLE',
 program_action  => '/bin/bash -c "echo hello world"',
 enabled=> TRUE,
 comments=> 'Push files to Amazon S3 Bucket.'
);
END;
/

然后,使用该程序创建作业。

BEGIN
DBMS_SCHEDULER.CREATE_JOB (
   job_name     => 'TEST_JOB',
   program_name => 'COPY_PROGRAM',
   start_date => NULL,
   repeat_interval => NULL,
   end_date => NULL,
   enabled => FALSE,
   auto_drop => FALSE,
   comments => '');
END;
/

更多详情请参考this链接。

【讨论】:

  • 您好,感谢您的回答。我和你的例子一样,我得到这个错误代码:“ORA-27369:EXECUTABLE 类型的作业失败,退出代码:没有这样的文件或目录”
  • 凭证呢?这是亚马逊云中的 linux 服务器,我们没有使用密码,我需要发送登录凭据吗?
  • @JorgeFlores :检查您的 bash 路径,它应该在其他地方(不在 /bin/bash 中)。关于你关于亚马逊云的问题,我不确定,这超出了这个问题的范围。你应该考虑问一个新的。
  • 感谢您的回答。
猜你喜欢
  • 2011-04-13
  • 1970-01-01
  • 1970-01-01
  • 2014-03-26
  • 2017-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多