接獲報案,本機測試無誤的程式部署到測試台,Managed ODP.NET開啟連線時冒出ORA-12514錯誤,依照上回處理經驗,直覺又是IIS/machine.config相關的問題。
ORA-12514: TNS: 監聽器目前不知道連線描述區中要求的服務.
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
同事有提到錯誤代碼與文章所寫不同,12514 vs 12154,一時鬼迷心竅將二個錯誤代碼歸為同類,還是一頭栽進去調查為什麼讀不到web.config設定?(TNS名稱的解析順序可參考這裡)
<oracle.manageddataaccess.client>
<versionnumber="*">
<dataSources>
<dataSourcealias="MYDB"descriptor="
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)
(HOST=192.168.1.79)(PORT=1521))
(CONNECT_DATA=(SERVICE_NAME=MYDB))) "/>
</dataSources>
</version>
</oracle.manageddataaccess.client>
加上陰錯陽差一開始沒找對連線字串,刻意改壞設定也不會出錯讓人一頭霧水,東改西改鬼打牆半天,最後才發現是個低級錯誤:192.168.1.89被誤打成192.168.1.79! 理應來自複製貼上的設定值為什麼IP會打錯是個謎,但最讓我氣結的是-ORA-12514跟ORA-12154相似度高達「3A2B」,根本是完全不同的錯誤類型啊!
ORA-12154: TNS: 無法解析指定的連線ID
ORA-12514: TNS: 監聽器目前不知道連線描述區中要求的服務.
ORA-12154: TNS:could not resolve the connect identifier specified.
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
訊息本身說得清楚,web.config找不到alias或TNSNAMES.ORA會是ORA-12154,無法解析連線ID;而ORA-12514提到監聽器(Listener)不認得服務描述,明顯為連上ORACLE但找不到指定的服務名稱。
如果一開始有意識到ORA-12514與12154的明顯差異,仔細確認dataSource alias,就不會鬼打牆這麼久。悔不當初,特PO文以為警惕。