Thinkin Markdown

ORA-12154: TNS: 無法解析指定的連線 ID

解決 ORA-12154 連線 ID 解析失敗問題

發佈時間 2020-01-05
閱讀時間 3 分鐘
主題 Oracle
標籤
ORA 錯誤錯誤處理資料存取
ORA-12154: TNS: 無法解析指定的連線 ID

前言

小弟我最近從原本 VM 開發環境要搬回本機開發環境時,是的沒錯不外乎就是把環境恢復到可以開發應用的程度,其中在處理和 Oracle 資料庫連線時,發生了「ORA-12154: TNS:could not resolve the connect identifier specified」◢▆▅▄▃崩╰(〒皿〒)╯潰▃▄▅▇◣

情境

裝完 ODAC 之後,想說試試看正在開發中的系統能不能連線至 DB Server···

💭 什麼是 Oracle Data Access Components?

想當然爾果然是不行 (´・_・`)

ORA-12154-1

Error Message

ORA-12154-2

Oracle Sql Developer

神奇了我的天,讓我們繼續看下去···

ORA-12154 可能的除錯方向

  1. 應用程式設定檔(*.config)connectionStrings 是否有打錯?(理論上會和 Oracle Client 下 network/admin/tnsnames.ora 設定有對應)
  2. Oracle Client 下 network/admin/tnsnames.ora 是否檔案存在?
  3. Oracle Client 下 network/admin/tnsnames.ora 是否有被存取的權限?
  4. Oracle Client 下 network/admin/tnsnames.ora 內容設定是否有誤?

ORA-12154 狀況排除

案例情境

  1. 使用 ODP.NET 幫助應用程式可以連線至 Oracle 資料庫
  2. 開發環境需要安裝 ODAC

必須先備註一下,此案例是我遇到的狀況,但應該大同小異哦。

首先我先確認一下設定檔,看起來沒問題···

ORA-12154-3

*.config

接著來確認 Oracle Cilent 下 network/admin/tnsnames.ora ···

ORA-12154-4

哦,原來是沒有檔案的部分阿 (´・_・`)

因為 ODAC 安裝完後,需要自己從 Sample 資料夾把 sqlnet.ora 和 tnsnames.ora 寫好後丟出來外層資料夾···

Tnsnames.ora 初步設定

ORA-12154-5

tnsnames.ora
  1. 資料來源別名(Data source)
  2. 主機位址或 IP(Host name or IP)
  3. 連接埠(Port)
  4. 資料庫服務名稱(Database service name)

設定完搬到外層後,應用程式就能正常連線囉(如果還不行,可以試試重開機)。

ORA-12154-6

延伸

你/妳可能會問為什麼上面都做完之後,應用程式就有辦法連線阿!?

這邊先說一點點哦,有興趣可以上網查查相關資料。

首先我們在開始功能列搜尋「regedit」查看註冊表,以 ODP.NET 來說···

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\ODP.NET[version] 位置下可以看到 Key 為 DllPath 標註的 value 為 Oracle Client 下的 bin 實體路徑

ORA-12154-7

因為 ODP.NET 實際背後是用 Oracle.DataAccess.dll 去操作資料庫行為,最終會去爬這個路徑的相關 DLL 來達到實際操作的目的,但這也是一個很大的缺點,就是會去依賴註冊表!!

👍 所以現在大部分的應用程式如果要連接 Oracle 資料庫,可以改用 Managed ODP.NET 去實作!!

下面這文就有提到一個修改方式,正是用 Managed ODP.NET 的做法。

💭 ORA-12154: TNS: 無法解析指定的連線 ID

但他怎麼沒設定幾行就能連線,好像又更簡單了!?

對 Managed ODP.NET 來說,它使用的元件是 Oracle.ManagedDataAccess.dll ,但是它對於尋找 TNS 有一套機制且是有順序的。

ORA-12154-8

所以註冊表上只有 Key 為 TNS_ADMIN 標註的 value 為 network/admin/tnsnames.ora 的實體路徑,但其實會視情況才會使用到,所以 Managed ODP.NET 不會強制依賴註冊表!!

以上區別。

結尾

感謝各位花時間看完此篇小文,如果本文中有描述錯誤,還請各位指教。

希望這篇文章可以解決掉大多數人對 ORA-12154 的疑問跟狀況排除◝( ゚∀ ゚ )◟

如果這篇文章對你有幫助,歡迎分享給更多人!

贊助支持

如果你喜歡我們的文章,或是這些內容對你有幫助,歡迎透過以下平台請我們喝杯咖啡,支持我們持續創作!

Ko-fi

作者

NE

Neil Tsai

樂於分享所見所聞所覺所知的全端工程師

留言功能需要 Cookie 授權

為了載入留言功能,我們需要您同意使用「功能性 Cookie」。您可以隨時在設定中調整。

免責聲明

本網站對於任何使用或引用本網站網頁資料引致之損失或損害,概不負責。本網站亦有權隨時刪除、暫停或編輯本網站所登載之各項資料,以維護本網站之權益。除法律有強制規定外,在任何情況下,本網站對於 (1) 使用或無法使用本網站之各項服務;(2) 經由本網站取得訊息或進行交易;(3) 第三人在本網站上之陳述或作為;以及 (4) 其他與本網站服務有關之事項所致生之任何直接、間接、附帶、特別、懲罰性或衍生性損害,一概不負賠償責任。

CopyRight © 2026 Thinkin Markdown