Oracle数据一致性与事务管理概要.ppt

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Oracle数据一致性与事务管理概要

数据一致性与事务管理 数据库中,除了数据的完整性之外,数据的一致性同样是一个重要的话题。而事务是保证数据一致性的重要手段。本章主要讲解数据的一致性,以及事务的管理。本章的主要内容包括: 数据一致性简介; 事务简介; Oracle中的事务处理; 事务处理的原则。 19.1 什么是数据一致性和事务 数据一致性是指数据库的数据在每一时刻都是稳定、而且是可靠的状态。而事务是保证数据一致性的主要手段。 19.1.1 数据一致性 对于一个数据库来说,其中的数据可能是每时每刻都在发生着变化,而在数据变化的同时,也无时无刻不伴随着数据的读取。这就对数据库的状态产生了比较高的要求——数据库的每次改变都是可被接受的,而每次读取的数据也都是正常的。这就是数据一致性的体现。 例如,在某个用户的银行账户中,现有存款100元。此时,如果一个用户读取其中的数据为100元,那么,此时的100元是可以接受的数据。但在同一时刻,另一用户针对同一账户进行了以下操作,向其中存入了100元,但是还没有提交动作,那么,此时第一个用户有可能会读到200元的余额。事实上,由于某些原因,第二个用户的提交没有成功,那么第一个用户所读取的200元,并非数据库的真实和可靠的状态。这就造成了读不一致性。 另外一种情形,如果第一个用户读取了200元的同时,取出了100元,那么计算获得余额为100元。而第二个用户的存款动作失败,最后,第一个用户的余额重新覆盖数据库中的数据,那么就会将100再次写回数据库,这造成了取出100元,最后余额还为100元的状态,此时的数据库也不符合一致性的状态。 19.1.2 事务 在数据库中,提出了事务的概念来保证数据库中数据的一致性。事务往往包括一个或多个处理步骤。例如,在超市购物包括,选购商品、放入购物车、付款、个人现金或银行账户余额减少、超市账户余额增加、商品库中商品信息更新等步骤。这些步骤组成了一个事务,当其中任何步骤出现异常,并且不能正常进行下去,都会影响其他所有步骤。例如,付款阶段不能正常进行,那么将不会对个人的现金或银行账户造成影响,超市的账户也不可能进行余额的增加,商品库中也不能更新该商品的信息。 同样的,如果个人现金或账户余额不足,那么也无法完成整个交易。在此之前所做的所有动作:选购商品、放入购物车等都将无效,商品应当被重新放回货架。 19.2 Oracle中的事务处理 Oracle中的事务应当使用关键字transaction。一个事务的生命周期应当包括:事务开始、事务执行和事务结束。需要注意的是,Oracle中并不能显式开始一个事务,也不存在这样的语句。事务的开始总是隐式进行的,而事务的结束则可以利用commit或者rollback命令进行终止。 Oracle中控制事务的常用命令包括: Commit; roll back; savepoint; roll back to savepoint; set transaction; set constraint。 19.2.1 commit命令 commit命令用于提交事务,并将事务中对数据库的修改进行持久化,即将数据库修改为另外一种状态,而这种状态是可接受的、可靠的状态。 while i1000 loop update people set salary = salary + 10*i where id = i; i := i+1; end loop; commit; 对于开发者来说,最安全的方式是显式进行数据的提交或者回滚,以结束事务。但很多时候,许多开发者并未注意该问题,而是依靠开发工具来进行提交或回滚。 此时需要注意的是,如果用户未提交对数据库的修改,而关闭了回话,或者数据库连接在提交之前断开,那么针对该数据库的所有操作都将执行回滚操作。 19.2.1 commit命令 另外,需要明确的概念是,在提交之前,数据库已经进行了实际更新,不过,并未得到数据库认可,因此提交动作只是一个获得认可的过程,其花费的数据库资源非常少。而且,提交一条数据与提交1000条数据所花费的数据库资源是相同的。因此,当实现大数据量的数据修改或者插入操作时,应当采取最后一次性提交的策略。 while i1000 loop update people set salary = salary + 10*i where id = i; i := i+1; commit; end loop; 在该代码片段中,每次更新数据,都有一次提交动作,将造成数据库资源的浪费。 19.2.2 roll back命令 roll back命令用于回滚用户操作。在某些时机,例如程序代码段中出现异常或错误,或者用户直接发出撤销命令,需要回滚操作。回滚操作将终止事务处理,并撤销用户在当前事务中进行的更改。

文档评论(0)

yaocen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档