18c分布式事务 oracle_oracle分布式事务总结

基本概念

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在分布式事务的每个节点都是相同的。

STATE

下图表进行说明

MIXED

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

TRAN_COMMENT

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值