首页 运维知识 关于oracle数据库与SQL Server数据库中的的分布式事物处理

关于oracle数据库与SQL Server数据库中的的分布式事物处理

先说下Oracle里的事物处理与应用,之所以会应用事物,就是为了保证一整套逻辑中涉及数据库操作的数据完整性,比如系统中涉及money收支的问题,难免要进行数据库插入操作和更新操作,…

先说下Oracle里的事物处理与应用,之所以会应用事物,就是为了保证一整套逻辑中涉及数据库操作的数据完整性,比如系统中涉及money收支的问题,难免要进行数据库插入操作和更新操作,有时候这里的更新不仅仅是更新本服务器,而且会涉及跨服务器更新。oracle里的分布式不像在SQL SERVER里可以直接引用,oracle没有直接提供,而是作为一个事物插件单独发行的(文件有点大,80MB左右,有需要的我可以稍后再贴处理),下面以oracle9i中的调用为例说明:
程序里添加VS的内置引用 System.EnterpriseServices ,添加引用后我们可以写一个事物操作的类,在需要的地方调用

using System;
using System.Collections.Generic;
using System.Text;
using System.EnterpriseServices;

namespace TranScope
{
public class ESTransactionScope : IDisposable

{

public void Dispose()
{

if(!this.Consistent)

{
ContextUtil.SetAbort();
}

ServiceDomain.Leave();

}

public void Complete()

{
this.Consistent = true;
}

public ESTransactionScope()

{
EnterTxContext(TransactionOption.Required);
}

public ESTransactionScope(TransactionOption txOption)

{
EnterTxContext(txOption);
}

private void EnterTxContext(TransactionOption txOption)

{
ServiceConfig config = new ServiceConfig();

config.Transaction = txOption;

ServiceDomain.Enter(config);

}

private bool Consistent = false;

}

}

调用的就可以这样来了:
using (TranScope t = new TranScope ())//标明事务范围
{
try
{
//这里放一系列的逻辑操作
User.Add(user_info)// 插入操作
SysPara.Update()//更新操作
Server10.AddUser(user_info) //将数据写到另一台服务器
Logger.Add(LogInfo);// 日志记录
t.Complete();
}
catch
{
Fun.Alert(“操作失败!”);
}
}
如果出错的话本服务器和另一台服务器的数据都会执行回滚操作,除非t.Complete()方法成功执行

在SQL SERVER里调用分布式事物可能要方便点,可以这么用
SqlConnection myConnection = new SqlConnection(“Data Source=.;Initial Catalog=TEST;Integrated Security=SSPI;”);
myConnection.Open();
// 启动一个事务
SqlTransaction myTrans = myConnection.BeginTransaction();

// 为事务创建一个命令
SqlCommand myCommand = new SqlCommand();
myCommand.Connection = myConnection;
myCommand.Transaction = myTrans;
try
{
myCommand.CommandText = “Insert into T1(ID, NAME) VALUES (103, ‘XO’)”;
myCommand.ExecuteNonQuery();
myCommand.CommandText = “Insert into T2(ID, NAME) VALUES (101, ‘NB’)”;
myCommand.ExecuteNonQuery();
myTrans.Commit();
Console.WriteLine(“OK.”);
}
catch (Exception ex)
{
myTrans.Rollback();
Console.WriteLine(ex.ToString());
}
finally
{
myConnection.Close();
}
这么用就不太好了,如果是复杂的逻辑处理,可能就很不好搞了,最好还是在事物处理时与数据连接分离开来,只需要把想要的操作方法放到事物块里就好了
也同上面一样,上面那个事物类在也是适用与SQL SERVER数据库的,而且调用也是一样的,不同的是SQL SERVER里调用不用装什么插件的,但是要保证事物能正确有效有几个地方需要设置,首先DTS服务肯定是要开启的,使用分布式事物这个是必须的,还有个地方要配置下如下图:
关于oracle数据库与SQL Server数据库中的的分布式事物处理插图
几个选项勾选上,还有一点就是访问的数据库服务器的防火墙开启的话有时候会有影响,关掉就没问题了。

免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。

作者: 小小编

为您推荐

dell R710 更换raid卡后,raid卡信息没有了,处理方案

dell R710 更换raid卡后,raid卡信息没有了,处理方案

1.将一台服务器(A)的硬盘依次拔出,按相同顺序插入另一台同样配置的服务器(B) 2.启动服务器(B) 3.按提示键盘按...
PL SQL Developer 13连接Oracle数据库并导出数据详细操作教程方法

PL SQL Developer 13连接Oracle数据库并导出数据详细操作教程方法

下载 并安装 PL SQL Developer 13,默认支持中文语言 ========================...
关于一条sql语句在mysql中是如何执行的

关于一条sql语句在mysql中是如何执行的

最近开始在学习mysql相关知识,自己根据学到的知识点,根据自己的理解整理分享出来,本篇文章会分析下一个sql语句在my...
关于sql注入姿势总结(mysql)

关于sql注入姿势总结(mysql)

前言 学习了sql注入很长时间,但是仍然没有系统的了解过,这次总结一波,用作学习的资料。 从注入方法分:基于报错、基于布...
关于Oracle SQL外连接

关于Oracle SQL外连接

SQL提供了多种类型的连接方式,它们之间的区别在于:从相互交叠的不同数据集合中选择用于连接的行时所采用的方法不同。 连接...

发表回复

返回顶部