《数据库系统原理与应用》第6章 数据库的事务处理与数据恢复.ppt_第1页
《数据库系统原理与应用》第6章 数据库的事务处理与数据恢复.ppt_第2页
《数据库系统原理与应用》第6章 数据库的事务处理与数据恢复.ppt_第3页
《数据库系统原理与应用》第6章 数据库的事务处理与数据恢复.ppt_第4页
《数据库系统原理与应用》第6章 数据库的事务处理与数据恢复.ppt_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

第6章数据库的事务处理与数据恢复 6 1事务管理的基本概念6 2并发控制6 3数据库恢复 6 1事务管理的基本概念 6 1 1事务 Transaction 的概念6 1 2事务的状态6 1 3事务的特性6 1 4SQLServer中的事务 返回首页 6 1 1事务 Transaction 的概念 事务是用户定义的数据库操作序列 这些操作可作为一个完整的工作单元 一个事务内的所有语句是一个整体 要么全部执行 要么全部不执行 即事务是不可再分的原子性工作 如在银行业务中 从帐户A转移资金X到帐户B 就是一个典型的事务 这个事务可以分解为两个动作 1 从账户A减去金额X 2 在账户B中加上金额X 返回本节 6 1 2事务的状态 事务的基本操作包括 1 事务开始 BEGIN TRANSACTION 事务开始执行 2 事务读写 Read Write 事务进行数据操作 3 事务结束 END TRANSACTION 事务完成所有的读 写操作 4 事务交付 COMMIT TRANSACTION 事务完成所有的读 写操作 并保存操作结果 返回本节 6 1 3事务的特性 事务所必须具有的重要特性包括 1 原子性 Atomicity 2 一致性 Consistency 3 隔离性 Isolation 4 持久性 Durability 上述的四个特性也简称为ACID特性 保证ACID特性是事务处理的重要任务 事务的ACID特性可能遭到破坏的原因有 1 多个事务并行运行时 不同事务的操作交叉执行 2 事务在运行过程中被强迫停止 返回本节 6 1 4SQLServer中的事务 SQLServer的事务分为两种类型 系统提供的事务和用户定义的事务 系统提供的事务是指在执行某些语句时 一条语句就是一个事务 它的数据对象可能是一个或多个表 视图 可能是表 视图 中的一行数据或多行数据 用户定义的事务以BEGINTRANSACTION语句开始 以COMMIT或ROLLBACK结束 其中 BEGINTRANSACTION 事务的开始标记 COMMITTRANSACTION 事务的结束标记 OLLBACKTRANSACTION 回滚 返回本节 6 2并发控制 6 2 1并发操作引起的问题6 2 2封锁6 2 3封锁出现的问题及解决方法6 2 4可串行化调度6 2 5SQLServer的并发控制机制 返回首页 6 2 1并发操作引起的问题 对事务的并发执行如果不加以控制 可能会导致数据库中数据的不一致性 一个最常见的并发操作的例子是飞机订票系统中的订票操作 例如 在该系统中的一个活动的序列 1 事务T1 动作1 甲售票员读出某航班的机票余额A 设A 16 2 事务T2 动作1 乙售票员读出同一航班的机票余额 A也为16 3 事务T1 动作2 甲售票员卖出一张机票 修改机票余额A A 1 所以A 15 把A写入数据库 4 事务T2 动作2 乙售票员卖出两张机票 修改机票余额A A 2 所以A 14 把A写入数据库 并发操作如果不加以控制 就可能引发下列数据的不一致性 1 丢失修改 LostUpdate 2 不可重复读 UnrepeatableRead 3 读 脏 数据 DirtyRead 1 丢失修改 LostUpdate 丢失修改是指事务T1与事务T2从数据库中读入同一数据并修改 事务T2提交的修改结果破坏了事务T1提交的修改结果 导致事务T1的修改被丢失 丢失修改的情况如图6 2所示 图6 2丢失修改 2 不可重复读 UnrepeatableRead 即事务T1两次读取同一数据项A的内容不一致 究其原因 是在两次读操作之间 事务T2也修改了数据项A 不可重复读的情况如图6 3所示 图6 3不可重复读 3 读 脏 数据 DirtyRead 即事务T1读取了经过事务T2修改过的数据 但是由于事务T2因为流产而撤消了对该数据的修改 数据库恢复到事务T2执行前的状态 从而导致事务T1读取的内容与数据库中的内容不一致 读 脏 数据的情况如图6 4所示 图6 4读 脏 数据 返回本节 6 2 2封锁 1 封锁的类型DBMS通常提供了多种类型的封锁 一个事务对某个数据对象加锁后究竟拥有什么样的控制是由封锁类型决定的 基本的封锁类型有两种 排它锁 ExclusiveLock 简称X锁 和共享锁 ShareLock 简称为S锁 1 排它锁 2 共享锁 2 保证数据一致性的封锁协议 三级封锁协议所谓封锁协议就是在对数据库加锁 持锁和释放锁时所约定的一些规则 例如 应何时申请X锁或S锁 持锁时间 何时释放等 不同的封锁规则形成了不同的封锁协议 下面介绍三级封锁协议 1 一级封锁协议 2 二级封锁协议 3 三级封锁协议 1 一级封锁协议 一级封锁协议是事务T在修改数据之前必须先对其加X锁 直到事务结束才释放 一级封锁协议可有效防止丢失修改 并保证事务T是可恢复的 例如 图6 6使用一级封锁协议解决了图6 2中的丢失修改问题 图6 6没有丢失修改 2 二级封锁协议 二级封锁协议是在一级封锁协议加上事务T对要读取的数据加S锁 读完后即可释放S锁 二级封锁协议除防止了丢失修改还可进一步防止读 脏 数据 例如 图6 7使用二级封锁协议解决了图6 4中读 脏 数据的问题 图6 7不读 脏 数据 3 三级封锁协议 三级封锁协议是事务T在读取数据之前必须先对其加S锁 在要修改数据之前必须先对其加X锁 直到事务结束后才释放所有的锁 例如图6 8使用了三级封锁协议解决了图6 3中的不可重复读问题 图6 8可重复读 表6 1不同级别的封锁协议 返回本节 6 2 3封锁出现的问题及解决方法 1 活锁在多个事务请求对同一数据封锁时 总是使某一事务等待的情况称为活锁 例如 如果事务T1封锁了数据R后 T2也请求封锁R 于是T2等待 接着T3也请求封锁R 假如T1释放R上的锁后 系统首先批准了T3的请求 T2只得继续等待 接着T4也请求封锁R T3释放R上的锁后 系统又批准了T4的请求 T2有可能就这样永远等待下去 2 死锁多个并发事务处于相互等待的状态 其中的每一个事务都在等待它们中的另一个事务释放封锁 这样才可以继续执行下去 但任何一个事务都没有释放自己已获得的锁 也无法获得其他事务已拥有的锁 所以只好相互等待下去 这就产生了死锁 图6 9死锁 目前在数据库中解决死锁问题主要有两类方法 一类方法是采取一定措施来预防死锁的发生 另一类方法是允许发生死锁 然后采用一定手段定期诊断系统中有无死锁 若有则解除之 1 死锁的预防 1 一次封锁法 2 顺序封锁法 2 死锁的检测与解除 返回本节 6 2 4可串行化调度 所谓的两段锁协议是指所有事务必须分两个阶段对数据项进行加锁和解锁 具体体现在 1 在对任何数据进行读 写操作之前 事务首先要获得对该数据的封锁 2 释放一个封锁之后 事务不再申请并获得对任何数据的封锁 所谓两段锁的含义是 事务分为两个阶段 第一阶段是获得封锁 也称为扩展阶段 在这个阶段 事务可以申请获得任何数据项上的任何类型的锁 但不能释放任何锁 第二阶段是释放封锁 也称为收缩阶段 在这个阶段 事务可以释放任何数据项上的任何类型的锁 但是不能申请任何锁 返回本节 6 2 5SQLServer的并发控制机制 1 SQLServer的空间管理及锁的级别2 SQLServer锁的类型 1 SQLServer的空间管理及锁的级别 1 行和行级锁 2 页和页级锁 3 簇和簇级锁 4 表级锁 5 数据库级锁 2 SQLServer锁的类型 一般情况下 SQLServer能自动提供加锁功能 而不需要用户专门设置 这些功能表现在 1 当使用SELECT语句访问数据库时 系统能自动用共享锁访问数据 在使用INSERT UPDATE和DELETE语句增加 修改和删除数据时 系统回自动给使用数据加排它锁 2 系统可用意向锁使锁之间的冲突最小化 意向锁建立一个锁机制的分层结构 其结构按行级锁层和表级锁层设置 3 当系统修改一个页时 会自动加修改锁 修改锁和共享锁兼容 而当修改了某页后 修改锁会上升为排它锁 4 当操作涉及到参考表或者索引时 SQLServer会自动提供模式稳定锁和模式修改锁 返回本节 6 3数据库恢复 6 3 1数据库系统的故障6 3 2数据库备份技术6 3 3数据库恢复策略6 3 4SQLServer的数据备份和恢复 返回首页 6 3 1数据库系统的故障 1 事务故障2 系统故障3 介质故障 返回本节 6 3 2数据库备份技术 1 数据转储2 日志文件 1 数据转储 1 静态转储和动态转储 1 静态转储是在系统中没有运行其他事务时进行的转储操作 2 动态转储是指转储操作与用户事务并发进行 转储期间允许对数据库进行存取或修改 2 海量转储和增量转储 海量转储是指每次转储全部数据库 增量转储是指转储上次转储后更新过的数据 2 日志文件 1 日志文件的格式和内容 各个事务的开始 BEGINTRANSACTION 标记 事务标识 标明是哪个事务 操作的类型 插入 删除或修改 操作对象 更新前数据的旧值 对插入操作而言 此项为空值 更新后数据的新值 对删除操作而言 此项为空值 各个事务的结束 COMMIT或ROLLBACK 标记 2 登记日志文件 返回本节 6 3 3数据库恢复策略 1 事务故障的恢复具体的恢复步骤为 1 反向扫描文件日志 即从最后向前扫描日志文件 查找该事务的更新操作 2 对该事务的更新操作执行逆操作 3 重复执行 1 和 2 恢复该事务的其他更新操作 直至读到此事务的开始标记 事务故障恢复就完成了 2 系统故障的恢复具体的恢复步骤为 1 正向扫描日志文件 即从头扫描日志文件 找出在故障发生前已经提交的事务 这些事务既有BERGINTRANSACTION记录 也有COMMIT记录 将其事务标识记入重做 REDO 队列 2 对撤消队列中的各个事务进行撤消 UNDO 处理 3 对重做队列中的各个事务进行重做 REDO 处理 3 介质故障的恢复介质故障是指磁盘上的物理数据和日志文件均遭破坏 这是最严重的一种故障 恢复方法是首先重装数据库 使数据库管理系统能正常运行 然后利用介质损坏前对数据库已做的备份恢复数据库 具体的恢复步骤为 1 装入最新的后备数据库副本 使数据库恢复到最近一次转储时的一致性状态 2 装入相应的日志文件副本 转储结束时刻的日志文件的副本 重做已完成的事务 返回本节 6 3 4SQLServer的数据备份和恢复 SQLServer具有比较强大的数据备份和恢复功能 提供了海量备份和增量备份 静态备份和动态备份等多种备份方式 并具有日志和检查点两种数据恢复技术 用户可以使用Transact SQL语句 也可以通过SQLServer的EnterpriseManager进行数据备份和数据恢复 SQLServer2000提供了四种数据库备份与恢复数据的方式 全库备份 备份整个数据库 日志备份 备份日志文件 差异备份 仅备份自上次全库备份后被修改过的数据页 文件或文件组备份 对组成数据库的文件或文件组进行单独的备份 例6 1对BOOKSYS数据库做一次全库备份 备份 BACKUP 语句如下 BACKUPDATABASEBOOKSYS 对BOOKSYS数据库进行备份 TO MYBAK 备份设备为MYBAK WITHINIT 此设备将覆盖以前所有的备份 NAME BOOKSYSBAK 备份的名字为BOOKSYSBAK 例6 2对BOOKSYS数据库做一次差异备份 备份 BACKUP 语句如下 BACKUPDATABASEBOOKSYS 对BOOKSYS数据库进行备份 TO MYBAK 备份设备为MYBAK WITHDIFFERENTIAL 差异备份 NOINTI 新备份的数据库将添加到备份设备原备份内容的后面 NAME BOOKSYSBAK 备份的名字为BOOKSYSBAK 例6 3对BOOKSYS数据库做一次日志备份 备份 BACKUP 语句如下 BACKUPLOGBOOKSYS 对BOOKSYS进行日志备份 TO MYBAK 备份设备为MYBAK WITHNOINIT 新备份的数据库将添加到备份设备原备份内容的后面 NAME BOOKSY

温馨提示

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

评论

0/150

提交评论