oracle和应用连接不上,应用连接Oracle失败报80004005的原因之一

近来看统计的Reference,总有搜oracle/oci等误入此窝的.

为了假装此窝,顺便再贴一个和老旧服务器相关的故事.

使用ODAC9/10来代替Oracle客户端部署应用,相对于使用Instant

Client的要啥没啥(没有OLEDB,而且居然没Home)的不便,同时相对于Oracle

Client牵葫芦带瓢的不爽,是个很好的均衡方案.

ODAC里面附带的OLE

Provider是OraOLEDB.Oracle.1,相对于微软的MSDAORA来说,前者的性能较优,而且后者在BLOB等存取中还存在已知问题,使用OLEDB连接Oracle的程序员很多使用此Provider,但总有写程序的人通过其他类库用OLEDB,或者在程序内使用立即字符串MSDAORA来合成连接字串,而不是在配置中指定Provider.

那么问题来了,通常这类程序喜欢华丽地扔出一个80004005的错误,05年我遇见这个时候(某次自定义安装客户端,只选了OLEDB和配置程序),因为看到出错信息里面是提到没有从Oracle返回具体错误类型,就想当然认为不是Provider初始化失败,而以为那几个程序不使用OLEDB,重新将客户端典型安装了事.

等我发现除了原装的Oracle OLEDB

Privider,系统中居然还有一个MSDAORA,已经是一年以后的事情了,这个Privider是基于MSDTC的配置,依赖于oracle

8的dll模块,要么是给他提供8的dll(客户端好像有DTC项),要么是让其使用当前Oracle版本的dll,参考的数据是M$的文档,头条就是此问题.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\MTxOCIOracleOciLib =

oci.dllOracleSqlLib =

orasql9.dllOracleXaLib =

oraclient9.dll

我的数据库服务器只能装9,所以网站和应用服务器上装的是ODAC

92070,这样修改后,不用安装9201客户端,MSDAORA就可以使用了.

此类问题特征: 在Microsoft OLE Provider for

Oracle里面,测试连接失败,此为充分条件

使用LordPE或者PETools等查看模块的工具,查看其中加载了oledb32.dll,此为使用了OLEDB的程序,此为必要条件;如果又有msado15.dll,则为通过ado使用OLEDB的程序.

然后使用UltraEdit打开程序查找MSDAORA,为不充分条件.

至此启动此程序,会光荣的报错,可服上剂.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值