分布式异构数据库的事务处理

博客探讨分布式异构数据库事务处理方法,指出事务Commit后Roolback无效,可在未Commit前Catch异常。以本地SQL数据库和服务器上Oracle数据库的两个Connection为例,先Open事务,若有异常则都不提交,作者在SPL中实现并测试通过。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 在博客上看到“系统设计应关注并发性 ”文章中提到的有关分布式异构数据库的事务处理,好象大家都没有办法。
 就像大家都知道的,在一个事务Commit后,这个事务再进行Roolback已经是无效的了。
 那么我们可以在事务未Cmmit之前就可以Catch到Exception的。

 比如:目前有两个Connection :一个为本地SQL 数据库的Connection,叫LocalConnection,另一个是服务器上的Oracle的Connection叫OracleConnection。

 当前LocalConnection上有两个操作,OracleConnection上也有两个操作,我们先把两个事务Open()

try
{
    .
    LocalCommand.ExecuteNonQuery()  
//LocalCommand为LocalConnection的一个Command
    LocalCommand2.ExecuteNonQuery()  //LocalCommand2为LocalConnection的一个Command
    ..
    OracleCommand.ExecuteNonQuery()  
//OracleCommand为OracleConnection的一个Command
    OracleCommand2.ExecuteNonQuery()  //OracleCommand2为OracleConnection的一个Command

    LocalConnection.Commit();
   OracleConnection.Commit();  
//两个事务提交

}
catch
{
    LocalConnection.Roolback();
    OracleConnection.Roolback();   
//两个事务回滚

}
final
{
    LocalConnection.Close();
   OracleConnection.Close();  
//两个连接Close()
}


 这样的话,如果有异常的话,两个事务都不会提交的。
 不知道这样的方式,存不存在不正确的,欢迎大家讨论。

 我在SPL中用这个这种方式实现的,测试也通过了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值