写点什么

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

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

关注

评论

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

ReentrantLock和Synchronized使用与区别,多线程安全问题

共饮一杯无

synchronized ReentrantLock 三周年连更

涅槃重生!字节大牛力荐大型分布式手册,凤凰架构让你浴火成神

Java你猿哥

架构 分布式架构 凤凰架构

运维审计录像的作用是什么?用什么软件好?

行云管家

堡垒机 运维审计 审计录像

某程序员哀叹:写几年代码,回头一看80%都没用,没法写上简历!

Java你猿哥

Java 程序员 面试 简历

解析单存储库:定义、优势与挑战

龙智—DevSecOps解决方案

谷歌 Monorepo Monolith 单储存库

第二届“鼎新杯”数字化转型应用大赛申报通道正式开启

信通院IOMM数字化转型团队

数字化转型 鼎新杯

RocketMQ 多级存储设计与实现

阿里巴巴云原生

阿里云 RocketMQ 云原生

阿里高工纯手写的《分布式架构手册》仅仅一天GitHub就标星128K

Java你猿哥

架构 分布式 分布式架构

大咖力荐 |《中国企业软件研发管理白皮书》为什么值得看?

万事ONES

PostgreSQL技术内幕(七)索引扫描

酷克数据HashData

数据库 postgresql

【Linux】系统中安装Go环境

A-刘晨阳

Go Linux 三周年连更

Databend v1.1 版本发布!

Databend

ElasticSearch 高级检索,按照顺序进行搜索

alexgaoyh

elasticsearch dsl 顺序搜索 高级检索 与或关系

解决流水线瓶颈、提升编码效率的五个方法(上篇)

龙智—DevSecOps解决方案

ci cicd 持续集成 流水线

互联网工程师Java面试八股文及答案整理(2023最新版)

Java你猿哥

Spring Cloud springboot java面试 面经 JVM面试

实战分享丨 MySQL 与 Django 版本匹配相关经验

Java你猿哥

Java MySQL SSM框架 实战 Diango

分布式文件系统FastDFS

会踢球的程序源

Java fastdfs 分布系统

研究思考丨关于软件复杂度的困局

阿里巴巴云原生

阿里云 云原生 复杂度

关于自托管环境,您了解多少?

龙智—DevSecOps解决方案

Atlassian Data Center

爆肝一月!527页文档详解SpringCloud微服务和分布式系统实践

Java你猿哥

数据库 分布式 SSM框架 微服务设计

技术分享 | 如何迅速将分布式政企应用转型为云原生微服务架构

IT科技苏辞

优秀的pdf编辑器:Acrobat Pro DC 中文直装版

真大的脸盆

Mac PDF Mac 软件 PDF格式转换

Postman Runner 使用指南

Liam

Java 后端 Postman 接口测试 API 开发

【经验分享】硬件工程师需要知道的DFM可制造性设计

华秋PCB

工具 电路 PCB PCB设计 可制造性

缓存一致性设计思路

我爱娃哈哈😍

redis 缓存 缓存一致性

OneCode 开源集成开发工具ESD功能介绍

codebee

开源 低代码平台

人工智能会取代人类成为地球的主宰么?| 社区征文

毛小毛

人工智能 ChatGPT 三周年征文

Linux 修改系统时间的两种方式

会踢球的程序源

Java Linux

打造安全无忧软件应用的十大最佳实践

龙智—DevSecOps解决方案

软件开发 软件开发安全

云服务是什么意思?有什么用?

行云管家

云计算 云服务

600+ 道 Java面试题及答案整理(建议收藏)

会踢球的程序源

Java 面试 java面试 应届生 Java八股文

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