18c分布式事务 oracle_Oracle分布式事务处理过程.docx

Oracle分布式事务处理过程

一、基本概念

如图Oracle为分布式事务定义了会话树,树中的每个节点代表一个数据库服务,所有会话树中的节点都需要承担下列一个或多个角色:

1 客户端(Client)

引用不同数据库节点中数据的节点。

2 数据库服务器(Database server)

响应来自另一节点数据请求的节点。

3 本地协调器(Local Coordinator)

在分布事务中,必须引用其它节点上的数据才能完成自己这部分事务操作的站点。如上图SALES也是一个本地协调器。

4 全局协调器(Global Coordinator)

分布事务的发起者,负责发送所有分布式事务SQL语句与协调整个分布事务。会话树中的根节点为全局协调器。

5 提交点节点(Commit Point Site)

在分布事务提交过程中,首先执行COMMIT或ROLLBACK操作的站点。一般情况下,应该把存储关键数据的站点作为提交点节点。因为提交点节点和其它节点不同,它不会进入prepared状态,所以不会变为IN-DOUBT事务(IN-DOUBT事务定义在三-3中详述)。

在分布式事务中,可以设置初始化参数COMMIT_POINT_STRENGTH。Oracle会根据将COMMIT_POINT_STRENGTH值较大的节点确定为提交点节点。但需要注意的是,只读节点不能成为提交点节点。

二、事务回滚过程

如果分布式事务以事务回滚结束, 数据库不会去确定提交点站点。全局协调器给所有节点发送ROLLBACK语句,然后结束分布式事务处理。

三、事务提交过程

分布式事务提交过程分为以下几阶段:

1 执行DML语句

用户登录并执行若干条DML语句,其中每一个节点在执行DML语句过程中为要的数据加锁直至分布式事务完成,从而保证分布式事务中数据的完整性。这个阶段完成分布式事务会话树的定义与构造。

2 确定提交点节点

用户数用COMMIT语句后,Oracle通过一下几个步骤确认提交点节点:

(1)对于那些被全局协调器直接引用的点,数据库会选择拥有最高的commit point strength的节点点作为提交点节点。

(2)最初被选择的点通过获取这个事务中的信息决定会话树的节点中是否存在具有更高的commit point strength的节点。

(3)不是拥有最高commit point strength的被事务直接引用的节点就是拥有更高commit point strength的服务器端会成为提交点节点。

需要注意的是,只读节点不能成为提交点节点。如果有多个由全局协调器直接引用的节点有相同的commit point strength,那么数据库指定其中之一为提交点节点。

当提交点节点被确认后,进入下一阶段。

3 全局协调器发送准备响应请求

此阶段也是两阶段提交机制(Two-Phase Commit Mechanism)中的准备阶段。在这个阶段中除了提交点节点以外的节点需要完成以下步骤:

(1)该节点的请求其后代?,也就是该节点后来引用的节点,准备提交。

(2)该节点检查事务是否变动本身或其后代的数据。如果没有数据变化,那么节点跳过其余的步骤,并返回一个只读响应(Read-Only Response),表示该节点无需参与提交。

(3)如果数据被更改,节点分配需要提交事务的资源。

(4)节点为事务产生的修改保存相应的重做记录至节点的重做日志。

(5)节点保证为本次事务持有能够防止产生错误的锁。

(6)节点返回准备响应(Prepared Response)或者如果它或者它的后代准备失败则返回中止响应(Abort Response,中止响应处理见四-1)。

这些步骤保证节点随后可以提交或回滚节点上的事务。完成准备步骤的节点,之后开始等待直到收到来自全局协调器的COMMIT或ROLLBACK请求。

所有节点完成准备步骤后,分布式的事务则被称作in-doubt的。它维持in-doubt的状态,直到所有的改变都被提交或回滚。

4 提交点节点提交

第4-6阶段为两阶段提交机制(Two-Phase Commit Mechanism)中的提交阶段,如果所有节点返回准备响应或只读响应则进入提交阶段,否则进行四-1所述的错误处理。这个阶段需要完成以下步骤:

(1)全局协调器确认所有节点完成准备步骤,并向提交点节点发送事务提交命令。

(2)提交点节点提交本地事务并记录至本地重做日志。

5 提交点节点通知全局协调器提交成功

这个阶段需要完成以下步骤:

(1)提交点节点通知全局协调器事务已经提交完成。

(2)由全局协调器等待并确定事务已在分布式事务中的所有其他节点上提交。

6 全局与局部协调器通知所有节点提交事务

这个阶段需要完成以下步骤:

(1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值