|
liuxnp
一年前的帖子你都翻出来了,佩服佩服
虽然已经过了一年,可大家对复制/高级复制的了解好象没有增加多少。复制属于分布式数据库,我就把我一年前写的一个体会贴出来吧。都快忘了
分布式事务
==========
会话树(session tree)上的一些名词解释
--------------------------------------
client:发送请求(数据查询,数据处理等)的node。
database server:接受并处理请求的node。
global coordinator:分布式事务开始的那个数据库所在的node。它是会话树的根。
local coordinator:需通过DBLINK连接其他数据库的node。global coordinator是一个特殊的local coordinator。
commit point site:关于commit point site,注意以下几点:
在此分布式事务commit语句之前,根据COMMIT_POINT_STRENGTH参数被确定。
应该是分布式系统中健壮性好的node。
保存着关键数据。
保存着分布式事务的状态信息,供RECO进程使用。
不经历prepare phase阶段,也无in-doubt事务。
分布式事务提交成功的标志是:(1)所有node(除了commit point site)都prepared或readonly;(2)commit point site上的事务成功提交。
两阶段提交
----------
当一个分布式事务被commit语句提交时,Oracle自动执行以下两阶段。
准备阶段
Commit point site被确定。global coordinator在此分布式事务commit语句之前已经知道了各node的commit point strength。
Global coordinator和local coordinators要求它们的子nodes(除了commit point site)完成prepare,并返回完成情况的信息(prepared, abort, 或read-only)。
各nodes锁定本次事务需要的资源。锁不被释放,直到提交阶段结束。因此,各nodes上这样的事务被称为in-doubt(不确定的)事务。
各nodes完成本次事务要求的操作,并把重做日志flush到硬盘。此时,除了commit语句,其它语句应该已经执行。
各nodes向Global Coordinator返回SCN。Global Coordinator得到SCN的最大值。
提交阶段
Global coordinator发送最大的SCN给commit point site,并要求它提交。commit point site可能以接受到的SCN提交,也可能以本身的SCN提交,就看哪一个大了。
Commit Point Site会马上提交或回滚。Commit Point Site上的锁立即释放。
如果提交成功,Commit Point Site通知Global Coordinator。
此时,此分布式事务被认为成功提交。
Global Coordinator提交本身的应做的操作。Global coordinator把提交信息传播到各nodes。各nodes以与Commit Point Site相同的SCN执行提交。
各nodes返回成功信息到Global Coordinator。Global Coordinator通知Commit Point Site。Commit Point Site删除它所记录的本次分布式事务的状态信息(在视图dba_2pc_pending,dba_2pc_neighbors中),然后通知Global Coordinator。Global Coordinator删除它所记录的本次分布式事务的状态信息。 |
|