zoukankan      html  css  js  c++  java
  • 转载:为什么Microsft OLE DB Provider for Oracle总是报错

    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,为不充分条件.
    至此启动此程序,会光荣的报错,可服上剂.


  • 相关阅读:
    tensorflow在文本处理中的使用——Doc2Vec情感分析
    tf.squeeze()
    tf.concat()
    tf.slice()
    WebService到底是什么?
    Webservice工作原理及实例
    Iterator,foreach遍历小计
    谈谈今年很火的区块链 CDN
    Java 反射简介(转载)
    Ajax二级联动简单实例
  • 原文地址:https://www.cnblogs.com/SharkXu/p/OleDBProvider.html
Copyright © 2011-2022 走看看