`
java-mans
  • 浏览: 11341221 次
文章分类
社区版块
存档分类
最新评论

java 分布式事务处理

 
阅读更多

分布式事务处理   

当数据分布在多个数据库服务器上时,就需要各种保护措施来保证数据正确地写到所有数据库中。例如,考虑一个在三个分离的远程数据库上修改的 客户帐户平衡表,如果在事务写阶段,任何一个数据库连接失败,数据库之间就失去同步。怎样检测并更正这种情形呢?事务处理(TP)监示一个叫做两阶段提交 的过程并在某种程度上解决了这个问题。

分布式系统上的实时事务处理需要一个两阶段提交过程保证将事务得到多个数据库上时的数据完整性。所涉及到的每个数据库在事务被提交给任何其他数据库 时都要授权给它。如果事务成功,则被提交,否则事务应被回退。与容错系统类似,两阶段提交保护系统防止在事务写期间发生系统错误。它也允许操作员异常终止 一个事务并将数据库恢复到原先的状态。事务监示器按下面的过程跟踪事务过程。   

1.写操作命令被送到每个数据库后,事务监示器等待一个响应信号以保证所有的系统都准备好写。如果所有系统都来响应,事务将在这里异常终止。   

2.假定都响应了,事务监示器指示数据库开始写,然后等待每一个系统表明数据写成功的确认信号。   

3.若未得到所有系统响应信号(由于线路或系统故障),事务监示器命令所有数据库将此次的写操作取消。


例如,运行在机器A上的一个组件是单个事务的组成部分之一,组件能够利用机器B上的SQL Server执行数据库事务。组成事务的另一组件用运行在机器C上的Oracle服务器执行数据库事务。这三台机器运行着四块不同的代码,它们全都要参与到这个事务中。
即使通过COM+隐藏分布式事务中的细节,也必要研究和了解分布式事务的“幕后”结构。请记住这些ACID特性适用于所有类型的事务,不论事务涉及的数据库是什么类型或数量有多少。
使用MS DTC进行两阶段提交
让我们再看一下上述分布式事务的例子。如果Oracle服务器停机了,如何保证事务的原子性。答案是使用两阶段提交(two-phase commit,2PC)和通过Microsoft分布式事务协调器(MS DTC)协调。
MSDTC是最先集成在SQL Server中,现在已成为COM+必不可少的部分,通过在事务处理中加入其他的因子,MS DTC确认所有的过程完成并提交他们。
让我们进一步研究MS DTC,了解其工作方式。为了能用两阶段提交协议进行协调,事务中的每个数据源必须装有MS DTC。在这些安装中,主要的协调器总是在事务的起源之处。这个主要的协调器称为提交协调器,它负责确保事务的提交或终止。不管事务是成功地提交还
是回滚,提交协调器都负责向客户应用程序返回一个报告。
在两阶段提交中第一阶段是准备阶段,每个服务器执行它接收的指令,但所有应写到磁盘的内容都被缓冲,如图1 9 - 1所示。

一旦服务器已执行了指令,就通知提交协调器关于事务的状况,如图1 9 - 2所示。

第二阶段称为提交阶段。如果提交协调器接收到来自每个数据源的“准备提交”通知,就提交事务,如图1 9 - 3。

然而,如果从某一受影响的数据源接收到失败信息,提交协调器将执行回滚,并且通知客户应用程序,见图1 9 - 4。

  

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics