数据库事务管理 PPT课件_第1页
数据库事务管理 PPT课件_第2页
数据库事务管理 PPT课件_第3页
数据库事务管理 PPT课件_第4页
数据库事务管理 PPT课件_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

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

文档简介

1 事务管理 2 事务管理 问题的引入事务并发控制数据库恢复 3 问题的引入 多用户同时操作数据库系统在执行用户的请求时出现故障 例如 帐户A转帐给帐户B10000元 UPDATEYHZHSET余额 余额 10000WHERE帐号 A UPDATEYHZHSET余额 余额 10000WHERE帐号 B 4 事务的基本概念 事务 Transaction 用户定义的一个对数据库读写操作序列一个不可分割的工作单位在关系数据库中 事务可以是一条 一组SQL语句 或整个程序 事务和程序的区别 程序包含多个事务 5 事务的性质 原子性 Atomicity 事务中的操作要么都做 要么都不做 AllorNone 一致性 Consistency 事务执行的结果必须使数据库从一个一致性状态变到另一个一致性状态与原子性密切相关隔离性 Isolation 并发执行的各事务不能相互干扰持续性 永久性 Durability 事务一旦提交 它对数据库的更新不再受后继操作或故障的影响 DBMS中事务处理必须保证其ACID特性 这样才能保证数据库中数据的安全和正确 6 银行转帐 从帐号A中取出一万元 存入帐号B 定义一个事务 该事务包括两个操作这两个操作要么全做 要么全不做全做或者全不做 数据库都处于一致性状态 如果只做一个操作 数据库就处于不一致性状态 事务的性质 7 T1的修改被T2覆盖了 事务的性质 8 事务的基本概念 事务的开始和结束可以由用户显式控制 SQL定义事务的语句Begintransaction 事务开始 Committransaction 事务提交 正常结束 将更新结果写入磁盘 Rollbacktransaction 事务回滚 撤销事务中所有已完成的更新 Savetransaction 保存点 可以只撤消部分事务 9 事务的基本概念 显式定义方式BEGINTRANSACTIONBEGINTRANSACTIONSQL语句1SQL语句1SQL语句2SQL语句2 COMMITROLLBACK 10 COMMIT事务正常结束提交事务的所有操作 读 更新 事务中所有对数据库的更新永久生效ROLLBACK事务异常终止事务运行的过程中发生了故障 不能继续执行 回滚事务的所有更新操作事务回滚到开始时的状态 事务的基本概念 11 事务的基本概念 隐含事务与自动提交ALTERINSERTCREATEDELETEDROPSELECTUPDATETRUNCATETABEL 12 例 删除仓库 WH1 并将职工T表当中所有在 WH1 仓库中职工记录删除 事务案例 BEGINTRANSACTIONMYDELDELETEFROM仓库TWHERE仓库号 WH1 DELETEFROM职工TWHERE仓库号 WH1 IF ERROR0ROLLBACKTRANSACTIONMYDELELSECOMMITTRANSACTIONMYDEL 13 恢复机制与并发控制机制的提出事务在运行过程中因某种故障被强行终止 数据库一致性被破坏 需进行恢复 多个事务并行运行时 不同事务的各种操作交叉进行 为保证各事务的执行互不干扰 需进行并发控制 事务是恢复和并发控制的基本单位 事务的基本概念 14 干扰问题解决干扰 封锁封锁不当 死锁封锁与隔离级别 并发控制 15 干扰问题 丢失更新问题未提交依赖 读 脏 数据 问题不一致分析问题幻象读问题 16 丢失更新问题 例 旅客A来到A售票处 要买一张15日北京到上海的13次直达快速列车的软卧车票 售票员A 下称用户A 在终端A查看剩余票信息 几乎在同时 旅客B来到B售票处 也要买一张15日北京到上海的13次直达快速列车的软卧车票 售票员B 下称用户B 从终端B查到了同样的剩余票信息 旅客A买了一张15日13次7车厢5号下铺的软卧票 用户A更新剩余票信息并将它存入数据库 这时用户B不知道用户A已经将15日13次7车厢5号下铺的软卧票卖出 使旅客B也买了一张15日13次7车厢5号下铺的软卧票 用户B更新剩余票信息并将它存入数据库 重复了用户A已经做过的更新 总的效果 15日13次7车厢5号下铺的软卧票卖了两次 其原因是 允许了用户B在过时的信息基础上去更新数据库 而没有迫使他去看最新的信息 17 丢失更新问题 用SQL术语描述丢失更新问题 18 未提交依赖问题 未提交依赖问题也称为读 脏 DirtyRead 数据问题 查询一个已经被其他事务更新 但尚未提交的元组 将会引起未提交依赖问题 19 不一致分析问题 不一致分析问题也称为不可重复读问题 很多应用可能需要校验功能 这时往往需要连续两次或多次读数据进行校验和分析 结果由于其他事务的干扰 使得前后结果不一致 从而产生校验错误 即不一致的分析 20 幻象读问题 幻象读问题与不一致分析问题有关 当事务A读数据时 事务B在对同一个关系进行插入或删除操作 这时事务A再读同一条件的元组时 会发现神秘地多出了一些元组或丢失了一些元组 把这种现象称作幻象读 21 可串行性 各单个事务如能将数据库从一个正确状态转变为另一个正确状态 则认为该事务是正确的 按任何一个串行顺序依次执行多个事务是正确的 事物交叉过程是正确的 当且仅当其与串行执行过程等价 则事务是可串行化的 22 可串行性 例子 两个事务 初值 A 10 B 10 T1 SELECTAUPDATEA A 5SELECTBUPDATEB B 5 T2 SELECTBUPDATEB B 5 23 可串行性 T1 SELECTAUPDATEA A 5SELECTBUPDATEB B 5 T2 SELECTBUPDATEB B 5 24 可串行性 T1 SELECTAUPDATEA A 5SELECTBUPDATEB B 5 T2 SELECTBUPDATEB B 5 25 可串行性 T1 SELECTAUPDATEA A 5SELECTBUPDATEB B 5 T2 SELECTBUPDATEB B 5 26 可串行性 T1 SELECTAUPDATEA A 5SELECTBUPDATEB B 5 T2 SELECTBUPDATEB B 5 不可串行化 27 封锁 封锁的基本技术封锁机制SQLServer中与封锁有关的命令封锁粒度意向锁 28 封锁的基本技术 当需要查询或更新数据时 先对数据进行封锁 以避免来自其他事务的干扰 针对不同的干扰问题可以有不同的封锁机制 以丢失更新问题为例 实施封锁的基本思想是 当一个用户对一个表或记录进行更新时 封锁该表或记录 使其他用户不能在同一时刻更新相同的表或记录 迫使其他用户在更新后的基础上 而不是在更新前的基础上 再实施另外的更新操作 29 封锁的基本技术 实施封锁以后的事件进程 30 封锁机制 共享封锁独占封锁更新封锁 有些封锁在执行完相应操作后就自动释放封锁 有些封锁则保持到事务结束 提交或撤消 时才释放 无论如何 所有的封锁都会在事务结束时自动释放 31 共享封锁 共享封锁是为读操作设置的一种封锁 所以也称作读封锁 或简称S锁 目的是想读到一组不变的数据 也就是在读数据的过程中 不允许其他用户对该数据进行任何修改操作 这种封锁可以保证最大的并发性 任何数量的用户都可以同时对同样的数据施加这种共享锁 已经实施共享锁的表拒绝来自其他事务的独占封锁和更新封锁 32 独占封锁 独占封锁也叫排他封锁 它是为修改操作设置的一种封锁 也称为写封锁 或简称为X锁 这是最严格的一类封锁 当需要对表实施插入 删除或修改操作时 应该使用独占封锁 已经实施独占封锁的表 拒绝来自其他用户的任何封锁 33 更新封锁 当需要对一个记录或一组记录进行更新时 只是修改 不包括插入和删除 使用更新封锁 该封锁的目的是防止其他用户在同一时刻修改同一记录 已经实施更新封锁的记录 拒绝来自其他用户的任何封锁 34 SQLServer中与封锁有关的命令 SQLServer的封锁操作是在相关语句的 WITH 子句中完成的 该短语可以在SELECT INSERT UPDATE和DELETE等语句中指定表级锁定的方式和范围 35 SQLServer中与封锁有关的命令 常用的封锁关键词有 TABLOCK 对表施行共享封锁 在读完数据后立刻释放封锁 此类封锁可以避免读 脏 数据 但不具有可重复读的特性 HOLDLOCK 与TABLOCK一起使用 可将共享锁保留到事务完成 而不是在读完数据后立即释放锁 这样可以保证数据的可重复独特性 36 SQLServer中与封锁有关的命令 NOLOCK 不进行封锁 此关键词仅应用于SELECT语句 这样可能会读取未提交事务的数据 即有可能发生 脏 读 TABLOCKX 对表实施独占封锁 UPDLOCK 对表中的指定元组实施更新封锁 这时其他事务可以对同一表中的其他元组也实施更新封锁 但是不允许对表实施共享封锁和独占封锁 37 SQLServer中与封锁有关的命令 R 日期 车次 座别 座位号 状态 状态初值为 NULL DECLARE ddatetime tchar 6 schar 2 nchar 10 BEGINTRANSACTIONSELECT n 座位号FROMRWITH UPDLOCK WHERE日期 dAND车次 tAND座别 sAND状态ISNULL IF UPDATERSET状态 Y WHERE座位号 nAND日期 dAND车次 tAND座别 sCOMMITTRANSACTIONELSEROLLBACKTRANSACTION 38 封锁粒度 封锁的对象可以是表 也可以是元组等 我们把封锁对象的大小称为封锁粒度 Granularity 封锁的对象可以是逻辑单元 如表和元组等 也可以是物理单元 如数据页和数据块等 数据库管理系统一般都具有多粒度锁定功能 允许一个事务锁定不同类型的资源 39 封锁粒度 锁定在较小的粒度 例如行 可以增加并发操作的性能 但系统开销也较大 这是因为如果封锁的粒度小 则意味着需要的锁多 从而需要系统控制更多的锁 锁定在较大的粒度 例如表 会降低操作的并发性 这是因为锁定整个表限制了其他事务对表中任意部分进行访问 封锁粒度大 则不需要太多的封锁 由于需要维护的锁较少 所以系统开销较低 40 意向锁 为了降低封锁的成本 提高并发的性能 数据库管理系统还支持一种意向锁 IntentionLock 意向锁表示一种封锁意向 当需要在某些底层资源上 如元组 获取封锁时 可以先对高层资源 如表 实施意向锁 41 死锁 产生死锁的原因避免死锁发现死锁解决死锁 42 产生死锁的原因 右图示意了两个并发事务所发生事件的序列 两个程序都为了等待对方释放数据资源而产生死锁 43 避免死锁 相同顺序法所有的用户程序约定都按相同的顺序来封锁表一次封锁法为了完成一个事务 一次性封锁所需要的全部表 44 避免死锁的封锁 45 发现死锁 超时法即一个事务在等待的时间超过了规定的时限后就认为发生了死锁 这种方法非常不可靠 如果设置的等待时限长 则不能及时发现死锁 如果设置的等待时限短 则可能会将没有发生死锁的事务误判为死锁 46 发现死锁 等待图法即通过有向图判定事务是否是可串行化的 如果是则说明没有发生死锁 否则说明发生了死锁 具体思路是 用节点来表示正在运行的事务 用有向边来表示事务之间的等待关系 如右图所示 如果有向图中发现回路 则说明发生了死锁 47 解决死锁 发现死锁后解决死锁的一般策略是 自动使 年轻 的事务 即完成工作量少的事务 先退回去 然后让 年老 的事务 即完成工作量多的事务 先执行 等 年老 的事务完成并释放封锁后 年轻 的事务再重新执行 48 隔离级别 在避免干扰的情况下 适当的降低隔离级别 从而提高并发的操作效率 隔离级别越低 并发操作效率越高 但是产生干扰的可能性也越大 隔离级别越高 并发操作效率越低 同时产生干扰的可能性也越小 在设计应用时 可以在所能容忍的干扰程度范围内 尽可能降低隔离级别 提高应用的执行效率 49 隔离级别 未提交读 READUNCOMMITTED 最低级别 仅可保证不读取物理损坏的数据 隔离级别最低 提交读 READCOMMITTED SQLServer默认级别 可以保证不读取 脏 数据可重复读 REPEATABLEREAD 可以保证读一致性 避免不一致分析问题 可串行化 SERIALIZABLE 事务隔离的最高级别 事务之间完全隔离 SQL支持4种隔离级别 50 隔离级别 SETTRANSACTIONISOLATIONLEVEL READUNCOMMITTED READCOMMITTED REPEATABLEREAD SERIALIZABLE 设置隔离级别的命令 51 数据库恢复 数据库恢复概述备份恢复与还原 52 数据库恢复概述 故障是不可避免的计算机硬件故障系统软件和应用软件的错误操作员的失误恶意的破坏故障的影响运行事务非正常中断破坏数据库 53 数据库管理系统对故障的对策DBMS提供恢复子系统保证故障发生后 能把数据库中的数据从错误状态恢复到某种逻辑一致的状态保证事务ACID恢复技术是衡量系统优劣的重要指标 数据库恢复概述 54 故障类型 事务故障系统故障磁盘介质故障 55 事务故障 什么是事务故障某个事务在运行过程中由于种种原因未运行至正常终止点就夭折了事务故障的常见原因输入数据有误运算溢出违反了某些完整性限制某些应用程序出错并行事务发生死锁 56 事务故障的恢复 发生事务故障时 夭折的事务可能已把对数据库的部分修改写回磁盘事务故障的恢复 撤消该事务清除该事务对数据库的所有修改 使得这个事务象根本没有启动过一样 57 系统故障 什么是系统故障整个系统的正常运行突然被破坏所有正在运行的事务都非正常终止内存中数据库缓冲区的信息全部丢失外部存储设备上的数据未受影响 58 系统故障的恢复 清除尚未完成的事务对数据库的所有修改系统重新启动时 恢复程序要强行撤消所有未完成事务将缓冲区中已完成事务提交的结果写入数据库系统重新启动时 恢复程序需要重做所有已提交的事务 59 介质故障 硬件故障使存储在外存中的数据部分丢失或全部丢失介质故障比前两类故障的可能性小得多 但破坏性大得多 60 介质故障的恢复 装入数据库发生介质故障前某个时刻的数据副本重做自此时始的所有成功事务 将这些事务已提交的结果重新记入数据库 61 备份类型 双机热备份双工备份磁盘镜像冗余磁盘阵列数据库备份技术 62 日志 对备份的补充 记录所有对数据库的更新操作 注意 应该将日志和主数据库安排在不同的存储设备上 63 恢复类型 简单恢复允许将数据库恢复到最新的备份 完全恢复允许将数据库恢复到故障点状态 ALTERDATABASE仓库管理SETRECOVERYFULLALTERDATABASE仓库管理SETRECOVERYSIMPLE 64 备份的类型 全备份增量备份事务日志备份文件和文件组备份 65 全备份 完整地备份整个数据库 同时也备份与该数据库相关的事务处理日志 BACKUPDATABASEdatabase nameTO DISK TAPE physical backup device name 例 将 仓库管理 数据库完全备份到H盘根目录下 BACKUPDATABASE仓库管理TODISK H CKGL BAK 66 增量备份 只备份自上次数据库备份后发生更改的数据 BACKUPDATABASEdatabase nameTO DISK TAPE physical backup device name WITHDIFFERENTIAL 例 将 仓库管理 数据库增量备份到H盘根目录下 BACKUPDATABASE仓库管理TODISK H CKGL1 BAK WITHDIFFERENTIAL 67 注 增量备份一定是在全备份的基础上进行的 在一次全备份后可以连续进行增量备份 增量备份会增加备份管理的难度 增量备份 68 事务日志备份 事务日志备份序列提供了连续的事务信息链 可支持从全备份 增量备份或文件备份进行快速恢复 BACKUPLOGdatabase nameTO DISK TAPE physical backup device name 例 将 仓库管理 数据库的事务日志备份到H盘根目录下 BACKUPLOG仓库管理TODISK H CKGLLOG BAK 注 简单恢复模型不允许备份事务日志 69 文件和文件组备份 可以备份和恢复数据库中的个别文件 文件备份和恢复操作必须与事务日志备份一起使用 因此 文件备份不适用于简单恢复模型 必须在创建文件备份之后才能创建事务日志备份 70 文件和文件组备份 BACKUPDATABASEdatabase name FILE logic file list FILEGROUP filegroup list TO DISK TAPE physical backup device name 例 将 仓库管理 数据库中的 仓库管理 DATA 文件备份到H盘根目录下 BACKUPDATABASE仓库管理FILE 仓库管理 DA

温馨提示

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

评论

0/150

提交评论