連線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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORA-12154:TNS:無法解析指定的連線識別符號符號
- oracle database link 報錯ORA-12154: TNS: 無法解析指定的連線識別符號OracleDatabase符號
- rman中的ORA-12154: TNS: 無法解析指定的連線識別符號符號
- ORA-12154: TNS: 無法解析指定的連線識別符號 的另類原因符號
- Oralce ORA-12154 無法解析指定的連線識別符號符號
- WIN8 64位作業系統 ORA-12154 TNS無法解析指定的連線識別符號作業系統符號
- oracle 10g控制檯登入出現Io 異常:Unknown host specified 或ORA-12154 TNS無法解析指定的連線識別符號等Oracle 10g符號
- 不應該出現的 ora 12514:無法解析指定的連線識別符號符號
- 客戶端通過SCAN TNS無法連線ORA-12545客戶端
- 遠端客戶端連線資料庫時提示TNS-12541: TNS: 無監聽程式客戶端資料庫
- PLSQL Developer 客戶端沒有TNS監聽,無法連線資料庫SQLDeveloper客戶端資料庫
- Oracle 19c中連線RMAN客戶端的連線方法Oracle客戶端
- impala客戶端連線客戶端
- Redis客戶端連線Redis客戶端
- ora- 12514 tns 監聽程式當前無法識別連線描述符中請求連線
- 客戶端無法連線資料庫的小問題客戶端資料庫
- TNS-12518: TNS: 監聽程式無法分發客戶機連線
- 如何在VirtualBox客戶機使用符號連線符號
- SQLyog客戶端無法連線MySQL伺服器案例分析客戶端MySql伺服器
- Oracle客戶端連線伺服器教程Oracle客戶端伺服器
- 不安裝Oracle客戶連線Oracle 8的方法(轉)Oracle
- mysql、redis 客戶端連線池MySqlRedis客戶端
- vncserver建立與客戶端連線VNCServer客戶端
- 配置ORACLE 客戶端連線到資料庫Oracle客戶端資料庫
- ORA-12514: TNS: 監聽程式當前無法識別連線描述符中
- 客戶端連線資料時會報“ORA-12537:TNS連線已關閉”客戶端
- wget下載提示:無法建立SSL連線wget
- mysql客戶端連線的幾個常見錯誤MySql客戶端
- 連結檔案 (硬連線 與 符號連線)符號
- ORA-12518: TNS: 監聽程式無法分發客戶機連線
- linux下查詢無效的符號連線(轉)Linux符號
- 客戶端連線EBS 11i VIS報ORA-12537: TNS: 連線已關閉 錯誤的解決客戶端
- 宿主機/客戶端無法連線虛擬機器/主機Oracle11g客戶端虛擬機Oracle
- iptables導致無法遠端連線oracleOracle
- Postgresql無法遠端連線SQL
- mysql 遠端無法連線MySql
- 客戶端連線資料庫的方法客戶端資料庫
- 轉載:內連線與外連線的區別