oracle分布式事务介绍
来源:优易学  2011-12-11 16:59:28   【优易学:中国教育考试门户网】   资料下载   IT书店

  基本概念

  Local Coordinator:在分布事务中,必须参考其它节点上的数据才能完成自己这部分操作的站点。

  Global Coordinator:分布事务的发起者,负责协调这个分布事务。

  Commit Point Site:在分布事务中,首先执行COMMIT或ROLLBACK操作的站点。一般情况下,应该把存储关键数据的站点作为Commit Point Site。因为Commit Point Site和其它站点不一样,从来不会进入prepared状态,所以不会存在IN-DOUBT事务。

  可以设置初始化参数COMMIT_POINT_STRENGTH,在分布式事务中,会根据这 个值的大小来确定Commit Point Site,分布事物的状态信息也存在该数据库中。一般将关键的数据库作为commit point site ,commit_point_strength值较高的数据库为commit point site,在分布事物中最先提交

  分布式提交的3个阶段

  分布事物的两阶段提交分三个过程:

  1. 准备阶段(PREPARE PHASE)

  ·本地数据库Global Coordinator向其它数据库发出COMMIT通知

  ·比较所有数据库的SCN号,将最高的SCN号作为分布事物的全局SCN号

  ·所有数据库写在线日志

  ·对分布事物修改的表加分布锁,防止被读写

  ·各数据库向Global Coordinator发出已经准备好的通知

  所有参与分布事物的数据库必须经过上述准备,才能进入下一阶段。

  2. 提交阶段(COMMIT PHASE)

  ·本地数据库Global Coordinator通知commit point site首先提交。commit point site提交后,释放其占有的资源,通知Global Coordinator完成提交

  ·本地数据库Global Coordinator通知其它数据库提交

  ·提交节点在日志中追加一条信息,表示分布事物已经完成提交,并通知Global Coordinator。此时所有数据库的数据保持了一致性。

  3. 注销阶段(FORGET PHASE)

  ·本地数据库Global Coordinator通知commit point site所有数据库已经完成提交

  ·commit point site清除分布事物的记录和状态信息,并通知Global Coordinator

  ·Global Coordinator清除本地分布事物的记录和状态信息

  此时分布事物的两阶段提交全部完成。

  如果两阶段提交完成之前,数据库或网络出现异常,应用就会报错,分布事物处于IN_DOUBT状态。一旦数据库或网络恢复正常,系统(RECO PROCESS)会自动处理IN_DOUBT状态的分布事物。有些情况需要管理员手工处理IN_DOUBT状态的分布事物:

  ·IN_DOUBT状态的分布事物,将关键表锁住,造成应用不能正常工作

  两个重要的视图

  DBA_2PC_PENDING:列出所有的悬而未决的事务﹐此视图在末填入悬而未决的事务之前是空的﹐解决这后也被清空。

  LOCAL_TRAN_ID

  本地事务标识﹐格式为integer.integer.ingeger。

  当一个连接的local_tran_id和global_tran_id相同时﹐那么该节点是该事务的全局协调器。

  GLOBAL_TRAN_ID

  全局事务标识,格式为﹕global_db_name.db_hex_id.local_tran_id,其中db_hex_id是用来标识数据库八字符的十六进制数﹐公共事各id在分布式事务的每个节点都是相同的。

 “YES”意味着一部分事务已经在一个节点上提交﹐而在另一个节点上被回滚。

  TRAN_COMMENT

  事务的注释﹐或者如果使用了事务命名﹐当事各被提交时﹐事务的名字就会出现在此处

  已提交的事务的全局提交数

  DBA_2PC_PENDING的STATE列的说明

  Connecting

  通常情况下﹐只有全局协调器和本地协调器才使用这个条目﹐节点在能够决定它是否能够准备好之前﹐要收集来自于其它数据库服务的信息。

  节点已准好﹐可能或者也可能没有将已准备好的消息通知本地协调器﹐但此时﹐该节点还没有接收到提交的请求﹐仍保持着准许备好的状态﹐控制着提交事务所必需的任何本地资源。

  节点(任何类型)已经提交了事务﹐但该事务所包含的其它节点可能并没有提交﹐也就是该事务在一个个或多个其它节点上仍然是悬而未决 。

  Forced commit

  DBA进行判断后﹐可以强行提交未决的事务﹐如果一个事务由DBA在本地节点进行手动提交时﹐产生此项目

  Forced abor(rollback)

  DBA进行判断后﹐可以强行回滚未决的事务﹐如果一个事务由DBA在本地节点进行手动回滚时﹐产生此项目

  DBA_2PC_NEIGHBORS:列出所有获得的(从远程客户)和送出的(给远程服务器)悬而未决的事务﹐也表示该本地节点是不是事务的提交点站点。

  LOCAL_TRAN_ID

  对获得事务来说指本地节点信息的客户数据库的名称﹔对送出的事务来说指用于访问远程服务器上信息的数据库链接的名称

  DBuser_owner

  对获得事务来说指远程数据库链接用于连接的本地账户﹔对于送出事务来说指该数据库链接的拥有者。

  INTERFACE

  ‘C’代表提交信息﹐’N’表示已准备好状态的一条消息或是一条请求只读提交的请求。

  当’IN_OUT’为OUT时﹐’C’表示该连接的远程的站点是提交点站点,并且知道是提交还是中断。’N’表示本地节点正在通知远程节点﹐说它已准备好。

  当’IN_OUT’为IN时﹐‘C’表示本地节点或送出的远程的一个数据库是提交点站点﹐’N’表示本地节点正在通知远程节点﹐说它已准备好。

  处理悬挂事务的一般步骤

  1、 检查alert文件,发现类似下面error:

  ORA-1591 "lock held by in-doubt distributed transaction %s"

  ORA-2062 "distributed recovery received dbid x, expected y"

  ORA-2068 "following severe error from %s%s"

  2、 确认网络是否正常、dblink是否valid、v$dblink和gv$dblink中查询当前是否在使用分布式事务。

[1] [2] 下一页

责任编辑:小草

文章搜索:
 相关文章
热点资讯
热门课程培训