再论使用Oracle Instant Client连接Oracle

      我在去年写过一篇《在IIS中使用Oracle Instant Client连接Oracle》,其中提到的方法在当时的vs2008+iis7+oracle10g的环境下得到了验证。现在公司将数据库更新为11g,并使用到了分布式事务,结果在实际操作中出现了一些新的问题。在全体小组成员的努力下,这些问题基本得到了解决,现记录如下:

      1. 操作数据库时,发生“内存被损坏”,操作失败。我们发现,如果开发环境同时安装了10g的客户端与11g的客户端,则非常容易出此问题。卸载一个版本就可以了。这个解决方法不是很完美,因为我们即使卸载后,仍然时不时出现这样的问题。

      2.我在那篇文章里说,使用Oracle Instant Client,只能使用10.1.0.5版本,其它版本都会报错,这其实只是针对服务端是10g的情况。当服务端使用11g时,这个bug貌似得到了解决,我使用10.1.0.5与最新的11.2.0.1.0都能测试成功!

      3.当使用Oracle Instant Client时,使用分布式事务,具体为使用System.Transactions.TransactionScope类的时候,报无法加载 DLL“oramts.dll”: 找不到指定的模块的错。后来上官网的论坛上查找,才发现这是由于

Oracle Services For Microsoft Transaction Server,也就是oracle对MS分布式事务的实现,并没有包含在Oracle Instant Client之中。难道我就要因此去安装500M的11g客户端?解决方法貌似有两个。第一个方法就是将OIC解压到任意目录,记住,不要去配置环境变量,然后安装11g客户端,在安装方式上选择自定义安装,把安装目录指向你刚才解压的目录,然后在组件列表中只选择Oracle Services For Microsoft Transaction Server,点击安装就可以了,整个过程只需要一分钟。然后去windows服务中,把所需要的两个服务:Distributed Transaction Coordinator和Oracle Services For Microsoft Transaction Server启动就可以了。这个方法已经得到了我的验证。第二个方法就是下载Oracle Data Access Components现在最新的版本是ODAC 11.2 Release 3 (11.2.0.2.1),这个连接组件既包含Oracle Instant Client又包含Oracle Services for Microsoft Transaction Server。找xcopy版下载安装就行了,下载文件中自带了帮助文件,仔细阅读就行了。我使用的命今如下:
install.bat oramts D:\instantclient_11_2 orclHome

 

更多的细节请参考:oracle 分布式事务问题

      参考的文章:

      dotConnect, InstantClient, TransactionScope breaking changes

      oracle 无法加载 DLL“oramts.dll”: 找不到指定的模块

      oracle 分布式事务问题

      关于TransactionScope分布式事务在Oracle下的运作

      "无法加载 DLL“oramts.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。" —— 的解决方法

原文地址:https://www.cnblogs.com/ljzforever/p/1982933.html