我在prod env中以oracle身份登录,当我在SQLPLUS时,我需要在远程主机上运行SHELL脚本。我试图通过python这样做。有没有办法做到这一点?
我能够从sqlplus运行SQL脚本或sql命令,如下所示: -
session = Popen(['sqlplus','-S','abc/abc@'+str(hostname)+':1000/'+str(dbname)+''], stdin=PIPE, stdout=PIPE, stderr=PIPE)
session.stdin.write('SPOOL '+str(op_file)+' \n'
' '+str(data)+ '\n');
session.stdin.write(' ; \n')
session.stdin.write('exit \n')
session.stdin.flush()
stdout, stderr = session.communicate()
但是,当我想运行一个shell脚本时,有什么方法可以通过sqlplus本身来实现它,因为通过ssh登录的另一种方式和oracle中的sudoing是不可能的
我认为这是使用PLSQL实现它的方法之一: -
http://www.dba-oracle.com/t_execute_shell_script_plsql_procedure.htm
但我不确定。
答案 0 :(得分:1)
SQL * Plus是一个客户端应用程序。它可以在客户端计算机上生成进程,该进程将在客户端上运行shell脚本。它无法在数据库服务器上生成进程。
正如您所链接的那样,您可以使用数据库服务器上的dbms_scheduler
包在服务器上生成将运行批处理文件的进程。您可以使用Java存储过程执行类似的操作,因为它也可以在服务器上运行。如果安装了适当的调度程序代理,dbms_scheduler
也可以run jobs on remote servers,但在绝大多数情况下,这似乎不太可能特别有用。