linux - 使用 Oracle PL/SQL SP 在不同的 Linux 服务器上运行 Shell 脚本

标签 linux oracle shell plsql dbms-scheduler

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

如果脚本被放置在安装数据库的同一台服务器上,比如“Linux 服务器 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 服务器 A”上,而我要运行的 shell 脚本在“Linux 服务器 B”上。

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

我怎样才能做到这一点?

最佳答案

您可以在远程机器上创建一个 NFS 共享,然后将该共享安装到本地机器上。然后可以将共享的远程目录当作本地目录来引用。

例如,如果您在远程目录“/u01”上创建一个共享并将该共享称为“remote_scripts”,您会将其挂载到/mnt/remote_scripts。

您代码中的 argument_value 将是

argument_value=>'/remote_scripts/Script.sh'

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

下一页给出了一个很好的设置概要,但是让你的 SYSADMIN 参与进来,因为他们了解你的网络。 ( https://www.tecmint.com/how-to-setup-nfs-server-in-linux/ )

关于linux - 使用 Oracle PL/SQL SP 在不同的 Linux 服务器上运行 Shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51965040/

相关文章:

Linux,忽略命令行上对 $variable 的引用。改用文字字符串

R包安装-gcc编译失败(制作共享对象时不能使用XX;用-fPIC重新编译)

oracle - PL/SQL Developer 不会对只读链接数据库运行读取查询

oracle - 如何从oracle数据库中删除名为 "BIN$c+eOnMB3RbKSEfg/rsxtAQ==$0"的奇怪表?

windows - 简单的批处理文件不执行?

linux - 读取时间戳文件并创建目录结构取决于时间戳

c++ - 如果您可以在 C++ 中将串行数据视为文件,那么 termios 的用途是什么?

linux - 在/dev 文件上设置 root-only 权限并构建二进制文件

sql - 基于列值的Oracle唯一约束

shell - 是否有可以跨Internet连接工作的类UNIX集群操作系统?