根基概念 Local Coordinator:在分布事务中,必需参考其它节点上的数据才能完成自己这部门操作的站点。
; k' ]+ L) U$ C4 D* f( ~ Global Coordinator:分布事务的倡议者,负责协调这个分布事务。
/ e! g: T0 T' Y$ b3 x3 s Commit Point Site:在分布事务中,首先执行COMMIT或ROLLBACK操作的站点。一般情形下,应该把存储关头数据的站点作为Commit Point Site。因为Commit Point Site和其它站点纷歧样,年夜来不会进入prepared状况,所以不会存在IN-DOUBT事务。, h5 D& L& w/ g' ]
可以设置初始化参数COMMIT_POINT_STRENGTH,在分布式事务中,会按照这 个值的巨细来确定Commit Point Site,分布事物的状况信息也存在该数据库中。一般将关头的数据库作为commit point site ,commit_point_strength值较高的数据库为commit point site,在分布事物中最先提交
" Q1 _9 `( {$ O. o 分布式提交的3个阶段; H1 t& [: |. Q( R! E, @
分布事物的两阶段提交分三个过程:$ }* t2 u5 m' Y1 ~% [
1. 筹备阶段(PREPARE PHASE)
6 V2 s" w1 l& q% o9 A5 \5 \! q ·当地数据库Global Coordinator向其它数据库发出COMMIT通知
) A7 `2 Q3 ?# q) o2 y2 n+ r* ~, I: ] ·斗劲所稀有据库的SCN号,将最高的SCN号作为分布事物的全局SCN号( ^. W3 |/ ]6 }* Z* z* y+ U
·所稀有据库写在线日志
$ ~; w2 Q& D. T# b. ] ·对分布事物改削的表加分布锁,防止被读写
- S, F. Z+ B2 y2 k8 h ·各数据库向Global Coordinator发出已经筹备好的通知$ A5 P1 T0 h0 [, W
所有介入分布事物的数据库必需经由上述筹备,才能进入下一阶段。
2 B8 V* l; J$ D 2. 提交阶段(COMMIT PHASE)( B& A4 x7 M+ X* ^1 p
·当地数据库Global Coordinator通知commit point site首先提交。commit point site提交后,释放其据有的资本,通知Global Coordinator完成提交8 K9 Y% k% O) ~2 c
·当地数据库Global Coordinator通知其它数据库提交
& i5 z' m9 {( w7 O ·提交节点在日志中追加一条信息,暗示分布事物已经完成提交,并通知Global Coordinator。此时所稀有据库的数据连结了一致性。9 T5 f1 C; V% Q& N5 [" `
3. 注销阶段(FORGET PHASE)* G+ c/ M5 B6 ]( l9 z J* z
·当地数据库Global Coordinator通知commit point site所稀有据库已经完成提交
2 y+ U v2 P2 y& c% ^9 i ·commit point site断根分布事物的记实和状况信息,并通知Global Coordinator* y+ `2 Z! `4 @- r: @
·Global Coordinator断根当地分布事物的记实和状况信息
( {, H' m& B# [9 G 此时分布事物的两阶段提交全数完成。7 G! y3 p9 ]. g- d/ i2 I
如不美观两阶段提交完成之前,数据库或收集呈现异常,应用就会报错,分布事物处于IN_DOUBT状况。一旦数据库或收集恢复正常,系统(RECO PROCESS)会自动措置IN_DOUBT状况的分布事物。有些情形需要打点员手工措置IN_DOUBT状况的分布事物:8 ?5 q( H& g6 P' g9 W' ~. N
·IN_DOUBT状况的分布事物,将关头表锁住,造成应用不能正常工作0 U$ @/ ?8 a7 k$ t% l( r
两个主要的视图
* Y0 Q* W) g9 u V: B* [ DBA_2PC_PENDING:列出所有的悬而未决的事务﹐此视图在末填入悬而未决的事务之前是空的﹐解决这后也被清空。
$ n. R( t2 n6 ^4 |2 f& E' T$ ~ LOCAL_TRAN_ID" o* C2 ^9 W, I6 t4 u; S
当地事务标识﹐名目为integer.integer.ingeger。
5 E0 e; t6 ?: Z+ i 当一个毗连的local_tran_id和global_tran_id不异时﹐那么该节点是该事务的全局协调器。
4 A+ c7 ?$ H7 z GLOBAL_TRAN_ID' ~. Z& A2 |, r
全局事务标识,名目为﹕global_db_name.db_hex_id.local_tran_id,其中db_hex_id是用来标识数据库八字符的十六进制数﹐公共事各id在分布式事务的每个节点都是不异的。8 G# ~2 L+ J: c
4 N# t2 A7 j* l$ C
“YES”意味着一部门事务已经在一个节点上提交﹐而在另一个节点上被回滚。 |