Thursday, September 3, 2009

ORA-12154: TNS:could not resolve service name

背景
尋日deploy了一個用C# (.net framework 2.0) 寫的server-side program仔,用作將MSSQL + FoxPro的data抽去Oracle。C# program是用System.Data.OracleClient來連接Oracle的。UAT時無問題,不過上了production後,就發現個execution log 出現了ORA-12154: TNS:could not resolve service name這個error

是connection問題?
看到這個error,就首先去看看個TNS係咪set錯野啦,不過用那台server的SQL Plus駁入去Oracle又得wor。
那即是確應了不是TSN setting 問題吧。查過deploy file list又和UAT完全相同。那問題該是在.net framework的Oracle Data Provider 和Oracle在server上Oracle Client之間吧。

查過好幾個website,最後就在MSDN的forum內發現了一個類似的問題
據forum內一個叫Paul P Clement IV的人士指出,問題的主因是當在Windows安裝Oracle 9i client的時候,Oracle's directory的permission指設定成只有Administrator能夠存取。因此當有軟件以非administrator賬戶身份來企途連接Oracle的時候,基於不能存取tnsnames.ora等檔案,最後導致未能resolve TNS資料。

Solution
解決方法,正如上述forum文章所指,只要grant返個folder的permission比相關user,問題即可解決。

最後,本人coding經驗尚未算深,如有錯漏,敬請指正~

No comments: