接獲報案,本機測試無誤的程式部署到測試台,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>
    <version number="*">
      <dataSources>
        <dataSource alias="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-12154: TNS:could not resolve the connect identifier specified.

ORA-12514: TNS: 監聽器目前不知道連線描述區中要求的服務.
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文以為警惕。


Comments

# by ChrisTorng

「ORA-12514跟ORA-15154相似度」有沒有看到哪裡打錯了??? 哈哈哈...

# by Jeffrey

to ChrisTorng, 恭喜找到彩蛋!(抛彩帶) 已更正,感謝。無意間又再次展現本人捍衛「錯字天王」寶座的決心… orz

Post a comment