听棠.NET

用积极乐观的心态,面对压力
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

Posted on 2005-04-01 13:29  听棠.NET  阅读(6759)  评论(34编辑  收藏  举报

 在博客上看到“系统设计应关注并发性 ”文章中提到的有关分布式异构数据库的事务处理,好象大家都没有办法。
 就像大家都知道的,在一个事务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中用这个这种方式实现的,测试也通过了。