Microsft OLE DB Provider for Oracle 报告
"Test Connection failed because of an error in initialize provider"
我呢是懒得找解决办法,直接将Provider 换成Oracle Provider for OLE DB
近来一个同事就钻牛角尖,还真被他找到了解决办法,现将他转载的这篇文章贴在下面:
原文出处 http://www.ksxuxu.com/blog/?p=62
近来看统计的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$的文档,头条就是此 问题.
http://msdn2.microsoft.com/en-us/library/ms152516.aspx

做如下修改:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\MTxOCI
OracleOciLib = oci.dll
OracleSqlLib = orasql9.dll
OracleXaLib = oraclient9.dll

我的数据库服务器只能装9,所以网站和应用服务器上装的是ODAC 92070,这样修改后,不用安装9201客户端,MSDAORA就可以使用了.

此类问题特征: 在Microsoft OLE Provider for Oracle里面,测试连接失败,此为充分条件
使用LordPE或者PETools等查看模块的工具,查看其中加载了oledb32.dll,此为使用了OLEDB的程序,此为必要条件;如果又有msado15.dll,则为通过ado使用OLEDB的程序.
然后使用UltraEdit打开程序查找MSDAORA,为不充分条件.
至此启动此程序,会光荣的报错,可服上剂.


posted on 2007-04-25 14:39  Shark Xu  阅读(4187)  评论(0编辑  收藏  举报
为汶川地震死难者哀悼!