使用oracle PL / SQL SP在其他Linux服务器上运行Shell脚本

时间:2018-08-22 10:41:28

标签: linux oracle shell plsql dbms-scheduler

我想在调用存储过程时在Linux服务器上运行一个shell脚本。

如果脚本位于安装数据库的同一服务器上,例如“ Linux Server A”,则下面的代码就像一个超级字符一样工作。

数据库版本:Oracle Database 12c Linux版本:Red Hat Linux 7

begin
  dbms_scheduler.create_credential
  (
    credential_name => 'my_credential',
    username        => 'user',
    password        => 'pass'
  );
end;
/
create or replace procedure RunShell
as
begin
  dbms_scheduler.create_job
  (
    job_name             => 'shell_scripts_job',
    job_type             => 'executable',
    number_of_arguments  => 1,
    job_action           => '/usr/bin/sh',
    auto_drop            => true,
    credential_name      => 'my_credential'
  );
  dbms_scheduler.set_job_argument_value(job_name=>'shell_scripts_job', argument_position=>1, argument_value=>'/u01/Script.sh');
  dbms_scheduler.enable('shell_scripts_job');
  dbms_scheduler.run_job(job_name=>'shell_scripts_job');
END;
/
EXECUTE RunShell;

问题是,我的数据库安装在“ Linux Server A”上,而我要运行的shell脚本在“ Linux Server B”上。

此脚本执行一些必须在“ Linux Server B”上完成的操作。主要功能之一是它启动/停止驻留在“ Linux Server B”上的另一个应用程序。

我该如何实现?

1 个答案:

答案 0 :(得分:1)

您可以在远程计算机上创建NFS共享,然后将该共享安装在本地计算机上。这样,可以将共享的远程目录称为本地目录。

例如,如果您在远程目录“ / u01”上创建一个共享并调用该共享“ remote_scripts”,则将其安装在/ mnt / remote_scripts。

代码中的arguments_value将为

argument_value=>'/remote_scripts/Script.sh'

设置共享还有很多细节,需要考虑权限,但原则上可行。

下面的页面很好地介绍了设置,但是让SYSADMIN参与进来,因为他们知道您的网络。 (https://www.tecmint.com/how-to-setup-nfs-server-in-linux/