写点什么

在 TransactionScope 中优先使用 Oracle 的.NET 驱动

  • 2007-12-31
  • 本文字数:1337 字

    阅读完需:约 4 分钟

分布式事务(DTx:Distributed Transaction)一直是大型应用所需的必要特性,由于需要同时协调不同的数据源(例如:数据库、队列、甚至注册表和新一代操作系统的 I/O),因此启动 DTx 的代价相对较大,而且很多中间件服务器的 DTx 协调器与应用位于不同的进程中,因此对于频繁提交的 OLTP 操作而言性能影响较大。

.NET Framework 2.0 开始默认提供 ORACLE 的 ADO.NET 驱动,虽然也支持通过 TransactionScope 隐式启动 DTx,但却采用应用宿主进程外的 dllhost.exe 作为独立的 DTx 协调器(DTC)。ORACLE 在自己的 ADO.NET 驱动中对该问题进行了显著优化,不仅对反复打开的连接提供了默认的连接池引用重定向,而且把 DTx 的协调工作置于.NET CLR 与应用宿主内部,对于大型应用而言可以有效的减少因跨多进程协调引发的性能损失。

下面的示例代码采用 ORACLE 的 ADO.NET 驱动(using Oracle.DataAccess.Client)运行,从 COM+ 的统计看并不会引起 DTC 调用,而如果换成微软的 ORACLE ADO.NET 驱动(using System.Data.OracleClient),就需要启动昂贵的 DTC 服务。

private const string ConnectionString = “Data Source = localhost:1521/XE; User ID = scott; Password = tiger”;
private const string SqlConnectionString = “Data Source = (local); Initial Catalog = Northwind; Integrated Security = SSPI”;
[TestMethod]
public void TestOracleDriver()
{
using (TransactionScope scope = new TransactionScope())
{
Oracle.DataAccess.Client.OracleConnection connection = new Oracle.DataAccess.Client.OracleConnection(ConnectionString);
connection.Open();
Oracle.DataAccess.Client.OracleCommand command = connection.CreateCommand();
command.CommandText = “UPDATE DEPT SET DNAME = DNAME”;
command.CommandType = CommandType.Text;
command.ExecuteNonQuery();
// 为了模拟一个分布式数据的操作,下面还增加了一段 SqlConnection 的 DML 操作。
SqlConnection sqlC = new SqlConnection(SqlConnectionString);
sqlC.Open();
SqlCommand sComm = sqlC.CreateCommand();
sComm.CommandText = “UPDATE Products SET ProductName = ProductName”;
sComm.CommandType = CommandType.Text;
sComm.ExecuteNonQuery();
scope.Complete();
}
}

[TestMethod]

public void TestMicrosoftDriver()
{
using (TransactionScope scope = new TransactionScope())
{
System.Data.OracleClient.OracleConnection connection = new System.Data.OracleClient.OracleConnection(ConnectionString);
connection.Open();
System.Data.OracleClient.OracleCommand command = connection.CreateCommand();
command.CommandText = “UPDATE DEPT SET DNAME = DNAME”;
command.CommandType = CommandType.Text;
command.ExecuteNonQuery();
// 为了模拟一个分布式数据的操作,下面还增加了一段 SqlConnection 的 DML 操作。
SqlConnection sqlC = new SqlConnection(SqlConnectionString);
sqlC.Open();
SqlCommand sComm = sqlC.CreateCommand();
sComm.CommandText = “UPDATE Products SET ProductName = ProductName”;
sComm.CommandType = CommandType.Text;
sComm.ExecuteNonQuery();
scope.Complete();
}
}

2007-12-31 21:152268
用户头像

发布了 61 篇内容, 共 13.0 次阅读, 收获喜欢 0 次。

关注

评论

发布
暂无评论
发现更多内容

前端面试 | 必知必会的10道Promise题!

千锋IT教育

数据库 SQL 优化大总结之:百万级数据库优化方案

TimeFriends

8月月更

在座的Python爬虫工程师,你敢爬律师事务所站点吗?

梦想橡皮擦

Python 爬虫 8月月更

Open Office XML 格式中的 Style 设计原理

汪子熙

xml 微软 Office 8月月更 openOffice

ABAP应用服务器的HTTP响应状态码(Status Code)

汪子熙

前端开发 HTTP web开发 SAP 8月月更

Kubernetes你不知道的事

CTO技术共享

开源 签约计划第三季 8月月更

React Redux 组件更新/渲染原理 connect 中的 mapStateToProps

HullQin

CSS JavaScript html 前端 8月月更

Linux配置SSH免密码登录(非root账号)

程序员欣宸

SSH 8月月更

软件定制开发——企业定制开发app软件的优势

开源直播系统源码

软件开发 直播系统源码 app定制开发 软件定制开发

Kubernetes 维护技术分享

CTO技术共享

开源 签约计划第三季 8月月更

开源一夏|OpenHarmony如何选择图片在Image组件上显示(eTS)

坚果

开源 OpenHarmony 8月月更

鲲鹏编译调试及原生开发工具基础知识

乌龟哥哥

8月月更

SAP 产品增强技术回顾

汪子熙

SaaS SAP 企业级应用 云应用 8月月更

全新FIDE 编译简单评测

Geek_99967b

小程序

5 张弹珠图彻底弄清 RxJS 的拉平策略:mergeMap、switchMap、concatMap、exhaustMap

掘金安东尼

前端 RXJS 8月月更

开源一夏 | 参与开源能让人更幸福

石云升

开源 开源社区 8月月更

vue高频面试题合集(一)附答案

helloworld1024fd

Vue

云原生(十三) | Kubernetes篇之深入Kubernetes(k8s)概念

Lansonli

云原生 k8s 8月月更

STM32入门开发 LWIP网络协议栈移植(网卡采用DM9000)

DS小龙哥

8月月更

OAuth Client默认配置加载

阿提说说

Spring Security OAuth

开源一夏|5分钟快速为OpenHarmony提交PR(Web)

坚果

开源 OpenHarmony 8月月更

学习Apache ShardingSphere解析器源码(一)

我不吃六安茶

ANTLR Apache ShardingSphere

C++运算符重载(三)之递增运算符重载

CtrlX

c c++ 代码 进阶员进阶 8月月更

开源一夏 | 粗暴项目监控,快速上手Spring家族的亲儿子SpringAdmin监控项目

知识浅谈

spring 开源 8月月更

浅谈Java和SAP ABAP的静态代理和动态代理,以及ABAP面向切面编程的尝试

汪子熙

编程语言 oop aop spring aop 8月月更

【LeetCode】重新格式化字符串Java题解

Albert

LeetCode 8月月更

数字钱包红海角逐,小程序生态快速引入可助力占领智慧设备入口

FinClip

Spring 全家桶之 Spring Data JPA(一)

小白

8月月更

vue高频面试题合集(二)附答案

helloworld1024fd

Vue

Android进阶(一)Android 发邮件与几种网络请求方式详解

No Silver Bullet

android 8月月更 邮件发送

在TransactionScope中优先使用Oracle的.NET驱动_.NET_王翔_InfoQ精选文章