远程通过shell命令查询Oracle信息 | Oracle


## 解决连接不同版本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("")
```

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM