1 / 50

第四章 分布式数据库中的事务管理和恢复 小组成员 : 王波 翟晓玲 翟冰冰

第四章 分布式数据库中的事务管理和恢复 小组成员 : 王波 翟晓玲 翟冰冰. 4.1 分布式事务概述 4.2 分布式事务的执行与恢复 4.3 两阶段提交协议 4.4 分布式数据库中的数据更新 4.5 分布式事务增强数据库一致性 4.6 本章小结. 4.1 分布式事务概述. 4.1.1 分布式事务定义和特性 4.1.2 分布式事务的结构和事务状态 4.1.3 分布式事务管理的问题和目标. 4.1.1 分布式事务定义和特性 1. 分布式事务的定义

obert
Download Presentation

第四章 分布式数据库中的事务管理和恢复 小组成员 : 王波 翟晓玲 翟冰冰

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第四章 分布式数据库中的事务管理和恢复小组成员:王波 翟晓玲 翟冰冰

  2. 4.1 分布式事务概述 4.2 分布式事务的执行与恢复 4.3 两阶段提交协议 4.4 分布式数据库中的数据更新 4.5 分布式事务增强数据库一致性 4.6 本章小结

  3. 4.1 分布式事务概述 • 4.1.1 分布式事务定义和特性 • 4.1.2 分布式事务的结构和事务状态 • 4.1.3 分布式事务管理的问题和目标

  4. 4.1.1 分布式事务定义和特性 1.分布式事务的定义 事务——是为了实现特定的业务功能,而访问数据库的一个最小的逻辑工作单位,它是一个操作序列。 分布式事务——在分布式系统中,任何一个应用的请求最终都将转化成对分布在网络中相应站点上数据库存取操作的序列,因此分布式数据库系统中的事务是一个分布式操作的序列,因被操作的数据分布在不同的站点上,所以称为分布式事务。

  5. 集中式事务与分布式事务的比较: • 继承——外部特性 • 扩充——执行方式不同,ACID特性复杂 • 恢复

  6. 在分布式数据库系统中,一个分布式事务即 全局事务,通常由一个主(父)事务和在不同 站点上执行的子事务(局部事务)组成。 一般的,主事务负责事务的开始,提交和异 常中止。 各个子事务完成对相应站点上数据库的访问 操作。 全局事务——一个要求访问或更新多个站点 上数据的事务。 局部事务——一个仅仅访问或更新一个站点 上数据的事务。

  7. 2. 分布式事务的特性 分布式数据库系统中的事务也应具有事务的ACID四个特性。即: 原子性(atomicity)——指事务执行时的不可分割性。这个特性确保了每个事务要么全部发生,要么全部不发生。如果发生,就是不可分割的瞬间的操作。当一个事务处在处理过程中时,其他进程(无论是否与事务有关)都不能看到任何中间状态。 一致性(consistency)——指事务的正确性,或者说一个分布式事务是一个使分布式数据库从一个一致状态转变为另一个状态的正确程序。例如在一个银行系统中,最关键的不变性是资金守恒规则。在任何内部转帐之后,银行的资金账目应与转帐前保持一致,但是在事务执行的短暂时刻内,这种不变性会受到损害。然后,事务结束之后,这种损害就没有了。如果若干个事务并发执行的结果与按希望的顺序串行执行的结果时等价的,称该若干个事务的并发执行是可串行的,且其结果是正确的。因此,一致性特征也用可串行性(serializability)特征表示,此时,事务具有ASID特性。

  8. 隔离性(isolaty)——指在一个正在执行的事务在其提交之前,决不允许把它对共享的数据所作改变的结果提供给其他事务使用。这就是说,事务的执行似乎与其他事务相隔离,即事务的执行不应受到其他并发事务执行的干扰。保持事务的隔离性是有许多原因的,保证维护事务的交互一致性是原因之一。隔离性(isolaty)——指在一个正在执行的事务在其提交之前,决不允许把它对共享的数据所作改变的结果提供给其他事务使用。这就是说,事务的执行似乎与其他事务相隔离,即事务的执行不应受到其他并发事务执行的干扰。保持事务的隔离性是有许多原因的,保证维护事务的交互一致性是原因之一。 耐久性(durability)——指一旦某个事务被提交了,则无论系统发生任何故障,都不会丢失该事务的执行结果。这就是说,已提交事务对数据库的改变在数据库中应该是持续存在的,这些改变不会因为故障而发生丢失。

  9. 例如: 某银行的存款系统,账号001的存款余额为0元。分布式事务T由两个子事务T1和T2组成。站点i上的事务T1在001账号中存入1000元。如果在事务T1还未提交之前,站点j上的事务T2读取此1000元,并从001账号中取走1000元,事务T2提交,此时现金1000元就交给事务T2的用户。假定此时因某种原因,使事务T1的存款操作无效,即事务T1撤销。事务T1的撤销要求事务T2也撤销,因为事务T2的操作是建立在事务T1操作的基础上的。但是此时要撤销事务T2的操作是不可能的了,因为事务T2已经提交,其产生的结果是无法由系统来撤销的。

  10. 由于分布式数据库的分布特性,使得分布 式事务还具有自己独有的特性:在分布式事务 中,除需要考虑访问数据库的存取操作序列外 ,还必须考虑大量的数据传送,通信原语和控 制报文等,这些都是分布式事务所特有的性质。

  11. 4.1.2 分布式事务的结构和事务状态

  12. 分布式事务的结构 应用 分布式事务 分布式事务 分布式事务 子 事 务 子 事 务 子 事 务 子 事 务 子 事 务 子 事 务

  13. 分布式事务的一般结构为: Begin Transaction 原语:开始一个事务 T1 [ T2 [ : 子事务或操作序列 : Tn [ Commit 原语:事务成功完成的结束 RollBack 或Abort原语:事务失败的结束

  14. 2. 分布式数据库中进程的协作 (1)两个概念 进程: 是一个具有一定独立功能的程序关于某个数据集合的一次运 行活动。它有两个侧面 : 进程说明 :定义进程的行为模式, 包括数据和对数据的一组 操作, 执行这组操作, 完成某一功能。 进程执行:按进程说明中所定义的模式来启动这个进程,执 行其中的那组操作。 事务代理(Agent):在分布式数据库系统中,为了完成在不同站 点上的相应功能,分布式应用必须在这些站点中执行若干进 程,这些进程就称为该应用在那个站点上的“事务代理”。所 以,一个事务代理是一个本地进程,它代表应用来执行某些 动作。启动一个事务造成在某一站点开始执行那个事务代 理。这个事务代理的执行又可能引起在另一个站点开始执行 另一个事务。

  15. (2)进程的协作 为了协调地执行分布式应用的全局操作,分驻于不同站点的诸事务代理必须进行协调。为考虑事务的特性,把各站点上的诸代理组建成协作进程来完成一个全局应用,并作如下规定: 1)每一应用均有一个负责启动整个事务的总代理或称根代理,建立总代理的站点称为源站点; 2)只有总代理才能发出全局有效的事务开始,提交和撤销原语; 3)只有总代理才能请求建立新的事务代理; 4)各站点上的子事务都执行成功,总代理才能决定提交该事务,否则总代理将决定撤销该事务。

  16. FUND_TRANSFER: Read(terminal,$AMOUNT,$FROM_ACC,$TO_ACC); Begin_Transaction; Select AMOUNT into $FROM_AMOUNT from ACCOUNT where ACCOUNT_NUMBER=$FROM_ACC; if $FROM_AMOUNT-$AMOUNT<0 then abort else begin Update ACCOUNT set AMOUNT=AMOUNT-$AMOUNT where ACCOUNT_NUMBER=$FROM_ACC; Update ACCOUNT set AMOUNT=AMOUNT-$AMOUNT where ACCOUNT_NUMBER=$TO_ACC; Commit end 图4.1全局级的FUND_TRANSFER事务

  17. 输入:汇出金额和转出/转入账号 接收来自根代理的消息 更新转入账号存款余额 ROOT_AGENT AGENT: 事务开始:检查转出账号中 是否又足够的转出资金 发送执行消息给根代理 (成功或失败) 否 更新转出账号存款余额 创建代理Agent 向代理送信息:转入帐号,金额 等待来自Agent的消息 成功 提交事务:成功结束 撤销事务:失败结束

  18. ROOT-AGENT; Read(terminal,$AMOUNT,$FROM_ACC,$TO_ACC); Begin_transaction; Select AMOUNT into $FROM_AMOUNT from ACCOUNT where ACCOUNT_NUMBER = $FROM_ACCOUNT; if $FROM_AMOUNT-$AMOUNT<0 then abort else begin Update ACCOUNT set AMOUNT = AMOUNT-$AMOUNT where ACCOUNT = $FROM_ACC; Create AGENT; SEND to AGENT($AMOUNT,$TO_ACC); Commit end AGENT; Receive from ROOT_AGENT($AMOUNT,$TO_ACC); Update ACCOUNT set AMOUNT = AMOUNT + $AMOUNT where ACCOUNT = $TO_ACC; Send to ROOT_AGENT(‘SUCCESS’/’FALL’) 图4.3两个代理组成的FUND_TRANSFER事务

  19. 4.1.3 分布式事务管理的问题和目标 • 分布式事务管理的问题 (1)处理数据项的多个副本 分布式事务管理负责保持同一数据的多个副本间的一致性。 (2)单个站点的故障 当故障站点得到恢复时,DDBMS协同该故障站点上的DBMS,必须在该站点与系统重新连接时,使它的局部数据与其他站点同步。 (3)通信网络的故障 系统必须有能力处理一个或多个连接站点的通信网络故障。这个问题的一个极端情况是发生网络分割。 (4)分布式提交 如果在提交一个分布式事务过程中至少有一个站点发生故障的话,那么这个分布式事务的提交将会产生问题。

  20. 2.分布式事务管理的目标 事务管理的任务就是负责当若干个事务并发执行和事 务执行发生错误时,使数据库仍保持一致状态。

  21. 例如: 某公司在银行中有A,B两个账号,现在公司想从账号A中取出一万元,存入账号B。那么就可以定义一个事务,该事务包括两个操作,第一个操作是从账号A中减去一万元,第二个操作是向账号B中加入一万元。在事务开始时,数据库是处于一个一致性状态。在事务执行时,如果只做第一个操作则用户逻辑上就会发生错误,少了一万元,这时数据库就处于非一致性状态。当我们接着做第二个操作,且成功提交后,数据库又处在了一致性的状态。

  22. 事务管理所追求的理想目标是高执行效率,高并行性事务管理所追求的理想目标是高执行效率,高并行性 和高可靠性。这三大理想目标往往不能兼得,因为他们之 间密切相关,而又矛盾。可靠性措施会使效率下降,而事 务运行效率不仅取决于采用的策略,还与下列因素有关: (1)CPU和主存利用率 (2)控制报文 (3)相应时间 (4)可用性 由此可见事务管理的目标是: (1)维护分布式事务的原子性,一致性,耐久性和隔 离性。 (2)获得最小的主存和CPU开销,降低控制报文的传 输个数和加快分布式事务的响应速度; (3)获得最大限度的系统可靠性和可用性。

  23. 4.2 分布式事务的执行与恢复

  24. 4.2.1 分布式事务管理的抽象模型 在分布式数据库系统中,事务管理功能分成两 个层次。 在每个站点上,又类似于集中式数据库系统中 的局部事务管理器(LTM)进行局部事务的管理, 负责本站点事务的执行,完成对本站点数据库数据 的访问; 对整个分布式数据库系统,由驻留在各个站点 上的分布式事务管理器(DTM)共同协作,实现 对分布式事务的协调和管理。

  25. 图4.5分布式事务管理的抽象模型 站 点 1 本地事务管理器 LTM1 分布式事务管理器 DTM1 站 点 2 本地事务管理器 LTM2 分布式事务管理器 DTM1 站 点 3 本地事务管理器 LTM3 分布式事务管理器 DTM1

  26. 局部事务管理器LTM的结构和功能在许多方面 与集中式系统类似,主要包括: (1)保证本地事务的ACID特性; (2)维护一个用于恢复的日志,代替DTM把 用于分布式事务执行和恢复的信息记入日志。 (3)参与适当的并发控制模式,以协调在该站 点上执行的事务的并发执行。接收并听从本站点上 DTM代理发来的LOG原语,记入日志并执行之。 LOG原语包括:local begin_transaction, local commit local abort

  27. 分布式事务管理器DTM的功能包括: (1)保证分布式事务的ACID特性,尤其是执行分布 式事务的原子性,使每个站点的子事务都成功执行,或都 不执行。这是通过向各个站点发 begin_transaction,commit或abort,create原语来实现的。 (2)负责协调由该站点发出的所有分布式事务的执 行。包括:启动分布式事务的执行;将分布式事务分解为 一些子事务,并将这些子事务分派到恰当的站点上去执 行;决定分布式事务的终止,即决定在该分布式事务中所 包含的所有站点上的子事务都撤销或都提交。

  28. (3)支持分布式事务的执行位置透明性,这也是分(3)支持分布式事务的执行位置透明性,这也是分 布式事务管理的最基本要求。分布式事务管理器根 据事务内部的逻辑划分为若干子事务,按某种要求 分布到相应站点上执行,最后由源发站点提供事务 的最终结果。它实现了对网络上各站点的各个子事 务的监督与管理,完成对整个分布式事务执行过程 的调度和管理,从而保证分布式数据库系统的高效 率。

  29. 4.2.2 分布式事务执行的控制模型 分布式事务的控制模型是指协调分布式事务中 各成员DBMS执行其子事务的通用方法; 控制分布式事务执行的控制模型有: 1)主从模型 2)三角模型 3)层次控制模型

  30. 图4.6 分布式执行的主从控制模型

  31. 图4.7 分布式执行的三角控制模型

  32. 图4.8 分布式执行的层次控制模型

  33. 4.2.3分布式数据库系统中的故障

  34. 4.2.4事务故障恢复的基本概念 研究数据库系统中故障的恢复,主要是指如何恢复因 故障而破坏的数据库,使数据库恢复到一个正确,一致的 状态。恢复的基本原理是数据冗余,即利用冗余存储在别 处的信息和数据,部分或全部重建数据库。 1. 事务故障和事务恢复 当发生事务故障时,保证事务原子性的措施称为事务 故障恢复,简称为事务恢复。 事务恢复主要时依靠日志来实现的。 2. 事务状态及状态转移 为保证可恢复性,系统需要保存事务的起始,终止, 提交或撤销的时间轨迹,事务恢复管理器还对下列操作进 行跟踪记录。

  35. 1) begin transaction:标记事务开始执行。 2) read或write:表示事务对某个数据项进行读或写。 3) End _transaction:表示事务的读或写操作已经结束,并 标记事务执行结束。但是,在这一点,需要检查被该事务 所作的改变是否永久写入数据库(已提交),或事务由于 违反可串行性或其他原因而被撤销。 4) commit_transaction:表示事务已经成功结束,因此事务 执行的任何改变可以安全提交到数据库并且不会被撤销。 5) rollback(或 abort):表示事务没有成功结束,因此必须撤 销事务对数据库所作的任何改变或影响。

  36. read/write Begin end transaction transaction commit abort abort Partially committed active committed failed terminated

  37. 3.事务的提交点 当事务T所有的站点数据库存取操作都已成功执行, 并且所有操作对数据库的影响都已记录在日志中时,该事 务T就到达提交点(committed point).提交点后事务就成为 已提交的事务,并且假定其结果已永久记录在数据库中 (事务的永久性)。然后事务在日志中写入提交记录 [commit,T].在系统发生故障时,需要扫描日志,检查那 些已在日志中写入[start_transaction,T],但没有写入 [commit,T]的所有事务T;恢复时必须回滚这些事务以取 消他们对数据库的影响。此外,还必须对日志中记录的已 提交事务的所有写操作进行恢复,这样他们对数据库的作 用才可根据这些记录重做。 需要注意的是,必须将日志文件保存在磁盘上。在事 务到达提交点以前,还未写到磁盘的日志的任何部分,必 须被写入磁盘,这称为事务提交前强制写(force writing)日 志。

  38. 4.日志,档案库和检查点 (1)日志 为了能够从故障状态中恢复由影响的事务,系统维 护一个日志(log)来保存所有影响数据库项的值的事务操作 的信息,这些信息可以用于故障时的恢复。日志保存在磁 盘上,这样除了磁盘和灾难性故障外,它不会受到任何影 响。另外,日志会被定期备份到归档存储设备(例如磁 带)中,以预防磁盘和灾难性故障。下面列出的是日志的 条目类型(称为日志记录)和每个类型设计的相关动作。 在条目中。T表示唯一事务标识(transaction_id)用于标识 每个事务,通常由系统自动生成:

  39. [start_transaction,T]:表示事务T开始执行。 • [write_item,T,X,旧值,新值]:表示事务T已将数据项X的值从旧值改为新值。 • [read_item,T,X]:表示事务T已读取数据项X的值。 • [commit,T]:表示事务T已成功完成,其结果已被提交(永久记录)给数据库。 • [abort,T]:表示事务T已被撤销。 • Log:记录长度及用于恢复过程的辅助信息,如指向本事务前一日志记录的指针,检查点记录等。

  40. (2)档案库 一个大型的系统一天可以很容易地产生大量的Log记 录.因此,将日志全部存放在盘中是不现实的。故一般将 日志划分为两部分,一部分是当前活动的联机部分,存放 在直接存取设备上,称为直接存取数据集(direct access data set)或简称日志数据集(log data set).另一部分是档案 存储部分,存放在二级存储设备上,例如磁带上。每当数 据集满时就转存到档案存储设备中去。存放日志的档案存 储设备称日志档案库(log archive). 为了防止因介质故障而破坏数据库,要定期将整个数 据库的全部内容转储到档案库中去。存放数据库的档案存 储设备称数据库档案库(DB archive).

  41. (3) 检查点 为了便于恢复,在日志中增加一类新的记录——检查点 (checkpoint),以标识检查点前已执行完的事务是正确的,增加一个 重启动文件。 检查点记录的内容包括: 1 建立检查点时刻所有正在执行的事务清单。 2 这些事务最近一个日志记录的地址。 重启动文件记录各个检查点记录在日志文件中的地址。 每遇检查点,就做如下工作: 1) 将Log缓冲区内容写入Log Data Set中; 2) 在Log Data Set中写入这次检查点记录信息:当前活动事 务表,每一事务最近一次Log记录在Log Data Set中的位置; 3) 将DB缓冲区内容写入DB (更新当前DB); 4) 将这次Checkpoint Record在Log Data Set中的地址记 入”重启动文件”中。

  42. 在写检查点时,为了保证检查点之前所作的工 作都是有效的,防止故障引起缓冲区信息的丢失, 因此在写检查点时要将缓冲区中的所有内容写入到 永久存储设备中,而且采取 “先写日志”的原则。 使用检查点方法可以改善恢复效率。当事务T在 一个检查点之前提交,T对数据库所做的修改一定都 已写入数据库,写入时间是在这个检查点建立之前 或在这个检查点建立之时。这样在进行恢复处理 时,没有必要对事务T执行REDO操作。

  43. 系统出现故障时恢复子系统将根据事务的不同状态采取不系统出现故障时恢复子系统将根据事务的不同状态采取不 同的恢复策略,如图: Tc(检查点) Tf(系统故障) 时间 t1 不要REDO t2 REDO t3 撤销 t4 REDO t5 撤销 T1:在检查点之前提交。 T2:在检查点之前开始执行,在检查点之后故障点之前提交。 T3:在检查点之前开始执行,在故障点时还未完成。 T4:在检查点之后开始执行,在故障点之前提交。 T5:在检查点之后开始执行,在故障点时还未完成。

  44. 4.2.5 事务故障的恢复 1.事务恢复的原则 (1)孤立和逐步退出事务的原则 对于不影响其他事务的可排除性局部故障.例如事务操作的删 除、超时、违反完整性规则、资源、限制、死锁等,应令某个事务 孤立地和逐步地退出.将其所做过的修改复原,即做UND0。 (2)成功结束事务原则 成功结束事务所做过的修改应超越各种故障而存在,也就是重做 (REDO)它所做过的所有修改数据库的操作。 (3)夭折事务的原则 若发生了非局部性的不可排除的故障,例如系统崩溃,则撤消 全部事务,恢复到初态:这有两种做法,一种是利用数据库的备份 实现;另一种是按逆向顺序操作,复原其启动以来所做过的一切修 改。

  45. 2.本地事务的恢复 本地事务的恢复过程类似于集中式数据库系统中事务 的恢复。当故障排除后,由局部事务管理器的恢复子系统 执行事务恢复,过程如图4.11所示。

  46. (1)从“重启动文件”中读出最近的Checkpoint Record的地 址,定出Checkpoint Record在Log Data Set中的地址; (2)创建REDO表,初态为空:创建UNDO表,将Checkpoint Record中的活动事务表内容复制到UNDO表; (3)从Checkpoint Record起沿Log向前检索,遇begin transaction的Log记录.将对应的事务记入UND0表;遇 commit的Log记录,将对应的事务从UNDO表移入REDO表, 直到Log完。 (4)反向检索Log,将UNDO表中的事务,按Log记录的操作, 做UNDO,直到遇对应的begin transaction。 (5) 再从Checkpoint Record起正向检索REDO表中事务的 Log记录,并执行之,直到对应的commit记录。

  47. 3.分布式事务的恢复 在分布式事务恢复中,本地事务的恢复类同于集中式事务的恢复,由本地事务管理器具体执行;而整个分布式事务的恢复由分布式事务管理器与本地事务管理器协同完成。 (1)底层:为本地事务管理器层.这些LTM之间不需要进行通信联系,它们执行上层DTM代理发来的原语,实现图中的接口1,原语有: local begin,lcal commit,local abort,local create (2)中间层:为分布式事务管理层。这是一组能互相交换报文的本地DTM代理组成:它们作为一个整体实现图中的接口2,即本地DTM整体与顶层总代理的接口,原语有: begin tansaction,commit,abort,create (3)顶层:为全局事务层,它由总代理和其他代理组成。由于己规定只有总代理才能发出接口2中的原语,因此只有总代理与中层DTM有接口关系。

  48. 分布式事务恢复的参考模型

  49. 4.2.6 分布式事务的执行与恢复举例

  50. 图中(1)(2)表示当总代理发出begin transaction命令,各DTM向各有关站点的LTM发出local_begin命令,收到命令的LTM把信息记入日志,并将代理转变为子事务(激活)。(3)(4)(5)(6)创建(激活)新代理:先由总代理发出create agent,源站点DTM送信息给相应站点上的DTM,收到命令站点的DTM向它的LTM发出local_creat_agent,该LTM将信息记入日志,并激活代理变为子事务执行之。 如果事务撤消:先由代理发出abort命令,各DTM向相应的LTM发出local_abort命令,各LTM记日志.分别恢复被执行过的活动,使相应子事务均被撤销。从而获得全局事务的撤消效果。 如果事务提交:当总代理发出提交命令,提交是一复杂过程,主要的困难来源于下述事实:即分布式事务的正确提交要求它的全部子事务甚至在故障情况下也能本地提交。如果有一个或一个以上的子事务不能提交,就不能提交整个分布式事务。为实现这个原语,保证分布式事务的原子性,通常采用两阶段提交协议(简称2Pc)来处理。

More Related