分布式数据库中的事务管理和恢复.ppt_第1页
分布式数据库中的事务管理和恢复.ppt_第2页
分布式数据库中的事务管理和恢复.ppt_第3页
分布式数据库中的事务管理和恢复.ppt_第4页
分布式数据库中的事务管理和恢复.ppt_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

分布式事务概述 分布式事务的执行与恢复 两阶段提交协议 分布式数据库中的数据更新 分布式事务增强数据库一致性,本章主要内容,分布式事务概述,分布式事务定义和特性 分布式事务的结构和事务状态 分布式事务管理的问题和目标,分布式事务定义和特性 1.分布式事务的定义 事务是为了实现特定的业务功能而访问数据库的一个最小的逻辑工作单位,它是一个操作序列。 分布式事务在分布式系统中,对分布在网络中不同站点上数据库存取操作的序列。,一个分布式事务即全局事务,通常由一个主(父)事务和在不同站点上执行的子事务(局部事务)组成。 主事务负责事务的开始,提交和异常中止。 子事务完成对相应站点上数据库的访问操作。 全局事务是访问或更新多个站点上数据的事务。 局部事务是仅仅访问或更新一个站点上数据的事务。,2. 分布式事务的特性:ACID 原子性(atomicity)指事务执行时的不可分割性。这个特性确保了每个事务要么全部发生,要么全部不发生。 一致性(consistency)事务执行的结果必须使数据库从一个一致性状态转到另一个一致性状态。 隔离性(isolaty)一个事务的执行不被其他事务干扰。 持久性(durability)一个事务一旦提交,它对数据库中数据的改变应该是永久性的。无论系统发生任何故障,都不会丢失该事务的执行结果。,应用,分布式事务的结构,分布式事务,分布式事务,分布式事务,子 事 务,子 事 务,子 事 务,子 事 务,子 事 务,子 事 务,分布式事务的一般结构为: Begin Transaction 原语:开始一个事务 T1 T2 : 子事务或操作序列 : Tn Commit 原语:事务成功完成的结束 RollBack 或Abort原语:事务失败的结束,2. 分布式数据库中进程的协作 (1)两个概念 进程: 是一个具有一定独立功能的程序关于某个数据集合的一次运 行活动。它有两个侧面 : 进程说明 :定义进程的行为模式, 包括数据和对数据的一组 操作, 执行这组操作, 完成某一功能。 进程执行:按进程说明中所定义的模式来启动这个进程,执 行其中的那组操作。 事务代理(Agent):在分布式数据库系统中,为了完成在不同站 点上的相应功能,分布式应用必须在这些站点中执行若干进 程,这些进程就称为该应用在那个站点上的“事务代理”。,(2)进程的协作 为了协调地执行分布式应用的全局操作,分驻于不同站点的诸事务代理必须进行协调。为考虑事务的特性,把各站点上的诸代理组建成协作进程来完成一个全局应用,并作如下规定: 1)每一应用均有一个负责启动整个事务的总代理或称根代理,建立总代理的站点称为源站点; 2)只有总代理才能发出全局有效的事务开始,提交和撤销原语; 3)只有总代理才能请求建立新的事务代理; 4)各站点上的子事务都执行成功,总代理才能决定提交该事务,否则总代理将决定撤销该事务。,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-$AMOUNT0 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 图1全局级的FUND_TRANSFER事务,ROOT_AGENT AGENT:,输入:汇出金额和转出/转入账号,事务开始:检查转出账号中 是否又足够的转出资金,更新转出账号存款余额 创建代理Agent 向代理送信息:转入帐号,金额,等待来自Agent的消息,成功,提交事务:成功结束,否,撤销事务:失败结束,接收来自根代理的消息,更新转入账号存款余额,发送执行消息给根代理 (成功或失败),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-$AMOUNT0 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) 图3两个代理组成的FUND_TRANSFER事务,分布式事务管理的问题和目标 分布式事务管理的问题 (1)处理数据项的多个副本 分布式事务管理负责保持同一数据的多个副本间的一致性。 (2)单个站点的故障 当故障站点得到恢复时,DDBMS协同该故障站点上的DBMS,必须在该站点与系统重新连接时,使它的局部数据与其他站点同步。 (3)通信网络的故障 系统必须有能力处理一个或多个连接站点的通信网络故障。这个问题的一个极端情况是发生网络分割。 (4)分布式提交 如果在提交一个分布式事务过程中至少有一个站点发生故障的话,那么这个分布式事务的提交将会产生问题。,2.分布式事务管理的目标 事务管理的任务就是负责当若干个事务并发执行和事 务执行发生错误时,使数据库仍保持一致状态。,例如: 某公司在银行中有A,B两个账号,现在公司想从账号A中取出一万元,存入账号B。 1、定义一个事务,该事务包括两个操作,第一个操作是从账号A中减去一万元,第二个操作是向账号B中加入一万元。 2、在事务开始时,数据库是处于一个一致性状态。 3、在事务执行时,如果只做第一个操作则用户逻辑上就会发生错误,少了一万元,这时数据库就处于非一致性状态。 4、当我们接着做第二个操作,且成功提交后,数据库又处在了一致性的状态。,事务管理所追求的理想目标是高执行效率,高并行性 和高可靠性。这三大理想目标往往不能兼得,因为他们之 间密切相关,而又矛盾。可靠性措施会使效率下降,而事 务运行效率不仅取决于采用的策略,还与下列因素有关: (1)CPU和主存利用率 (2)控制报文 (3)相应时间 (4)可用性 由此可见事务管理的目标是: (1)维护分布式事务的原子性,一致性,持久性和隔 离性。 (2)获得最小的主存和CPU开销,降低控制报文的传 输个数和加快分布式事务的响应速度; (3)获得最大限度的系统可靠性和可用性。,分布式事务的执行与恢复,分布式事务管理的抽象模型 在分布式数据库系统中,事务管理功能分成两 个层次。 在每个站点上,类似于集中式数据库系统中 的局部事务管理器(LTM)进行局部事务的管理, 负责本站点事务的执行,完成对本站点数据库数据 的访问; 对整个分布式数据库系统,由驻留在各个站点 上的分布式事务管理器(DTM)共同协作,实现 对分布式事务的协调和管理。,图5分布式事务管理的抽象模型,站 点 1,站 点 3,站 点 2,本地事务管理器 LTM1,分布式事务管理器 DTM1,分布式事务管理器 DTM1,本地事务管理器 LTM2,分布式事务管理器 DTM1,本地事务管理器 LTM3,局部事务管理器LTM的结构和功能在许多方面 与集中式系统类似,主要包括: (1)保证本地事务的ACID特性; (2)维护一个用于恢复的日志,代替DTM把 用于分布式事务执行和恢复的信息记入日志。 (3)参与适当的并发控制模式,以协调在该站 点上执行的事务的并发执行。接收并听从本站点上 DTM代理发来的LOG原语,记入日志并执行之。 LOG原语包括:local begin_transaction, local commit local abort,分布式事务管理器DTM的功能包括: (1)保证分布式事务的ACID特性,尤其是执行分布 式事务的原子性,使每个站点的子事务都成功执行,或都 不执行。这是通过向各个站点发 begin_transaction,commit或abort,create原语来实现的。 (2)负责协调由该站点发出的所有分布式事务的执 行。包括:启动分布式事务的执行;将分布式事务分解为 一些子事务,并将这些子事务分派到恰当的站点上去执 行;决定分布式事务的终止,即决定在该分布式事务中所 包含的所有站点上的子事务都撤销或都提交。,(3)支持分布式事务的执行位置透明性,这也是分 布式事务管理的最基本要求。分布式事务管理器根 据事务内部的逻辑划分为若干子事务,按某种要求 分布到相应站点上执行,最后由源发站点提供事务 的最终结果。它实现了对网络上各站点的各个子事 务的监督与管理,完成对整个分布式事务执行过程 的调度和管理,从而保证分布式数据库系统的高效 率。,分布式事务执行的控制模型 分布式事务的控制模型是指协调分布式事务中 各成员DBMS执行其子事务的通用方法; 控制分布式事务执行的控制模型有: 1)主从模型 2)三角模型 3)层次控制模型,图6 分布式执行的主从控制模型,图7 分布式执行的三角控制模型,图8 分布式执行的层次控制模型,分布式数据库系统中的故障,事务故障恢复的基本概念 研究数据库系统中故障的恢复,主要是指如何恢复因 故障而破坏的数据库,使数据库恢复到一个正确,一致的 状态。恢复的基本原理是数据冗余,即利用冗余存储在别 处的信息和数据,部分或全部重建数据库。 1. 事务故障和事务恢复 当发生事务故障时,保证事务原子性的措施称为事务 故障恢复,简称为事务恢复。 事务恢复主要时依靠日志来实现的。 2. 事务状态及状态转移 为保证可恢复性,系统需要保存事务的起始,终止, 提交或撤销的时间轨迹,事务恢复管理器还对下列操作进 行跟踪记录。,1) begin transaction:标记事务开始执行。 2) read或write:表示事务对某个数据项进行读或写。 3) End _transaction:表示事务的读或写操作已经结束,并 标记事务执行结束。但是,在这一点,需要检查被该事务 所作的改变是否永久写入数据库(已提交),或事务由于 违反可串行性或其他原因而被撤销。 4) commit_transaction:表示事务已经成功结束,因此事务 执行的任何改变可以安全提交到数据库并且不会被撤销。 5) rollback(或 abort):表示事务没有成功结束,因此必须撤 销事务对数据库所作的任何改变或影响。,read/write Begin end transaction transaction commit abort abort,active,Partially committed,committed,failed,terminated,3.事务的提交点 当事务T所有的站点数据库存取操作都已成功执行, 并且所有操作对数据库的影响都已记录在日志中时,该事 务T就到达提交点(committed point).提交点后事务就成为 已提交的事务,并且假定其结果已永久记录在数据库中 (事务的永久性)。然后事务在日志中写入提交记录 commit,T.在系统发生故障时,需要扫描日志,检查那 些已在日志中写入start_transaction,T,但没有写入 commit,T的所有事务T;恢复时必须回滚这些事务以取 消他们对数据库的影响。此外,还必须对日志中记录的已 提交事务的所有写操作进行恢复,这样他们对数据库的作 用才可根据这些记录重做。 需要注意的是,必须将日志文件保存在磁盘上。在事 务到达提交点以前,还未写到磁盘的日志的任何部分,必 须被写入磁盘,这称为事务提交前强制写(force writing)日 志。,4.日志,档案库和检查点 (1)日志 为了能够从故障状态中恢复由影响的事务,系统维 护一个日志(log)来保存所有影响数据库项的值的事务操作 的信息,这些信息可以用于故障时的恢复。日志保存在磁 盘上,这样除了磁盘和灾难性故障外,它不会受到任何影 响。另外,日志会被定期备份到归档存储设备(例如磁 带)中,以预防磁盘和灾难性故障。下面列出的是日志的 条目类型(称为日志记录)和每个类型设计的相关动作。 在条目中。T表示唯一事务标识(transaction_id)用于标识 每个事务,通常由系统自动生成:,start_transaction,T:表示事务T开始执行。 write_item,T,X,旧值,新值:表示事务T已将数据项X的值从旧值改为新值。 read_item,T,X:表示事务T已读取数据项X的值。 commit,T:表示事务T已成功完成,其结果已被提交(永久记录)给数据库。 abort,T:表示事务T已被撤销。 Log:记录长度及用于恢复过程的辅助信息,如指向本事务前一日志记录的指针,检查点记录等。,(2)档案库 一个大型的系统一天可以很容易地产生大量的Log记 录因此,将日志全部存放在盘中是不现实的。故一般将 日志划分为两部分,一部分是当前活动的联机部分,存放 在直接存取设备上,称为直接存取数据集(direct access data set)或简称日志数据集(log data set).另一部分是档案 存储部分,存放在二级存储设备上,例如磁带上。每当数 据集满时就转存到档案存储设备中去。存放日志的档案存 储设备称日志档案库(log archive). 为了防止因介质故障而破坏数据库,要定期将整个数 据库的全部内容转储到档案库中去。存放数据库的档案存 储设备称数据库档案库(DB archive).,(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中的地址记 入”重启动文件”中。,在写检查点时,为了保证检查点之前所作的工 作都是有效的,防止故障引起缓冲区信息的丢失, 因此在写检查点时要将缓冲区中的所有内容写入到 永久存储设备中,而且采取 “先写日志”的原则。 使用检查点方法可以改善恢复效率。当事务T在 一个检查点之前提交,T对数据库所做的修改一定都 已写入数据库,写入时间是在这个检查点建立之前 或在这个检查点建立之时。这样在进行恢复处理 时,没有必要对事务T执行REDO操作。,系统出现故障时恢复子系统将根据事务的不同状态采取不 同的恢复策略,如图: Tc(检查点) Tf(系统故障) 时间 t1 不要REDO t2 REDO t3 撤销 t12 REDO t5 撤销 T1:在检查点之前提交。 T2:在检查点之前开始执行,在检查点之后故障点之前提交。 T3:在检查点之前开始执行,在故障点时还未完成。 T12:在检查点之后开始执行,在故障点之前提交。 T5:在检查点之后开始执行,在故障点时还未完成。,事务故障的恢复 1.事务恢复的原则 (1)孤立和逐步退出事务的原则 对于不影响其他事务的可排除性局部故障例如事务操作的删 除、超时、违反完整性规则、资源、限制、死锁等,应令某个事务 孤立地和逐步地退出将其所做过的修改复原,即做UND0。 (2)成功结束事务原则 成功结束事务所做过的修改应超越各种故障而存在,也就是重做 (REDO)它所做过的所有修改数据库的操作。 (3)夭折事务的原则 若发生了非局部性的不可排除的故障,例如系统崩溃,则撤消 全部事务,恢复到初态:这有两种做法,一种是利用数据库的备份 实现;另一种是按逆向顺序操作,复原其启动以来所做过的一切修 改。,2.本地事务的恢复 本地事务的恢复过程类似于集中式数据库系统中事务 的恢复。当故障排除后,由局部事务管理器的恢复子系统 执行事务恢复,过程如图12.11所示。,(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记录。,3.分布式事务的恢复 在分布式事务恢复中,本地事务的恢复类同于集中式事务的恢复,由本地事务管

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论