零点起飞学Oracle之数据库控制.pptx_第1页
零点起飞学Oracle之数据库控制.pptx_第2页
零点起飞学Oracle之数据库控制.pptx_第3页
零点起飞学Oracle之数据库控制.pptx_第4页
零点起飞学Oracle之数据库控制.pptx_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

第17章数据库控制 在本书前面章节已经讲解了设置表的约束 确保用户对数据库数据操作的完整性和准确性 但使用这些方法并不能保证数据的完整性 这里的完整性是一个广义上的概念 它包括数据的并发性和一致性 通过事务控制与并发处理可以实现数据的完整性 本章将主要讲解数据库一致性和事务的定义 Oracle中的事务 事务的属性和隔离级别 事务的处理原则 并发的基础知识 锁机制 17 1数据一致性和事务 事务在数据库中主要用于保证数据的一致性 防止出现错误数据 事务是单个的工作单元 如果某一事务成功 则在该事务中进行的所有数据均会提交 如果事务遇到错误且必须取消或回滚 则所有数据修改均被清除 从而保证数据一致性 17 1数据一致性和事务 事务是数据库的核心概念之一 事务控制很有必要的 下面以两个银行账号之间转账的例子来理解事务的重要 例如 账号A 假定账号A有足够金额 转出10000元至账号B 对此转账业务可分解为 账号A减去10000元 账号B增加10000元 当然 要求这两项操作或者同时成功 转账成功 或者同时失败 转账失败 如果只有其中一项操作成功 则不可接受 例如帐号A减去10000元成功 但帐号B增加10000元失败 则帐号A将损失10000元 因此 如果发生一个事务只有部分操作成功时 应该能够回滚事务 就好像什么操作都没有发生一样 类似的场景还有很多 但作为存储基础数据的数据库 必须避免任何犯错的可能 即必须保持数据一致性 17 2Oracle中的事务处理 在Oracle中 事务生命周期包括 事务开始 事务执行和事务结束 当事务开始时 数据库处于初始状态 然后执行SQL操作语句 如果执行成功 则执行语句提交事务 这时更新数据库并终止事务 如果SQL操作语句执行失败 则取消事务进行的任何操作 数据库恢复到初始状态 本节将讲述Oracle中的事务处理 利用Commit命令提交事务 利用Rollback命令结束事务 事务属性和隔离级别 17 2 1利用commit提交事务 commit提交事务语句可以结束当前事务 并永久地保存事务中对于数据库的所有改变 而在未提交事务以前 这些改变都是暂时的 一般情况下 其他事务中不能看到本事务中对数据库所做的修改 示例19 1 利用commit命令界定事务 17 2 2利用rollback回滚事务 rollback命令可以结束当前事务 并永久地保存事务所做的全部工作 即事务中对于数据库的任何改变都将无效 回滚一般是回到事务开始时的状态 但是可以在事务中设置保存点 然后回滚到事务指定的保存点 在示例17 1中 无论进行了多少次运行 使用rollback命令将忽略所有操作 示例17 2 利用rollback命令界定事务 17 2 3Oracle事务的属性和隔离级别 Oracle中 可以设定事务的属性和隔离级别 以保证事务运行在某种特定环境 因为数据库状态总是在不断进行变化的 特定的环境有利于事务在一个稳定的状态下工作 这些属性和隔离级别包括 readonly属性 readwrite属性 serializable隔离级别 readcommited隔离级别 17 2 3Oracle事务的属性和隔离级别 1 readonly属性默认情况下 在一个事务中可以对数据库进行增 删 改 查等各种数据库操作 但是 有时候事务只是为了数据查询和统计而设计 并不希望修改数据库中的数据 此时 可以将事务设置为readonly 即只读事务 设置Oracle事务的属性 应该使用settransaction命令 将事务设置为只读事务的语法如下所示 settransactionreadonly 示例17 3 利用readonly设置只读事务 17 2 3Oracle事务的属性和隔离级别 2 readwrite属性readwrite属性可以将事务设置为可读 可写状态 这种状态也是事务的默认状态 在这种状态下 事务可以查询 更新数据库内容 17 2 3Oracle事务的属性和隔离级别 3 serializable隔离级别隔离级别是指当前事务对数据库状态变化的屏蔽程度 具有serializable隔离级别的事务是串行化事务 串行化事务与只读事务具有完全相同的隔离级别 外界其他事务对数据库的修改没有认知度 将事务的隔离级别设置为serializable的语法如下所示 settransactionisolationlevelserializable 示例17 4 串行化事务屏蔽其他事务对数据库的状态修改 17 3事务处理原则 事务是构成单一逻辑单元的操作集合 具有ACID特性 即原子性 Atomicity 一致性 Consistency 隔离性 Isolation 持久性 Durablity 17 3 1事务的原子性 Atomicity 原子性是是指整个事务所有操作是一个逻辑整体 如同原子一样 不可分割 要么全部执行 要么都不执行 原子性是指事务全有或全无的性质 即事务的所有操作在数据库中要么全部正确反映出来 要么全部不反映 17 3 2事务的一致性 Consistency 任何事务的输出都是可预测的 所有的操作要么失败要么成功 所有操作都遵循一致性规则 并确保数据库内的数据完整性 事务结束后 无论是提交还是回滚 数据库中数据的状态必须保持一致性 17 3 3事务的隔离性 Isolation 隔离性是表示多个事务可能同时执行 在运行过程中 这些事务之间必须保持相互独立 不能相互影响 任何在事务之前 之中或者之后执行的操作 相关数据都处于一致的状态 而不是处于部分完成的状态 各个事务对数据库的影响是独立的 那么 一个事务对于其他事务的数据修改 有可能产生以下几种情况 1 脏读取 DirtyRead 2 不可重读3 影像读取 17 3 4事务的持久性 Durablity 持久性是指 一旦提交了事务处理 那么事务处理的结果必须进行持久化 如写入磁盘 当重新启动数据库 数据状态必须是事务结束时的状态 17 4并发与锁定 数据库是一个共享资源 许多用户可能同时访问数据库 这时就需要使用事务的隔离性 多个事务并发执行的正确性由数据库管理系统的并发控制机制提供支持 通过对并发事务的合理调度来保证事务的一致性 本节将讲解Oracle中的并发控制机制及实现 17 4 1并发与锁定举例 同时访问一种资源的用户被视为并发访问资源 如果需要更新表中记录 需要首先获得该记录上的排它锁 从而防止两个进程同时修改同一条记录 例如 两个会话不能同时更新表employeenew中的同一记录 示例17 1 两个会话不能同时更新表employeenew中的相同记录 17 4 2死锁 死锁是在多用户或多进程情况下 为使用同一个资源而产生的无法解决的争用状态 死锁发生时 两个或更多的事务同时处于等待状态 每个事务都在等待其他事务释放锁 使其可继续执行 本小节将通过一个示例来查看Oracle中对于死锁的处理方式 示例17 2 Oracle中死锁的处理方式 17 5悲观锁与乐观锁 当用户更新一个特定的字段时 该记录的所有字段都会 刷新 避免这种情况可以用两种锁定策略 悲观锁定或乐观锁定 悲观锁是指当前进程在每次更新数据时 总是假设有其他进程正在锁定同一资源 而乐观锁定则假定不存在锁定请求资源的其他进程 二者的出发点不同 因此 其处理方式也完全不同 17 5 1悲观锁定 悲观锁定只用于有状态或有连接环境 在试图更新之前 从数据库查询这一行就锁定这一行 悲观锁定总是假设存在着其他进程的竞争 因此 在更新数据之前 需要首先锁定资源 在Oracle中 锁定表中记录可以利用forupdate选项 示例17 3 利用forupdate选项锁定目标资源 17 5 2乐观锁定 乐观锁是在把所有锁定都延迟到即将执行更新之前才做 换句话说 我们会修改信息而不需要锁 用户认为数据不会被其他用户修改 因此 会等到最后一刻才去看想法对不对 例如 当用户A获得某条记录 并在前台页面中修改了部分列的值 然后将数据修改更新到数据库 在这个过程中 用户B有可能修改了同一记录 如果用户A的修改无条件地覆盖了用户B的修改 将造成用户B的遗失更新 此时 合理的处理方案应是 数据库向用户A提示更新失败 并告知该记录已被其他用户进行了修改 从数据库的角度来看 最直接的解决方法为

温馨提示

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

评论

0/150

提交评论