使用oracle pl / sql SP在不同的Linux服务器上运行shell脚本



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

如果脚本放置在安装数据库的同一服务器上,则下面的代码就像一个魅力,比如"Linux 服务器 A"。

数据库版本: 甲骨文数据库 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'

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

以下页面提供了设置的简要介绍,但请让您的系统管理员参与进来,因为他们了解您的网络。(https://www.tecmint.com/how-to-setup-nfs-server-in-linux/(

最新更新