再论使用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 分布式事务问题。
参考的文章:
dotConnect, InstantClient, TransactionScope breaking changes
oracle 无法加载 DLL“oramts.dll”: 找不到指定的模块
关于TransactionScope分布式事务在Oracle下的运作
"无法加载 DLL“oramts.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。" —— 的解决方法