专栏首页小麦苗的DB宝专栏【DB笔试面试690】在Oracle中,什么是分布式事务处理?

【DB笔试面试690】在Oracle中,什么是分布式事务处理?

题目部分

在Oracle中,什么是分布式事务处理?

答案部分

现代数据库系统往往伴随着复杂的结构和环境,其中,分布式数据库组成是一个重要方面。系统后台的数据库系统不再是由单个数据库构成,而是由多台独立数据库、甚至是多台异构数据库构成。

分布式事务是指一个事务在本地和远程执行,本地需要等待确认远程的事务结束后,进行下一步本地的操作。如通过DBLINK更新远程数据库的一行记录,如果在执行过程中网络异常,或者其它事件导致本地数据库无法得知远程数据库的执行情况,那么此时就会发生IN-DOUBT的报错。此时需要DBA介入,且需要分多种情况进行处理。

Oracle会自动处理分布式事务,保证分布式事务的一致性,所有站点全部提交或全部回滚。一般情况下,处理过程在很短的时间内完成,根本无法察觉到。但是,如果在COMMIT或ROLLBACK的时候,出现了连接中断或某个数据库站点Crash的情况,那么提交操作可能会无法继续,此时DBA_2PC_PENDING和DBA_2PC_NEIGHBORS中会包含尚未解决的分布事务。对于绝大多数情况,当恢复连接或Crash的数据库重新启动后,会自动解决分布式事务,不需要人工干预。只有分布事务锁住的对象急需被访问,锁住的回滚段阻止了其它事务的使用,网络故障或Crash的数据库的恢复需要很长的时间等情况出现时,才使用人工操作的方式来维护分布式事务。手工强制提交或回滚将失去二层提交的特性,Oracle无法继续保证事务的一致性,事务的一致性应由手工操作者保证。

使用“ALTER SYSTEM DISABLE DISTRIBUTED RECOVERY;”可以使Oracle不再自动解决分布事务,即使网络恢复连接或者CRASH的数据库重新启动。使用“ALTER SYSTEM ENABLE DISTRIBUTED RECOVERY;”恢复自动解决分布事务。

有关分布式事务有两个重要的视图,分别是DBA_2PC_PENDING和DBA_2PC_NEIGHBORS。DBA_2PC_PENDING视图列出所有的悬而未决的事务,此视图在未填入悬而未决的事务之前是空的,解决之后也被清空。如下所示:

表 3-26 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

见表 3-27 DBA_2PC_PENDING的STATE列的说明

MIXED

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

TRAN_COMMENT

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

HOST

主机名

COMMIT#

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

表 3-27 DBA_2PC_PENDING的STATE列的说明

列值

说明

Connecting

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

Prepared

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

Commited

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

Forced commit

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

Forced abor(rollback)

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

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

表 3-28 DBA_2PC_NEIGHBORS

列名

说明

LOCAL_TRAN_ID

同上。

IN_OUT

获得事务为IN,送出事务为OUT。

Database

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

DBuser_owner

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

INTERFACE

“C”代表提交信息,“N”表示已准备好状态的一条消息或是一条请求只读提交的请求。当“IN_OUT”为OUT时,“C”表示该连接的远程的站点是提交点站点,并且知道是提交还是中断。“N”表示本地节点正在通知远程节点,说它已准备好。当“IN_OUT”为IN时,“C”表示本地节点或送出的远程的一个数据库是提交点站点,“N”表示本地节点正在通知远程节点,说它已准备好。

本文选自《Oracle程序员面试笔试宝典》,作者:小麦苗

About Me:小麦苗

● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/

● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

● QQ:646634621 QQ群:618766405

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步

本文分享自微信公众号 - DB宝(xiaomaimiaolhr),作者:小麦苗best

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【DB笔试面试392】Oracle的自治事务是什么?

    Oracle的自治事务(Autonomous Transaction)是将一个主事务分割成几个子事务,在执行完子事务以后再继续执行主事务。这里的关键是,子事务是...

    小麦苗DBA宝典
  • 【DB笔试面试534】在Oracle中,数据库的启动经历几个过程?

    Oracle数据库的启动,严格来说应该是实例的启动,数据库仅仅是在实例启动后进行装载。Oracle数据库启动的过程被划分为几个不同的步骤,在不同的启动过程中,可...

    小麦苗DBA宝典
  • 【DB笔试面试594】在Oracle中,关键字NOLOGGING、APPEND和PARALLEL提高DML性能方面有什么差别?

    在Oracle中,关键字NOLOGGING、APPEND和PARALLEL提高DML性能方面有什么差别?

    小麦苗DBA宝典
  • Rafy 框架 - 为数据库生成注释

    当开发者使用 CodeFirst 开发模式,编写了大量的实体类,在代码中编写了完整的类型注释和属性注释,并自动生成数据库后,往往需要把实体类型和实体属性上的注释...

    用户1172223
  • 如何入职京东、华为、IBM等大厂?你需要学懂这门语言

    Hyperledger 是当前业界较为认可的联盟链实现,作为其最重要的子项目,Fabric 自然也备受关注。从开始孵化到发展至今,Fabric 的架构设计也在演...

    区块链大本营
  • ubuntu 插网线无法上网解决方案

    不知道最近是什么情况,ubuntu链接网线总是上不去网,但是wifi还能用,一直也就没有捣鼓,不过今天连wifi都不能用了,只能开始修理了。

    roobtyan
  • 1047 编程团体赛 (20 分)

    编程团体赛的规则为:每个参赛队由若干队员组成;所有队员独立比赛;参赛队的成绩为所有队员的成绩和;成绩最高的队获胜。

    可爱见见
  • IM发送消息后,接收方在线情况下,未读统计数没有累加

    如题,想知道下,这个统计数(conversation.getUnreadMessageNum)是否累加了,如果没有的话,是否应该做出调整或提供给调用方手动累加方...

    用户6332386
  • LIME:一种解释机器学习模型的方法

    用户1737318
  • 缓存与数据库一致性保证

    本文主要讨论这么几个问题: (1)啥时候数据库和缓存中的数据会不一致 (2)不一致优化思路 (3)如何保证数据库与缓存的一致性 一、需求缘起 上一篇《缓存架构设...

    架构师之路

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动