oracle 专家高级编程 中文第六章.pdf

oracle 专家高级编程 中文第六章.pdf

ID:57731727

大小:439.28 KB

页数:33页

时间:2020-03-25

oracle 专家高级编程 中文第六章.pdf_第1页
oracle 专家高级编程 中文第六章.pdf_第2页
oracle 专家高级编程 中文第六章.pdf_第3页
oracle 专家高级编程 中文第六章.pdf_第4页
oracle 专家高级编程 中文第六章.pdf_第5页
资源描述:

《oracle 专家高级编程 中文第六章.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第6章锁开发多用户、数据库驱动的应用时,最大的难点之一是:一方面要力争取得最大限度的并发访问,与此同时还要确保每个用户能以一致的方式读取和修改数据。为此就有了锁定(locking)机制,这也是所有数据库都具有的一个关键特性,Oracle在这方面更是技高一筹。不过,Oracle的这些特性的实现是Oracle所特有的,就像SQLServer的实现只是SQLServer特有的一样,应用执行数据处理时,要正确地使用这些机制,而这一点要由你(应用的开发人员)来保证。如果你做不到,你的应用可能会表现得出人意料,而且不可避免地会危及数据的完整性(见第1章的说明)。在这一章中,我们将详细介绍Orac

2、le如何对数据(例如,表中的行)和共享数据结构(如SGA中的内存结构)锁定。这里会分析Oracle以怎样的粒度锁定数据,并指出这对你来说意味着什么。在适当的时候,我会把Oracle的锁定机制与其他流行的锁实现(即其他数据库中的锁定机制)进行对照比较,主要是为了消除关于行级锁的一个“神话”:人们认为行级锁总会增加开销;而实际上,在不同的实现中情况有所不同,只有当实现本身会增加开销时,行级锁才会增加开销。在下一章中,我们还会继续讨论这个内容,进一步研究Oracle的多版本技术,并说明锁定策略与多版本技术有什么关系。6.1什么是锁?锁(lock)机制用于管理对共享资源的并发访问。注意,我说

3、的是“共享资源”而不是“数据库行”。Oracle会在行级对表数据锁定,这固然不错,不过Oracle也会在其他多个级别上使用锁,从而对多种不同的资源提供并发访问。例如,执行一个存储过程时,过程本身会以某种模式锁定,以允许其他用户执行这个过程,但是不允许另外的用户以任何方式修改这个过程。数据库中使用锁是为了支持对共享资源进行并发访问,与此同时还能提供数据完整性和一致性。在单用户数据库中,并不需要锁。根据定义,只有一个用户修改信息。不过,如果有多个用户访问和修改数据或数据结构,就要有一种机制来防止对同一份信息的并发修改,这一点至关重要。这正是锁定所要做的全部工作。需要了解的重要一点是:有多

4、少种数据库,其中就可能有多少种实现锁定的方法。你可能对某个特定的关系数据库管理系统(relationaldatabasemanagementsystem,RDBMS)的锁定模型有一定的经验,但凭此并不意味着你通晓锁定的一切。例如,在我“投身”Oracle之前,曾经使用过许多其他的数据库,如Sybase、MicrosoftSQLServer和Informix。这3个数据库都为并发控制提供了锁定机制,但是每个数据库中实现锁定的方式都大相径庭。为了说明这一点,下面简要地概括一下我的“行进路线”,告诉你我是怎样从SQLServer开发人员发展为Informix用户,最后又怎样成为Oracle

5、开发人员。那是好多年前的事情了,可能有些SQLServer支持者会说:“但是我们现在也有行级锁了!”没错,SQLServer现在确实可以使用行级锁,但是其实现方式与Oracle中的实现方式完全不同。它们就像是苹果和桔子,是截然不同的两个物体,这正是关键所在。作为SQLServer程序员,我很少考虑多个用户并发地向表中插入数据的可能性。在SQLServer数据库中,这种情况极少发生。那时,SQLServer只提供页级锁,对于非聚簇表,由于所有数据都会插入到表的最后一页,所以两个用户并发插入的情况根本不可能发生。注意从某种程度上讲,SQLServer聚簇表(有一个聚簇索引的表)与Orac

6、le聚簇有点相似,但二者存在很大的差别。SQLServer以前只支持页(块)级锁,如果所插入的每一行都会插入到表的“末尾”,那么这个数据库中绝对不会有并发插入和并发事务。利用SQLServer中的聚簇索引,就能按聚簇键的顺序在整个表中插入行(而不是只在表的末尾插入),这就能改善SQLServer数据库的并发性。并发更新也存在同样的问题(因为UPDATE实际上就是DELETE再加上一个INSERT)。可能正是由于这个原因,默认情况下,SQLServer每执行一条语句后就会立即提交或回滚。这样做的目的是为了得到更大的并发性,但是会破坏事务完整性。因此,大多数情况下,如果采用页级锁,多个用

7、户就不能同时修改同一个表。另外,如果正在修改一个表,这会有效地阻塞对这个表的多个查询。如果我想查询一个表,而且所需的页被一个更新锁住了,那我就必须等待(等待,再等待……)。这种锁定机制太糟糕了,要想支持耗时超过1秒的事务,结果可能是致命的;倘若真的这样做了,整个数据库看上去可能就像是“冻住”了一样。我从这里学到了很多坏习惯。我认识到:事务很“不好”,应该尽快地提交,而且永远不要持有数据的锁。并发性要以一致性为代价。要么保证正确,要么保证速度,在我看来,鱼和

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。