写点什么

在 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:151996
用户头像

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

关注

评论

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

Go 言 Go 语,一文看懂 Go 语言文件操作

梦想橡皮擦

Python Go 9月月更

Web3的流支付代表Zebec,熊市布局的价值逻辑

股市老人

HAVE FUN | SOFA 飞船——Layotto 星球登陆计划

SOFAStack

#开源

2022年最受工程师欢迎的10款抓包工具有哪些?不止Wireshark和Tcpdump哦!

wljslmz

Wireshark fiddler 网络技术 网络抓包 9月月更

跟我学Python图像处理丨何为图像的灰度非线性变换

华为云开发者联盟

Python 人工智能 图片处理 企业号九月金秋榜

二本4年Java经验,五面阿里(定薪45K)

退休的汤姆

Java 程序员 阿里 面经 秋招

NodeJs小试牛刀--聊天室搭建

zxhtom

9月月更

Containerlab + Kind 部署 Cilium BGP

CTO技术共享

Aptos VS Sui,盘点两大 Move 系新公链的创新异同

TinTinLand

区块链 公链 编程语言‘ Move

ArkID:开源IDaaS系统插件OAuth2轻松实现单点登录高效进行应用服务集成

龙归科技

oauth2.0 SSO Idaas

一文带你认识AscendCL

华为云开发者联盟

人工智能 昇腾 企业号九月金秋榜

室友只用了一把王者的时间就入门了「C语言」

Albert Edison

c++ C语言 函数 循环 9月月更

jsp入门解析

楠羽

笔记 jsp 9月月更

还晓得吗,Redis 的 zset 怎么实现的?

知识浅谈

9月月更

EMQX +计算巢:构建云上物联网平台,轻松实现百万级设备连接

阿里云弹性计算

物联网 计算巢

LeetCode最长快乐字符串使用JavaScript解题

大师兄

JavaScript 面试 算法 前端 9月月更

FinClip 8 月例行汇报,这个月干了啥

FinClip

LeetCode两数之和的两种JavaScript解题方法比较|前端学算法

大师兄

JavaScript 算法 9月月更

JPEX如期推出VISA借记卡,预计第四季度发放实体卡

股市老人

NFT数字藏品是什么?NFT数字藏品有什么前景?

开源直播系统源码

NFT 数字藏品 数字藏品开发 数字藏品系统

谈谈我对云原生与软件供应链安全的思考

阿里巴巴中间件

阿里云 云原生 容器服务

日拱算法:典例-快慢指针解“环形链表”

掘金安东尼

前端 9月月更

Linkerd 流量拆分方案

CTO技术共享

Python 教程之数据分析(4)—— 使用 Python 进行数据分析和可视化 | 第 1 套

海拥(haiyong.site)

Python pandas 9月月更

[Go WebSocket] 你的第一个Go WebSocket服务: echo server

HullQin

Go golang 后端 websocket 9月月更

【云原生 | Docker】腾讯云部署Django项目 (服务器选型、git配置、docker三分钟部署)

计算机魔术师

8月月更

直播回顾|应用上容器的最佳实践技术沙龙

BoCloud博云

云计算 容器 云原生

公链开发功能详细分析

开发微hkkf5566

云原生(三十三) | Kubernetes篇之平台存储系统部署

Lansonli

云原生 9月月更

亿级别搜索系统架构与总结

goodrain

Java elasticsearch

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