分布式数据库中的事务管理和恢复.ppt

上传人:w****2 文档编号:6295515 上传时间:2020-02-21 格式:PPT 页数:44 大小:370.86KB
返回 下载 相关 举报
分布式数据库中的事务管理和恢复.ppt_第1页
第1页 / 共44页
分布式数据库中的事务管理和恢复.ppt_第2页
第2页 / 共44页
分布式数据库中的事务管理和恢复.ppt_第3页
第3页 / 共44页
点击查看更多>>
资源描述
分布式事务概述分布式事务的执行与恢复两阶段提交协议分布式数据库中的数据更新分布式事务增强数据库一致性 本章主要内容 分布式事务概述 分布式事务定义和特性分布式事务的结构和事务状态分布式事务管理的问题和目标 分布式事务定义和特性1 分布式事务的定义事务 是为了实现特定的业务功能而访问数据库的一个最小的逻辑工作单位 它是一个操作序列 分布式事务 在分布式系统中 对分布在网络中不同站点上数据库存取操作的序列 一个分布式事务即全局事务 通常由一个主 父 事务和在不同站点上执行的子事务 局部事务 组成 主事务负责事务的开始 提交和异常中止 子事务完成对相应站点上数据库的访问操作 全局事务是访问或更新多个站点上数据的事务 局部事务是仅仅访问或更新一个站点上数据的事务 2 分布式事务的特性 ACID原子性 atomicity 指事务执行时的不可分割性 这个特性确保了每个事务要么全部发生 要么全部不发生 一致性 consistency 事务执行的结果必须使数据库从一个一致性状态转到另一个一致性状态 隔离性 isolaty 一个事务的执行不被其他事务干扰 持久性 durability 一个事务一旦提交 它对数据库中数据的改变应该是永久性的 无论系统发生任何故障 都不会丢失该事务的执行结果 应用 分布式事务的结构 分布式事务 分布式事务 分布式事务 子事务 子事务 子事务 子事务 子事务 子事务 分布式事务的一般结构为 BeginTransaction原语 开始一个事务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 SelectAMOUNTinto FROM AMOUNTfromACCOUNTwhereACCOUNT NUMBER FROM ACC if FROM AMOUNT AMOUNT 0thenabortelsebeginUpdateACCOUNTsetAMOUNT AMOUNT AMOUNTwhereACCOUNT NUMBER FROM ACC UpdateACCOUNTsetAMOUNT AMOUNT AMOUNTwhereACCOUNT NUMBER TO ACC Commitend图1全局级的FUND TRANSFER事务 ROOT AGENTAGENT 输入 汇出金额和转出 转入账号 事务开始 检查转出账号中是否又足够的转出资金 更新转出账号存款余额创建代理Agent向代理送信息 转入帐号 金额 等待来自Agent的消息 成功 提交事务 成功结束 否 撤销事务 失败结束 接收来自根代理的消息 更新转入账号存款余额 发送执行消息给根代理 成功或失败 ROOT AGENT Read terminal AMOUNT FROM ACC TO ACC Begin transaction SelectAMOUNTinto FROM AMOUNTfromACCOUNTwhereACCOUNT NUMBER FROM ACCOUNT if FROM AMOUNT AMOUNT 0thenabortelsebeginUpdateACCOUNTsetAMOUNT AMOUNT AMOUNTwhereACCOUNT FROM ACC CreateAGENT SENDtoAGENT AMOUNT TO ACC CommitendAGENT ReceivefromROOT AGENT AMOUNT TO ACC UpdateACCOUNTsetAMOUNT AMOUNT AMOUNTwhereACCOUNT TO ACC SendtoROOT 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原语包括 localbegin transaction localcommitlocalabort 分布式事务管理器DTM的功能包括 1 保证分布式事务的ACID特性 尤其是执行分布式事务的原子性 使每个站点的子事务都成功执行 或都不执行 这是通过向各个站点发begin transaction commit或abort create原语来实现的 2 负责协调由该站点发出的所有分布式事务的执行 包括 启动分布式事务的执行 将分布式事务分解为一些子事务 并将这些子事务分派到恰当的站点上去执行 决定分布式事务的终止 即决定在该分布式事务中所包含的所有站点上的子事务都撤销或都提交 3 支持分布式事务的执行位置透明性 这也是分布式事务管理的最基本要求 分布式事务管理器根据事务内部的逻辑划分为若干子事务 按某种要求分布到相应站点上执行 最后由源发站点提供事务的最终结果 它实现了对网络上各站点的各个子事务的监督与管理 完成对整个分布式事务执行过程的调度和管理 从而保证分布式数据库系统的高效率 分布式事务执行的控制模型分布式事务的控制模型是指协调分布式事务中各成员DBMS执行其子事务的通用方法 控制分布式事务执行的控制模型有 1 主从模型2 三角模型3 层次控制模型 图6分布式执行的主从控制模型 图7分布式执行的三角控制模型 图8分布式执行的层次控制模型 分布式数据库系统中的故障 事务故障恢复的基本概念研究数据库系统中故障的恢复 主要是指如何恢复因故障而破坏的数据库 使数据库恢复到一个正确 一致的状态 恢复的基本原理是数据冗余 即利用冗余存储在别处的信息和数据 部分或全部重建数据库 1 事务故障和事务恢复当发生事务故障时 保证事务原子性的措施称为事务故障恢复 简称为事务恢复 事务恢复主要时依靠日志来实现的 2 事务状态及状态转移为保证可恢复性 系统需要保存事务的起始 终止 提交或撤销的时间轨迹 事务恢复管理器还对下列操作进行跟踪记录 1 begintransaction 标记事务开始执行 2 read或write 表示事务对某个数据项进行读或写 3 End transaction 表示事务的读或写操作已经结束 并标记事务执行结束 但是 在这一点 需要检查被该事务所作的改变是否永久写入数据库 已提交 或事务由于违反可串行性或其他原因而被撤销 4 commit transaction 表示事务已经成功结束 因此事务执行的任何改变可以安全提交到数据库并且不会被撤销 5 rollback 或abort 表示事务没有成功结束 因此必须撤销事务对数据库所作的任何改变或影响 read writeBeginendtransactiontransactioncommitabortabort active Partiallycommitted committed failed terminated 3 事务的提交点当事务T所有的站点数据库存取操作都已成功执行 并且所有操作对数据库的影响都已记录在日志中时 该事务T就到达提交点 committedpoint 提交点后事务就成为已提交的事务 并且假定其结果已永久记录在数据库中 事务的永久性 然后事务在日志中写入提交记录 commit T 在系统发生故障时 需要扫描日志 检查那些已在日志中写入 start transaction T 但没有写入 commit T 的所有事务T 恢复时必须回滚这些事务以取消他们对数据库的影响 此外 还必须对日志中记录的已提交事务的所有写操作进行恢复 这样他们对数据库的作用才可根据这些记录重做 需要注意的是 必须将日志文件保存在磁盘上 在事务到达提交点以前 还未写到磁盘的日志的任何部分 必须被写入磁盘 这称为事务提交前强制写 forcewriting 日志 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记录 因此 将日志全部存放在盘中是不现实的 故一般将日志划分为两部分 一部分是当前活动的联机部分 存放在直接存取设备上 称为直接存取数据集 directaccessdataset 或简称日志数据集 logdataset 另一部分是档案存储部分 存放在二级存储设备上 例如磁带上 每当数据集满时就转存到档案存储设备中去 存放日志的档案存储设备称日志档案库 logarchive 为了防止因介质故障而破坏数据库 要定期将整个数据库的全部内容转储到档案库中去 存放数据库的档案存储设备称数据库档案库 DBarchive 3 检查点为了便于恢复 在日志中增加一类新的记录 检查点 checkpoint 以标识检查点前已执行完的事务是正确的 增加一个重启动文件 检查点记录的内容包括 1建立检查点时刻所有正在执行的事务清单 2这些事务最近一个日志记录的地址 重启动文件记录各个检查点记录在日志文件中的地址 每遇检查点 就做如下工作 1 将Log缓冲区内容写入LogDataSet中 2 在LogDataSet中写入这次检查点记录信息 当前活动事务表 每一事务最近一次Log记录在LogDataSet中的位置 3 将DB缓冲区内容写入DB 更新当前DB 4 将这次CheckpointRecord在LogDataSet中的地址记入 重启动文件 中 在写检查点时 为了保证检查点之前所作的工作都是有效的 防止故障引起缓冲区信息的丢失 因此在写检查点时要将缓冲区中的所有内容写入到永久存储设备中 而且采取 先写日志 的原则 使用检查点方法可以改善恢复效率 当事务T在一个检查点之前提交 T对数据库所做的修改一定都已写入数据库 写入时间是在这个检查点建立之前或在这个检查点建立之时 这样在进行恢复处理时 没有必要对事务T执行REDO操作 系统出现故障时恢复子系统将根据事务的不同状态采取不同的恢复策略 如图 Tc 检查点 Tf 系统故障 时间t1不要REDOt2REDOt3撤销t12REDOt5撤销T1 在检查点之前提交 T2 在检查点之前开始执行 在检查点之后故障点之前提交 T3 在检查点之前开始执行 在故障点时还未完成 T12 在检查点之后开始执行 在故障点之前提交 T5 在检查点之后开始执行 在故障点时还未完成 事务故障的恢复1 事务恢复的原则 1 孤立和逐步退出事务的原则对于不影响其他事务的可排除性局部故障 例如事务操作的删除 超时 违反完整性规则 资源 限制 死锁等 应令某个事务孤立地和逐步地退出 将其所做过的修改复原 即做UND0 2 成功结束事务原则成功结束事务所做过的修改应超越各种故障而存在 也就是重做 REDO 它所做过的所有修改数据库的操作 3 夭折事务的原则若发生了非局部性的不可排除的故障 例如系统崩溃 则撤消全部事务 恢复到初态 这有两种做法 一种是利用数据库的备份实现 另一种是按逆向顺序操作 复原其启动以来所做过的一切修改 2 本地事务的恢复本地事务的恢复过程类似于集中式数据库系统中事务的恢复 当故障排除后 由局部事务管理器的恢复子系统执行事务恢复 过程如图12 11所示 1 从 重启动文件 中读出最近的CheckpointRecord的地址 定出CheckpointRecord在LogDataSet中的地址 2 创建REDO表 初态为空 创建UNDO表 将CheckpointRecord中的活动事务表内容复制到UNDO表 3 从CheckpointRecord起沿Log向前检索 遇begintransaction的Log记录 将对应的事务记入UND0表 遇commit的Log记录 将对应的事务从UNDO表移入REDO表 直到Log完 4 反向检索Log 将UNDO表中的事务 按Log记录的操作 做UNDO 直到遇对应的begintransaction 5 再从CheckpointRecord起正向检索REDO表中事务的Log记录 并执行之 直到对应的commit记录 3 分布式事务的恢复在分布式事务恢复中 本地事务的恢复类同于集中式事务的恢复 由本地事务管理器具体执行 而整个分布式事务的恢复由分布式事务管理器与本地事务管理器协同完成 1 底层 为本地事务管理器层 这些LTM之间不需要进行通信联系 它们执行上层DTM代理发来的原语 实现图中的接口1 原语有 localbegin lcalcommit localabort localcreate 2 中间层 为分布式事务管理层 这是一组能互相交换报文的本地DTM代理组成 它们作为一个整体实现图中的接口2 即本地DTM整体与顶层总代理的接口 原语有 begintansaction commit abort create 3 顶层 为全局事务层 它由总代理和其他代理组成 由于己规定只有总代理才能发出接口2中的原语 因此只有总代理与中层DTM有接口关系 分布式事务恢复的参考模型 分布式事务的执行与恢复举例 图中 1 2 表示当总代理发出begintransaction命令 各DTM向各有关站点的LTM发出local begin命令 收到命令的LTM把信息记入日志 并将代理转变为子事务 激活 3 4 5 6 创建 激活 新代理 先由总代理发出createagent 源站点DTM送信息给相应站点上的DTM 收到命令站点的DTM向它的LTM发出local creat agent 该LTM将信息记入日志 并激活代理变为子事务执行之 如果事务撤消 先由代理发出abort命令 各DTM向相应的LTM发出local abort命令 各LTM记日志 分别恢复被执行过的活动 使相应子事务均被撤销 从而获得全局事务的撤消效果 如果事务提交 当总代理发出提交命令 提交是一复杂过程 主要的困难来源于下述事实 即分布式事务的正确提交要求它的全部子事务甚至在故障情况下也能本地提交 如果有一个或一个以上的子事务不能提交 就不能提交整个分布式事务 为实现这个原语 保证分布式事务的原子性 通常采用两阶段提交协议 简称2Pc 来处理
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!