【发布时间】:2019-01-28 14:35:12
【问题描述】:
我想在调用存储过程时运行放置在 Linux 服务器上的 shell 脚本。
如果将脚本放置在安装了数据库的同一台服务器上,例如“Linux 服务器 A”,则下面的代码就像一个魅力。
数据库版本:Oracle 数据库 12c Linux 版本:红帽 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 Server B”上的另一个应用程序。
我怎样才能做到这一点?
【问题讨论】:
-
将 shell 脚本从“Linux 服务器 B”复制到“Linux 服务器 A”。
-
作为工作的一部分,您能否通过 ssh 从 A 到 B 远程调用脚本? (表示已配置密钥访问权限,没有密码...)
-
@Littlefoot:但是在复制之后,PL/SQL Stored Proc RunShell 怎么会知道在“Linux 服务器 B”上运行 /u01/Script.sh 而不是在“Linux 服务器 A”上运行?跨度>
-
创建一个指向脚本所在位置的 NFS 共享,并在调用时引用该共享。
-
如您所说:PL/SQL 过程运行位于数据库服务器(即“Linux 服务器 A”)上的脚本。因此,如果您将脚本从“Linux 服务器 B”复制到“Linux 服务器 A”,您的 PL/SQL 代码将可以访问该脚本并执行该脚本。正是您已经说过的:“如果将脚本放在安装数据库的同一台服务器上,代码就像一个魅力”
标签: linux oracle shell plsql dbms-scheduler