根基概念 Local Coordinator:在分布事务中,必需参考其它节点上的数据才能完成自己这部门操作的站点。
8 W Z' e4 P9 S/ E" ^" H. q Global Coordinator:分布事务的倡议者,负责协调这个分布事务。' a0 c4 t+ v; _' H3 H; z
Commit Point Site:在分布事务中,首先执行COMMIT或ROLLBACK操作的站点。一般情形下,应该把存储关头数据的站点作为Commit Point Site。因为Commit Point Site和其它站点纷歧样,年夜来不会进入prepared状况,所以不会存在IN-DOUBT事务。
, w/ c% L2 y4 p1 V 可以设置初始化参数COMMIT_POINT_STRENGTH,在分布式事务中,会按照这 个值的巨细来确定Commit Point Site,分布事物的状况信息也存在该数据库中。一般将关头的数据库作为commit point site ,commit_point_strength值较高的数据库为commit point site,在分布事物中最先提交: p8 u8 M! K* @5 y6 n x2 ]
分布式提交的3个阶段9 U- h& J4 U- J% Y! b
分布事物的两阶段提交分三个过程:& e1 g% `& M2 O& B8 T4 F
1. 筹备阶段(PREPARE PHASE)
9 r% A7 R8 c7 F ·当地数据库Global Coordinator向其它数据库发出COMMIT通知2 t( J* i. w5 @# D% H. M
·斗劲所稀有据库的SCN号,将最高的SCN号作为分布事物的全局SCN号! M4 d& z' a* y
·所稀有据库写在线日志4 @- O7 ^6 N, w7 A
·对分布事物改削的表加分布锁,防止被读写( }9 S: A* D) a- q `! a J5 B0 W' ^
·各数据库向Global Coordinator发出已经筹备好的通知
6 }% c9 }4 w/ [; B 所有介入分布事物的数据库必需经由上述筹备,才能进入下一阶段。: Y/ D$ A# w# D& Y( _6 T% g# i! B
2. 提交阶段(COMMIT PHASE)+ |, x/ K5 d; _
·当地数据库Global Coordinator通知commit point site首先提交。commit point site提交后,释放其据有的资本,通知Global Coordinator完成提交
7 a! F) ?& A. A2 w9 n& L$ ^8 I ·当地数据库Global Coordinator通知其它数据库提交
! j7 r5 [2 D [ { L. M- Z# z ·提交节点在日志中追加一条信息,暗示分布事物已经完成提交,并通知Global Coordinator。此时所稀有据库的数据连结了一致性。& N( _1 t" A. c ^* k# i, {
3. 注销阶段(FORGET PHASE)$ s- ^) P% @ {# _% g# `
·当地数据库Global Coordinator通知commit point site所稀有据库已经完成提交
/ {9 `2 J a5 e+ ~7 P0 R) D& ~ ·commit point site断根分布事物的记实和状况信息,并通知Global Coordinator
8 v( ?: z& V8 a$ Y& J8 U ·Global Coordinator断根当地分布事物的记实和状况信息
9 F! b% z t' V3 r6 R$ T 此时分布事物的两阶段提交全数完成。* s: p: b" N% A1 F5 D- u: F0 L
如不美观两阶段提交完成之前,数据库或收集呈现异常,应用就会报错,分布事物处于IN_DOUBT状况。一旦数据库或收集恢复正常,系统(RECO PROCESS)会自动措置IN_DOUBT状况的分布事物。有些情形需要打点员手工措置IN_DOUBT状况的分布事物:
0 A0 ~9 G; S: _' r5 K2 p ·IN_DOUBT状况的分布事物,将关头表锁住,造成应用不能正常工作
* [6 J: q; Z( u 两个主要的视图0 i t% D7 W) @1 e
DBA_2PC_PENDING:列出所有的悬而未决的事务﹐此视图在末填入悬而未决的事务之前是空的﹐解决这后也被清空。
) J* m; @, x9 t LOCAL_TRAN_ID: ~; V6 E, i9 D0 F/ j
当地事务标识﹐名目为integer.integer.ingeger。
0 X' Q& E; N& Y) E, q$ Y0 N3 r% Z3 J 当一个毗连的local_tran_id和global_tran_id不异时﹐那么该节点是该事务的全局协调器。" X7 s1 R+ M+ m; @& M
GLOBAL_TRAN_ID
o0 F& b) h1 j/ h4 d 全局事务标识,名目为﹕global_db_name.db_hex_id.local_tran_id,其中db_hex_id是用来标识数据库八字符的十六进制数﹐公共事各id在分布式事务的每个节点都是不异的。( L& x$ a; R$ ]5 G' Q+ Y6 \- M& v0 v
“YES”意味着一部门事务已经在一个节点上提交﹐而在另一个节点上被回滚。
8 M2 G+ ]2 ^2 Z; d& m8 U* u$ S TRAN_COMMENT
" A6 i7 h, k/ s 事务的注释﹐或者如不美观使用了事务命名﹐当事各被提交时﹐事务的名字就会呈此刻此处3 d" j |4 g$ ]2 h* J- m
已提交的事务的全局提交数
6 ^9 C" l h/ i7 u/ T DBA_2PC_PENDING的STATE列的声名
( L, T" t# E* X7 D i$ |( k Connecting
6 m/ U) L( M* D; u/ }- ?
" U: W+ L7 K3 ?; i" ^ }3 [" X 凡是情形下﹐只有全局协调器和当地协调器才使用这个条目﹐节点在能够抉择它是否能够筹备好之前﹐要收集来自于其它数据库处事的信息。 |