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