ORA-12154之靈異事件

ORA-12154之靈異事件

話說幾個月前遇到一個連接Oracle DB很弔詭的事情!!

故事是這樣的,我們在公司SERVER內有個Web Service一直工作的好好的…

某一天突然出現 ORA-12154: TNS:無法決定服務名稱 (靠!之前明明Run的好好的啊><)

通常遇到這類問題,我都用以下排除異常步驟:

 

1. 去查查看tnsname.ora檔案,你要連接的OracleDB跟該檔案內的是否一樣。

   (檔案位置:{你所安裝的Oracle位置} \ NETWORK \ ADMIN \ tnsnames.ora)

 

2. 可在cmd 下使用 ( tnsping oracle主機名稱 ) 指令,來判斷是否有連通。

 

3. 可使用SQLPLUS 連看看

 

4.去【環境變數】查看到底有沒有引用oracle jar檔案。

   例如:Path:E:\oracle\product\10.2.0\client_1\bin\{oracle相關引用的jar檔位置}

 

不過很不幸的,上述檢查完通通符合,可Web Service一跑還是出現一樣的錯誤。

用了許多測試方法還是毫無頭緒,無意中在網路上看到可能跟【連線字串】寫法有關,無奈之下只好試試看,結果一試居然可以…

原來使用的連線字串如下:

string strConn = "User ID=" + pUser + ";Password=" + pPwd + ";Data Source=" + pMISHost;

 

改成下面這種寫法:

connString = @"Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST={0})(PORT={1})))
                                   (CONNECT_DATA=(SID={2})));
                                    User Id={3};
                                    Password={4};";

 

雖說這樣的修正可以讓程式確實執行,不會再有TNS錯誤,但心裡總是怪怪的,因為原來程式是可以跑的!!!

結果就在某一天,心血來潮去找Tnsname.ora這個檔案,

然後把Network Service帳號加到檔案上,並且附與【讀取】的權限。

就解決了這個問題…………ORZ

PS. 我想應該是第一種連線字串寫法必須要靠tnsname.ora檔案內的設定,才能完整建立連線,可是當asp.net要去讀取設定的時候,遇到權限不足問題,才會導致TNS無法決定名稱的異常,這樣以後排除異常的步驟可能得多加一條,觀看tnsname.ora檔案SOP了...><