連線oracle 客戶端vs2010除錯提示ORA-12154: TNS: 無法解析指定的連線識別符號:轉載
win7x64 連線oracle 客戶端 vs 2010除錯 提示“ORA-12154: TNS: 無法解析指定的連線識別符號 ”
在debug的時候出現以下問題:
==========ORA-12154: TNS: 無法解析指定的連線識別符號
原因是除錯用的web伺服器預設在:C:\Program Files (x86)\Common Files\microsoft shared\DevServer\9.0\WebDev.WebServer.EXE,路徑中的括號找的麻煩。
這個是路徑問題
例項:
把WebDev.WebServer拷貝到C:\目錄裡
在執行裡面輸入cmd 輸入c:\WebDev.WebServer.EXE /port:8796 /path:"Web應用程式路徑" /vpath:"/"
之後在VS裡面點選工具裡面的附加到程式
之後就可以除錯了
自己試過不管用,用了Porcesse Explorer看了,看來是(x86)在命令列裡的影響,先解除安裝vs2010更換一下安裝目錄試試
重灌之後並不管用,於是參考了
我使用了process explorer找出了WebServer4.0.EXE的Command line然後將program file (x86)改成短格式
"C:\PROGRA~2\Common Files\Microsoft Shared\DevServer\10.0\WebDev.WebServer40.exe" /port:50266 /path:"E:\abcd\efg\abcd2012\zzzz2012\WebSite" /vpath:"/WebSite"
然後修改網站“屬性頁”中“伺服器”選中“使用自定義伺服器”然後再文字框中填入url(http://localhost:50266/WebSite/)
終於解決了。
今天又解決一個十分棘手的問題,我們有個專案原本在x86 機器上開發( 資料庫採用Oracle ),最近由於主機升級到Windows 7 (x64) 後發現程式出問題,當在Visual Studio 中按下F5進行測試除錯時完全無法連線到資料庫,而且一整個很沒道理,看看我如何解決這個棘手的問題吧。
我遇到的錯誤如下:
ORA-12154: TNS: 無法解析指定的連線ID
ORA-12154:TNS:could not resolve service name
錯誤發生點是在「建立連線」的程式碼,只要Open Connection 就會立即出錯。
這問題首先是出在我同事的身上,他主機在一個多月前換成Windows Server 2008 (x64),而我是最近才換到Windows 7 (x64),問題跟他一模一樣,因此也花了好多時間研究分析,直到剛剛跟黑大討論一番後終於給我找出解法。
先說說我電腦的安裝步驟與執行環境:
- 安裝Oracle Database 10g Client Release 2 (10.2.0.1.0) for Microsoft Windows (32-bit)
- 設定TNSNAMES.ORA 設定檔( 100% 肯定設定沒問題 )
- 使用SQL Plus 可以正常連線
- 使用SQL Developer 可以正常連線
- 在Visual Studio 中可以建置(Build)專案,建置/編譯後的元件部署到測試機也都沒問題
- 在Visual Studio 中使用內建的ASP.NET 開發伺服器進行測試
- 利用Process Explorer檢視WebDev.WebServer.EXE程式,載入的元件都沒問題(正確載入)
- 利用Prcoess Monitor檢視WebDev.WebServer.EXE程式,載入的Oracle Client相關引數檔路徑也都正確無誤
想破頭無法解決時,黑大建議我用最簡單的方式測試資料庫連線(如下範例),雖然我自己已經測試數十遍了,但我還是不鐵齒,聽話的再測一次( 魔鬼總在細節裡):
- using (OracleConnection cn = new OracleConnection(
- "Data Source=MyName;" +
- "Persist Security Info=True;" +
- "User ID=user;" +
- "Password=pass" ))
- {
- cn.Open(); //在此發生【 ORA-12154: TNS:無法解析指定的連線ID 】的錯誤
- }
這時我才想到將TNSNAME 的完整定義移到這裡試試看,請看如下範例:
- using (OracleConnection cn = new OracleConnection(
- "Data Source=" +
- " (DESCRIPTION =" +
- " (ADDRESS_LIST =" +
- " (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.245)(PORT = 1521))" +
- " )" +
- " (CONNECT_DATA =" +
- " (SERVICE_NAME = MyName)" +
- " )" +
- " )" +
- ";Persist Security Info=True;User ID=user;Password=pass" ))
- {
- cn.Open(); //在此時發生【 ORA-6413:連線未被開啟】的錯誤
- }
這就神奇啦,錯誤訊息竟然不一樣,,中英文錯誤訊息如下:
ORA-6413: 連線未被開啟
ORA-06413: Connection not open
多一條錯誤訊息就多一條線索,對追Code 絕對有幫助。( 好像在玩偵探遊戲一樣^^ )
這時就被我搜出一篇文章ORA-06413: Connection not open.答案就在其中,原來錯誤發生的原因原來是我的ASP.NET開發伺服器( WebDev.WebServer.EXE )執行檔的路徑有特殊字元導致:
C:\Program Files (x86)\Common Files\Microsoft Shared\DevServer\9.0\WebDev.WebServer.EXE
就是這該死的(x86)出現在路徑中,導致我的ASP.NET怎樣都無法連線到程式,為了驗證確定就是這問題,我試著利用Process Explorer找出WebDev.WebServer.EXE的啟動引數:
並重新透過cmd.exe (命令提示字元)啟動WebDev.WebServer.EXE,這時故意用「短目錄」啟動ASP.NET開發伺服器,如下指令:
"C:\ PROGRA~2 \Common Files\Microsoft Shared\DevServer\9.0\WebDev.WebServer.EX
E" /port:5970 /path:"D:\XXXX\XXX\Website" /vpath:"/"
神奇的事這就樣發生,Oracle 資料庫竟然真的連上了!!
我的解決之道
- 改用Windows 7 內建的IIS7 進行網站執行與偵錯,不用ASP.NET 開發伺服器了。Windows 7 內建的IIS7 可新增多個網站,管理上也頗方便,不像Windows XP 只能新增一個網站
- 改用Visual Studio巨集啟動ASP.NET開發伺服器偵錯,細節可參考我的另一篇文章:啟動ASP.NET偵錯模式的另一種比按下F5還快的方式
本次除錯心得
- 不要鐵齒,越覺得不可能發生的地方越有可能是破案的核心關鍵!
- 找個人聊聊你所遇到的錯誤,在互動、對話的過程中也許會想到一些你不曾想到的地方。
- 「程式除錯」不但要有「經驗」更要有「創意」,當你擁有更多的「生活體驗」(程設的生活),相對的創意也就越多。
- 熟悉多種除錯工具,並在工具間互動比對、驗證錯誤,一定可以看出一些端倪,但不要只是會「用」工具而已,而是要熟悉工具「背後的原理」,這樣才有助於你思考問題的本質與問題背後的問題。
- http://blog.sina.com.cn/s/blog_6d0021460101545s.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22392018/viewspace-772821/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 19c中連線RMAN客戶端的連線方法Oracle客戶端
- 如何在VirtualBox客戶機使用符號連線符號
- impala客戶端連線客戶端
- wget下載提示:無法建立SSL連線wget
- ORA-12505: TNS: 監聽程式當前無法識別連線描述符中所給出的SID等錯誤解決方法
- 4.2.14.3 為Oracle呼叫介面客戶端啟用快速連線故障轉移Oracle客戶端
- Redis客戶端連線數DevOpsRedis客戶端dev
- mysql、redis 客戶端連線池MySqlRedis客戶端
- 4.2.14 啟用客戶端快速連線故障轉移客戶端
- 印表機usb連線電腦無法識別怎麼辦 印表機usb連線電腦無法識別的方法
- mysql 遠端無法連線MySql
- 無法連線遠端,Windows系統電腦無法遠端連線怎麼辦Windows
- windows10系統下遠端桌面連線失敗客戶端無法建立與遠端計算機的連線如何解決Windows客戶端計算機
- 記錄一次網路連線除錯問題只有tcp客戶端為什麼自己會連線上自己除錯TCP客戶端
- Oracle監聽程式當前無法識別連線描述符中請求服務 解決方法Oracle
- Java 客戶端 Jedis和JedisPool 連線池Java客戶端
- 4.2.14.1 關於啟用客戶端快速連線故障轉移客戶端
- Oracle左外連線、右外連線、完全外連線以及(+)號用法Oracle
- ESP作為單連線中的TCP客戶端TCP客戶端
- java基本無法-識別符號Java符號
- 如何除錯SSH連線除錯
- Win10系統連線網路時提示無法連線到此網路錯誤如何解決Win10
- 使用 WebSocket 客戶端連線 MQTT 伺服器Web客戶端MQQT伺服器
- 客戶端怎麼連線到伺服器?客戶端伺服器
- 某客戶系統tomcat連線池連線異常Tomcat
- win10系統寬頻連線出現“錯誤769無法連線到指定目標”如何解決Win10
- 遠端桌面無法連線伺服器?伺服器
- 【LISTENER】Oracle分析連線監聽情況,判斷客戶端IP分佈Oracle客戶端
- PLSQL通過Oracle 11g客戶端連線Oracle 12c伺服器錯誤 ORA-28040SQLOracle客戶端伺服器
- Presto學習筆記——Go客戶端連線PrestoREST筆記Go客戶端
- 使用 Java 客戶端透過 HTTPS 連線到 EasysearchJava客戶端HTTP
- HTTP客戶端連線,選擇HttpClient還是OkHttp?HTTP客戶端client
- gRPC學習記錄(六)--客戶端連線池RPC客戶端
- python中socket建立客戶連線Python
- 無法遠端連線vps 伺服器的原因伺服器
- navicat無法遠端連線mysql的解決方法MySql
- win10提示無法連線到寬頻連線不能建立到遠端計算機怎麼解決Win10計算機
- 無法rdo遠端連線,無法rdo遠端連線控制多臺伺服器,如何檢測其狀態?伺服器
- PowerDesigner連線Oracle逆向生成資料模型(轉載)Oracle模型