通过sqlplus RENning shell脚本

时间:2014-06-25 22:47:30

标签: python oracle shell sqlplus

我在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

但我不确定。

1 个答案:

答案 0 :(得分:1)

SQL * Plus是一个客户端应用程序。它可以在客户端计算机上生成进程,该进程将在客户端上运行shell脚本。它无法在数据库服务器上生成进程。

正如您所链接的那样,您可以使用数据库服务器上的dbms_scheduler包在服务器上生成将运行批处理文件的进程。您可以使用Java存储过程执行类似的操作,因为它也可以在服务器上运行。如果安装了适当的调度程序代理,dbms_scheduler也可以run jobs on remote servers,但在绝大多数情况下,这似乎不太可能特别有用。