求救:Asp.net连Oracle有时出错OCIEnvCreate求大神级人物,困扰的几年问题未解决。

神色自若 2015-03-24 08:43:59
Asp.net连Oracle,可以连续正常使用15到30天左右,有时会出现下面图错误:
OCIEnvCreate 失敗並傳回代碼 -1 但錯誤訊息文字不可用。
不做任何修改,重启服务器后正常(不是重启IIS,是重启windows)。如图:


软件版本:Oracle 9i,windows 2008 R2 64位,win32_11gR2_client。

疑问:为什么重启后又可以正常使用,正常使用几天后,又会出现图1的错误,再重启windows后又正常。
是什么原因造成的?
...全文
303 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zujinsheng 2015-03-25
  • 打赏
  • 举报
回复
几年, 好腻害的问题..
baidu_23677379 2015-03-24
  • 打赏
  • 举报
回复
上面那篇 我是 Google 查的 可是大陸好像封鎖 google..... 我只好轉貼排在最上面那一篇文章貼給你
baidu_23677379 2015-03-24
  • 打赏
  • 举报
回复
【茶包射手日記】詭異的Oracle Client錯誤 接獲報案,某台開發機器首次以.NET連接Oracle時出現問題(SqlPlus及PL/SQL Developer等工具運作正常),使用System.Data.OracleClient測試,在OracleConnection.Open()時彈出例外: System.Exception: OCIEnvCreate 失敗並傳回代碼 -1 但錯誤訊息文字不可用。 於 System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) 於 System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) 於 System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) 於 System.Data.OracleClient.OracleConnection.Open() 於 ConsoleApplication1.Program.Main(String[] args) 於 ConsoleApplication1\ConsoleApplication1\Program.cs: 行 15 於 System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args) 於 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 於 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 於 System.Threading.ThreadHelper.ThreadStart_Context(Object state) 於 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 於 System.Threading.ThreadHelper.ThreadStart() 爬文發現此類錯誤常肇因於Oracle安裝不正確或Oracle Client目錄權限有誤,但苦主已重裝過Oracle Client,也確認NTFS權限已開啟,問題依舊... 線索中飄出妖氣,看來遇上了BOSS等級的茶包,趕緊拿出+256力量、攻擊速度提高50%、爆擊傷害提高20%的稀有裝備—Process Monitor!! 開啟Process Monitor後執行測試程式故意引發OCIEnvCreate錯誤,由檔案存取記錄觀察到可疑之處。程式居然在Windows\System32\下找到oci.dll,印象中它應該出現在Oracle Client安裝目錄下,對照其他運作正常機器後印證oci.dll的確出現在不該出現的地方。 推測System.Data.OracleClient在運作過程中假設oci.dll檔案所在的目錄就是Oracle Client的安裝位置,藉以推算其他相關檔案路徑。當oci.dll被錯置在System32,OracleClient做出錯誤判斷,導致後續的異常。 試著將System32\oci.dll更名為oci_.dll,出乎意料地,問題立刻消失!! 印證了它是造成離奇錯誤的原因。事後想想,如果不是Process Monitor抓出System32\oci.dll出現在不合理的路徑,又剛好依過去經驗察覺有異。這顆深埋System32裡的詭雷,應會導致重灌Oracle Client 100次也無濟於事,要等到放棄重灌OS才會"不藥而瘉"! 這回能快速抓出茶包,多少憑點運氣,而過去不知有多少最後重裝Windows後才修好的問題,背後就是這類詭雷作祟?
  • 打赏
  • 举报
回复
我是来看大神解决问题的~

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧