一直以來,都習慣於tnsping alias測試確定使用了那個sqlnet.ora,並測試連通性。最近在制作系統的安裝包,為了輕量級以及提高實施效率,全部客戶端使用oracle instant client,可惜並沒有tnsping,於是研究了下如何用sqlplus測試連通性。看sqlplus -H的時候發現,可通過如下方式驗證oracle服務器的連通性:
sqlplus -L -S ${USERNAME}/${PASSWORD}@${ALIAS} @validate.sql
然后判斷有沒有"ORA-"關鍵字即可,如果有的話,就是連接出錯了。它相比tnsping的好處在於會真正登錄驗證oracle服務器的可用性,tnsping只是增強版的telnet,不會校驗oracle服務真正的可用性。
如下:
[oracle@oel-12c ~]$ sqlplus -L -S scott/tiger@ora111g @validate.sql
ERROR:
ORA-12154: TNS: 無法解析指定的連接標識符
SP2-0751: 無法連接 Oracle。正在退出 SQL*Plus
[oracle@oel-12c ~]$ sqlplus -L -S scott/tiger@ora11g @validate.sql
1
----------
1
-S選項指定不回顯各種信息。
-L指定第一次登錄報錯之后就退出,而不是默認嘗試用戶交互三次。
如果要執行的腳本條件要根據上下文不同傳遞不同的參數,可以在sql文件后加參數,在sql文件中使用&1,&2..作為占位符。
很多時候,因為代碼不嚴謹,執行會出錯,比如重復性檢查,此時如果要在碰到第一個命令報錯的時候就退出,可以在sqlplus上加上WHENEVER SQLERROR EXIT SQL.SQLCODE,如下:
WHENEVER SQLERROR EXIT SQL.SQLCODE --select 'OK' from duabbl; --select 'OK' from duiaaal; select 'OK' from dual; select 'OK' from dzual; select 'OK' from dual; exit;