- 1、本文档共40页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第10章 其他概念 这一章讨论概念包括事务、锁、快照和序列等,事务与锁概念与Oracle的并发控 制有关。序列定义存储在数据字典中。序列通过提供唯一数值的顺序表用来简化 程序设计工作。可以使用快照把远程数据库的本地拷贝提供给用户。 10.1 事务 事务是Oracle操作完成的逻辑单位。事务的处理必须满足以下原则: (1) 可分性 事务只有两种状态,即完成和未完成。 (2) 一致性 事务必须完成全部的操作,事务开始时系统为一个确定的状态,完成后则成为另 一个确定的状态;未完成则回到事务开始时的确定状态;不允许出现未知的、不 一致的“中间”状态。 (3) 孤立性 事务的这个原则很好理解,即事务之间不能相互干扰。这种要求有时也被称为事 务的串行性。 10.2锁 多用户在访问相同的资源时,锁是用于防止事务之间的有害性交互的机制。当用 户对数据库并发访问时,为了确保事务完整性和数据库一致性,需要使用锁,它 是实现数据库并发控制的主要手段。锁可以防止用户读取正在由其他用户更改的 数据,并可以防止多个用户同时更改相同数据。如果不使用锁,则数据库中的数 据可能在逻辑上不正确,并且对数据的查询可能会产生意想不到的结果。 Oracle通过获得不同类型的锁,允许或阻止其他用户对相同资源的同时存取,并 确保不破坏数据的完整性,从而自动满足了数据的完整性、并行性和一致性。为 了在实现锁时不在系统中形成瓶颈和不阻止对数据的并行存取,Oracle根据所执 行的数据库操作自动地要求不同层次的锁定,以确保最大的并行性。 10.2.1 锁机制和死锁 1. 锁机制 在Oracle中,提供了两种锁机制: (1) 共享锁(share lock) 共享锁通过数据存取的高并行性来实现。如果获得了一个共享锁,那么用户就可 以共享相同的资源。许多事务可以获得相同资源上的共享锁。 (2) 独占锁(exclusive lock) 独占锁防止共同改变相同的资源。假如一个事务获得了某一资源上的一个专用 锁,那么直到该锁被解除,其他的事务才能修改那个资源。但允许对资源进行共 享。 所有的锁在事务期间被保持,事务中的SQL语句所做的修改只有在事务提交时才 能对其他事务可用。Oracle在事务提交和回滚事务时,释放事务所使用的锁。 2. 死锁 当两个或者多个用户等待其中一个被锁住的资源时,就有可能发生死锁现象。对 于死锁,Oracle自动进行定期有哪些信誉好的足球投注网站,通过回滚死锁中包含的其中一个语句来解决 死锁问题,也就是释放其中一个冲突锁,同时返回一个消息给对应的事务。用户 在设计应用程序时,要遵循一定的锁规则,尽力避免死锁现象的发生。 10.2.2 锁的类型 Oracle自动提供几种不同类型的锁,控制对数据的并行访问。一般情况下, Oracle的锁可以分为以下几种类型: 1. DML锁 DML锁的目标是保证并行访问的数据完整性,DML锁防止同步冲突的DML和 DDL操作的破坏性交互。 2. DDL锁 DDL锁保护方案对象的定义,调用一个DDL语句将会隐式提交事务。DDL锁有多 种形式: (1) 独占DDL锁:当CREATE、ALTER和DROP等语句用于一个对象时使用该锁。 (2) 共享DDL锁:当GRANT与CREATE PACKAGE等语句用于一个对象时使用此 锁。 (3) 可破的分析DDL锁:库高速缓存区中语句或PL/SQL对象有一个用于它所引用 的每一个对象的锁。假如被引用的对象改变了,可破的分析DDL锁会持续。 3. 内部锁 内部锁包含内部数据库和内存结构。对用户来说,它们是不可访问的。因为用户 不需要控制它们的发生。 10.2.3 表锁和事务锁 为了使事务能够保护表中的DML存取以及防止表中产生冲突的DDL操作,Oracle获得表锁 (TM)。表10.1列出了不同的模式。当执行特定的语句时,由RDBMS获得这些模式的表 锁。通过V$lock动态表可以查看锁的相关信息。模式列的值分别为2、3或6。数值2表示一 个行共享锁(RS);3表示一个行独占锁(RX);6表示一个独占锁(X)。 10.2.3 表锁和事务锁 当一个事务发出表10.2所列出的语句时,将获得事务锁(TX)。事务锁总是在行级 上获得。事务锁独占地锁住该行,并阻止其他事务修改改行,直到持有该锁的事 务回滚或提交数据为止。 注意:要想获得事务锁(TX),事务首先必须获得该表锁(TM)。 10.2.4 实例分析 Oracle在动态状态表V$lock中存储与数据库中的锁有关的所有信息。使用 DESCRIBE命令可查看表V$lock的结构: SQLDESCRIBE V$lock; 结果为: 名称 是否为空? 类型 ADDR RAW(4) KADDR RAW(4) SID
文档评论(0)