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

相关文章:

  • 2021-11-25
  • 2021-06-04
  • 2022-12-23
  • 2021-05-18
猜你喜欢
  • 2022-12-23
  • 2021-05-04
  • 2021-09-07
  • 2021-11-20
相关资源
相似解决方案