遠程通過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