close

20170201 

今天遇上一個困難的問題,說明如下:

開發環境:win 10/vs 2015/oracle 10g/ms sql2014

測試環境:win server 2018/iis 10

在本機開發後可連oracle db,連線字串為<connectionString="DATA SOURCE=XXXXX;PASSWORD=XXXXX;USER ID=XXXXX">

但最後卻改成另一種連線字串就可以連到了,連線字串為<connectionString="Data Source = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = XXXXX)(PORT = XXXXX)))(CONNECT_DATA = (SERVICE_NAME = XXXXX))); Persist Security Info=True;User ID = XXXXX; Password=XXXXX">

而以下為參考<保哥>網站上文章所得到的心得及部份內容節錄:<先感謝保哥的文章,如內容不可copy/paste來說明,再請告知後刪除,謝謝>

https://blog.miniasp.com/post/2009/08/31/Solve-ASPNET-cannot-connect-Oracle-DB-using-Development-Server.aspx

今天又解決一個十分棘手的問題,我們有個專案原本在 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),問題跟他一模一樣,因此也花了好多時間研究分析,直到剛剛跟黑大討論一番後終於給我找出解法。

想破頭無法解決時,黑大建議我用最簡單的方式測試資料庫連線 (如下範例),雖然我自己已經測試數十遍了,但我還是不鐵齒,聽話的再測一次 ( 魔鬼總在細節裡 ):

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: 連線未被開啟 】的錯誤
}

神奇的事這就樣發生,Oracle 資料庫竟然真的連上了!!

我的解決之道

  1. 請同事先協助,看之前有沒有遇過這樣的問題,然後討論找的方向。
  2. 其實也是滿神的,一週前還完全沒頭緒也不想處理,因為太煩,但經討論後,又看見<保哥>的文章,耐下性子去測試,就成功了,只是沒像<保哥>他們遇見的那麼細,因為server上是沒裝vs的IDE啊!

 

arrow
arrow
    文章標籤
    oracles
    全站熱搜

    Anson Chiang 發表在 痞客邦 留言(0) 人氣()