7数据库恢复技术.ppt
文本预览下载声明
事务 如银行转帐问题:假定资金从帐户A转到帐户B,至少需要两步: ①帐户A的资金减少 ②然后帐户B的资金相应增加 创建数据库并开设两个账户 模拟转帐 开户后两个帐户的 余额总和为:1000+1=1001元 错误分析: 执行失败,故张三还是1000元 原因UPDATE语句违反约束:余额=1元 解决方法:使用事务 事务的概念 事务(Transaction): 事务是用户定义的一个数据库操作序列,这些操作作为一个不可分割的工作单元,要么全做,要么全不做。 数据库恢复和并发控制的基本单位 数据库系统中通常有多个事务并行运行 事务和程序是两个概念 在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序 一个应用程序通常包含多个事务 事务的特性(ACID特性) 原子性(Atomicity) 事务是一个完整的操作。事务的各步操作是不可分的(原子的);要么都执行,要么都不执行 一致性(Consistency) 事务在完成时,必须使所有的数据都保持一致状态,以保持所有数据的完整性。即所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的。 隔离性(Isolation) 对并发执行的事务,一个事务的执行不能被其他事务干扰 各个事务之间不能互相干扰 在同一事务内部操作及使用的数据对其他并发事务是隔离的 持续性(Durability) 事务完成后,它对数据库的修改被永久保持,接下来的其他操作或故障不应该对其执行结果有任何影响。 DBMS中的事务控制 隐式的事务控制: 用户未显式地定义事务时,DBMS按缺省规定自动划分事务 说明:事实上,有时一条SQL语句的工作也有事务特点 例如一条删除多行数据的SQL语句。 显式的事务控制: 事物的开始与结束由用户显示地控制 实际开发中通常用显示事务,明确指定事务的起、止边界 SQL语言中定义事务的语句 Begin transaction——事务开始 Commit——事务提交,正常结束,将更新结果写入磁盘 COMMIT语句还释放资源,如事务使用的锁。 Rollback——事务回滚,撤销事务中所有已完成的更新 当事务中出现错误,或者用户决定取消事务时,可回滚该事务,将数据返回到事务开始时的状态,并释放事务占用的资源 使用事务解决银行转帐问题 判断某条语句执行是否出错: 使用全局变量@@ERROR可判断当前SQL语句执行是否有错 为判断事务中所有SQL语句是否有错,可对错误进行累计;如: SET @errorSum =@errorSum +@@error 查看转帐1000的结果 事务管理的内容 引起事务不完全的三个故障原因: 由于出现异常,中途中止或不成功退出; 可能因电源等故障,系统崩溃; 遇到如不能访盘等异常状态而中止。 ACID准则的保证: 不仅在系统正常如此,在系统故障时也应如此;在单个事务执行时如此,在事务并发执行时也应如此。 故障恢复: 保证事务在故障时满足ACID准则的技术; 并发控制: 保证事务在并发执行时满足ACID准则的技术; 事务管理:故障恢复和并发控制的合称。 五.并发控制 为什么需要并发控制 数据库系统是多用户共享的系统; 数据库管理系统必须提供并发控制机制; 多个用户并发地存取数据库时会产生多个事务同时存取同一数据的情况。 实例分析:考虑飞机订票系统中的一个活动序列 1)甲售票点(甲事务)读出某航班的机票余额A,设A=16; 2)乙售票点(乙事务)读出同一航班的机票余额A,也为16; 3)甲售票点卖出一张机票,修改余额A=A-1;所以A为15,把A写回数据库; 4)乙售票点也卖出一张机票,修改余额A=A-1;所以A为15,把A写回数据库。 结果明明卖出两张机票,数据库中机票余额只减少1。 多事务执行方式 (1)事务串行执行 每个时刻只有一个事务运行,其他事务必须等到这个事务结束以后方能运行 特点:不能充分利用资源,数据库资源难以共享 (2)交叉并发方式(interleaved concurrency) 并行执行事务的各个操作轮流交叉运行 特点:在单处理机系统中的并发方式,能够减少处理机的空闲时间,提高系统的效率 (3)同时并发方式(simultaneous concurrency) 多个处理机同时运行,其中每个处理机分别运行一个事务,能实现多个事务真正并行运行 特点:最理想的并发方式,但受制于硬件环境 三类不一致性(1/2) 并发操作带来的数据不一致性包括三类: 丢失修改、不可重复读和读“脏”数据 丢失修改 两个事务T1和T2读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改丢失。 读“脏”数据 事务1修改某一数据,并写回磁盘 事务2读取同一数据后 事务1因某种原因被撤消,这时事务1已修改过的数据恢复原值 事务2读到的数据就与数据库
显示全部