通过sqlplus运行shell脚本

0 投票
1 回答
864 浏览
提问于 2025-04-18 11:06

我现在以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身份执行sudo命令是不可能的。

我觉得可以用PLSQL来实现这个功能,具体方法是这样的:-

http://www.dba-oracle.com/t_execute_shell_script_plsql_procedure.htm

不过我不太确定。

1 个回答

1

SQL*Plus 是一个客户端应用程序。它可以在客户端机器上启动进程,这些进程可以运行一些脚本。但是,它不能在数据库服务器上启动进程。

正如你提到的,你可以在数据库服务器上使用 dbms_scheduler 这个工具来启动在服务器上运行的批处理文件。你也可以使用 Java 存储过程来做类似的事情,因为它也是在服务器上运行的。dbms_scheduler 还可以在远程服务器上运行任务,前提是安装了合适的调度代理,不过在大多数情况下,这种功能可能并不是特别有用。

撰写回答