昨天在使用VS通過ODT連接資料庫扒模型的時候發現了這個異常。經過測試,發現這個異常是因為 ODT 插件無法識別服務名中的“.”字元 導致的,比如“orcl.asian.com”。其他不包含“.”字元的服務名皆可正常連接。做了下簡單的回溯,一個月前的ODT插件是正常工作的,期間資料庫未作任何改動。唯 ...
2019.5.23 更新
突然發現原來是是sqlnet.ora在搞鬼,只要將SQLNET.AUTHENTICATION_SERVICES=(nts) 改為 SQLNET.AUTHENTICATION_SERVICES=(NONE) 就可以了。
百度關於SQLNET.ORA 的有關信息
推測應該是MS 賬戶登錄之後NTS模式獲取賬戶信息出現問題,ODT對該異常的提示信息又不恰當,導致我們在原地打轉。正確的異常的應該是提示“Credential retrieval failed”。
錯誤截圖
同事沒有遇到這個問題,很有可能一個原因就是他的ODT不是讀取ODT安裝後的SQLNET.ORA文件,而是定位到了Oracle Home下的文件,因為他們要運行PL/SQL ,所以先裝Oracle Home,之後再安裝ODT。 我是直接裝ODT沒有搞任何東西。
總結
搞定。
原文
昨天在使用VS通過ODT連接資料庫扒模型的時候發現了這個異常。經過測試,發現這個異常是因為 ODT 插件無法識別服務名中的“.”字元 導致的,比如“orcl.asian.com”。其他不包含“.”字元的服務名皆可正常連接。做了下簡單的回溯,一個月前的ODT插件是正常工作的,期間資料庫未作任何改動。唯獨Windows 和Visual Studio更新過。隨後測試了相同版本的Visual Studio(Visual Studio Community 2017 15.9.12)在Windows 7 下的連接測試,結果是連接成功。
異常截圖
Google 中有一些相關的文章,大致圍繞在幾個點上:
- 認為問題出在OCI相容性。 認為問題出在Oracle Home。 認為問題出在Microsoft Account 。
第三種方式停用MS Account 能解決這個問題。自己也順便用虛擬機做了不同版本的測試,結果不太理想,所有登錄的Windows 10都失敗了。但同事的1803裝183000的ODT就算登錄也是能夠正常連接,對比不同點有幾個:一是VS 2017的版本並非是我測試時的15.9而是Older Version。二是Windows 使用Administrator 登錄MS賬戶。
使用ODAC替換ODT也可以解決掉這個異常,好奇登錄MS 賬戶之後,Windows 到底進行了些什麼操作?一個托管組件為什麼會受到MS 賬戶的影響呢?為什麼ODT不行,使用ODAC就可以?先Mark起來,後面有時間再細查。
總結
ODT插件是在Visual Studio一啟動就載入進記憶體了,所以,如果是在登錄MS 賬戶之前打開VS,那麼ODT仍然是正常工作的,直到你關閉VS。解決這個異常除了上面說的切換MS Account 外,還有下麵幾個。
1. 使用Oracle Data Access Components(可能會遇到Credential retrieval failed的問題,見Credential retrieval failed 的解決方法)。
2. 更換Windows 版本。