## 解决连接不同版本Oracle执行sqlplus命令,获取状态相关信息的问题; ``` 不在使用cx_Oracle去连接数据库,因为存在installclient与服务器端的问题; ``` - 1.解决问题1:$字符转义 > 在EOF前添加\,即可转义EOF符号后面的所有命令 ``` #!/bin/bash result=`sqlplus -S system/Passw0rD<<\EOF select status from v$instance; exit; EOF` echo $result ``` - 2.解决查询出内容去掉字段名称 ``` #!/bin/bash result=`sqlplus -S system/Passw0rD<<\EOF set heading off; set pagesize 0; set feedback off; set verify off; set echo off; select status from v$instance; exit; EOF` echo $result ``` - 3.通过paramiko远程执行 ``` cmd = 'result=`' + '\n' + \ 'su - oracle<<\EON' + '\n' + \ 'sqlplus -S system/Passw0rD<<\EOF' + '\n' + \ 'set heading off;' + '\n' + \ 'set pagesize 0;' + '\n' + \ 'set feedback off;' + '\n' + \ 'set verify off;' + '\n' + \ 'set echo off;' + '\n' + \ 'select status from v$instance;' + '\n' + \ 'exit;' + '\n' + \ 'EOF' + '\n' + \ 'exit;' + '\n' + \ 'EON`' + '\n' + \ 'echo $result' server_obj = ServerByPara(cmd, "192.168.184.100", "root", "Passw0rD", "Linux") server_obj.run("") ``` > 其中\n换行符是必须的,尤其是\EOF后,否则会报错无法找到结束符号 > 结果: OPEN > 结论: ``` 需要的连接条件: 服务器ip,username,password以及oracle的账户与用户名 ``` - 4.用户的问题 > 针对root用户或者oracle用户需要设置不同的脚本,是否包含su - oracle > 直接通过oracle用户登录,需要添加. ~/.bash_profile 使环境变量生效 ``` cmd = '. ~/.bash_profile' + '\n' +\ 'result=`' + '\n' + \ 'sqlplus -S system/Passw0rD<<\EOF' + '\n' + \ 'set heading off;' + '\n' + \ 'set pagesize 0;' + '\n' + \ 'set feedback off;' + '\n' + \ 'set verify off;' + '\n' + \ 'set echo off;' + '\n' + \ 'select status from v$instance;' + '\n' + \ 'exit;' + '\n' + \ 'EOF`' + '\n' + \ 'echo $result' server_obj = ServerByPara(cmd, "192.168.184.100", "oracle", "Passw0rD", "Linux") server_obj.run("") ```