`

Oracle 9i 编程技术-- 锁

阅读更多

在日常生活中,我们都需要使用各种不同的锁来保护自己的私人财产,以免遭到损失.而在ORACLE中,同样也需要使用锁这个机制来保护数据库中的数据.

那么,下面就复习一下ORACLE中锁机制的各个部分.


1.锁在ORACLE中的解释

ORACLE中的锁机制是为了在数据库并发访问中,用于保护和管理共享资源的正确性,完整性与一致性.在这里提到的共享资源包含数据库中的表,索引,视图等等...


2.用户很迷惑,为什么我更新的信息不见了?(更新丢失) 在没有实现锁机制的一些应用中,都会发生这种情况,就是用户在修改了应用的一些信息后,例如:地址,email... 回头查看自己修改的信息时,发现自己修改的信息没有发生任何的更新.这种让用户感到很困惑的情况,就是我们所说的"更新丢失". 下面就用一个例子来说明这个问题:

a.会话SESSION 1 中的一个事务获取一行数据,放在本地内存,并显示给一个最终用户U1.

b.会话SESSION 2 中的另一个事务也获取这一行,但将数据显示给另一个用户U2

c.U1使用应用修改了该行的数据,并提交给数据库.

d.之后U2也修改了该行,并也提交了数据库;这时,U2的数据将会覆盖了U1的更新,这时候丢失更新就发生了. 下面将会提到解决丢失更新的方式.


3.处理更新丢失的方式(乐观锁定&悲观锁定)

为了解决更新丢失这种情况,ORACLE提出了两个解决方式:乐观锁&悲观锁. 从它们的名称可以初步了解到它们在粒度,严重性上有明显的区别.

乐观锁定:顾名思义就是用一种乐观的态度去看代丢失更新的问题,它主观认为同一时间点中只有它自己一个会话在修改当前的记录,只有当它真正提交了修改中,才将它本身修改的数据进行锁定,这个时候ORACLE就会采用一些方法去检查这些数据是否已经被其他会话更新过,如果很不幸,发现用户希望修改的数据已经被其他用户更新过,那么ORACLE就会根据应用程序的逻辑进行处理。

悲观锁定:  用一些通俗的话说,就是用户很担心他在修改数据的时候有人动了他想修改的东西,所以他在查询数据的时候就马上把数据给锁了起来,在同一时刻,只要他还没有提交更新,那么就只有一个人能访问到这些数据。达到独享数据的的目的。

所以悲观与乐观的区别就在于它们锁定数据的时间点不同,一个早,一个晚。。。


4.悲观锁定与乐观锁定的几种实现方式

悲观锁定的实现需要建立一个有状态的链接,而悲观锁定有两种实现的方式,一种是SELECT ... FOR UPDATE,另一种是SELECT ... FOR UPDATE NOWAIT,下面通过一个例子来介绍它们的区别。

首先我们使用ORACLE中scott.dept表作为我们的实例。

在会话一中我们使用这样一个查询语句

select DEPTNO,DNAME from dept FOR UPDATE 

 

此时,如果在另一个会话中使用与上面相同的查询语句查询dept表,将会发现该查询语句好像被锁定了一样,记录无法查询出来。只有当第一个会话提交或回滚了事务,该查询才能被解开。这就是FOR UPDATE得作用,它将数据以悲观的方式锁定起来,其他想操纵这些数据的会话只能一直处于等待的状态。这种方式的缺点在于,会话长时间锁定在等待数据中,造成大量资源的浪费;而使用FOR UPDATE NOWAIT的方式检索数据,当发现数据已被session锁定时,其他会话会直接返回一个ORACLE的错误,而不再处于长时间的等待中。

SESSION1: SELECT DEPTNO,DNAMR FOR UPDATE NOWAIT. 

当SESSION1已经对数据锁定时,如果SESSION2也采用 

SESSION2:SELECT DEPTNO,DNAME FOR UPDATE NOWAIT. 
ORACLE将会返回 ORA-00054:资源正忙,要求指定NOTWAIT 

 


总之,Oracle中的悲观锁就是利用Oracle的Connection对数据进行锁定。在Oracle中,用这种行级锁带来的性能损失是很小的。而且由于数据的及时锁定,在数据提交时候就不会出现冲突,可以省去很多恼人的数据冲突处理。缺点就是你必须要始终有一条数据库连接,就是说在整个锁定到最后放开锁的过程中,你的数据库联接要始终保持住。与悲观锁相对的,我们有了乐观锁。乐观锁一开始也说了,就是一开始假设不会造成数据冲突,在最后提交的时候再进行数据冲突检测。在乐观锁中,我们有3种常用的做法来实现。


A.第一种方式是在检索数据的同时将数据拷贝一份到应用中,待修改完成后,再将数据与数据库中的数据进行对比,这种处理的方式完全由应用程序所处理。


5.锁定而导致的后果--阻塞

6.阻塞的几种形式

7.死锁

8.ORACLE中锁的类型

 

分享到:
评论

相关推荐

    移动留言薄 Oracle 9i + jsp --- JSP留言薄源码

    总结来说,这个项目是一个基于Oracle 9i数据库和JSP技术的移动留言簿应用,它展示了如何在服务器端使用Java编程语言处理用户输入,以及如何与Oracle数据库进行数据交换。对于想学习JSP开发和Oracle数据库集成的初学...

    Managing-Oracle9i-on-Linux.rar_oracle

    《Oracle 9i在Linux上的管理》是一本详细介绍如何在Linux操作系统上管理和维护Oracle 9i数据库系统的专业书籍。...《Managing Oracle9i on Linux.pdf》这本书将深入讲解这些内容,为读者提供详尽的指导。

    经典Oracle 9i 课件-ppt

    首先,Oracle 9i在数据库管理系统的架构上进行了重大改进,引入了Real Application Clusters (RAC)技术,允许多个服务器节点共享同一数据库,增强了系统的可用性和可扩展性。通过RAC,即使单个节点出现故障,整个...

    Oracle9i数据库应用技术-源代码

    Oracle9i数据库应用技术是Oracle公司推出的一款关系型数据库管理系统,它在当时具有先进的功能和卓越的性能。这个源代码集合提供了深入理解Oracle9i数据库系统运作方式的宝贵机会,对于学习和研究数据库管理、开发...

    oracle9i中文教程7-13章

    第十二章:“数据安全---备份与恢复实战”讲解了Oracle9i的备份策略和恢复技术。本章介绍了完整备份、增量备份、热备份和冷备份的区别,以及如何使用RMAN(恢复管理器)进行数据恢复,确保在系统故障或数据丢失时...

    基于C_C++与ORACLE9i的嵌入式SQL编程技术.doc

    总的来说,基于C/C++与ORACLE9i的嵌入式SQL编程技术提供了一种强大的方式,将数据库操作与复杂逻辑集成在一起,使得程序可以灵活地处理数据。通过理解SQL通信区的工作原理以及如何声明和使用SQL变量,开发者可以有效...

    oracle9i客户端简易安装包

    这个"oracle9i客户端简易安装包"包含了运行和连接到Oracle 9i数据库服务器所需的基本组件,为那些需要与9i数据库交互的用户提供了一个方便的解决方案。下面将详细介绍Oracle 9i客户端及其主要组成部分和安装过程。 ...

    Oracle 9i 参考手册

    总的来说,Oracle 9i参考手册涵盖了数据库管理、Java编程、UML建模和测试技术等多个方面,对于想要深入理解和使用Oracle 9i的人来说,是一份宝贵的资源。通过学习和实践这些知识,可以提升在数据库开发、维护和测试...

    oracle9I-DBA参考手册

    《Oracle9i DBA参考手册》是一本专为数据库管理员(DBA)设计的重要资源,它详尽地涵盖了Oracle 9i数据库系统的管理和维护。Oracle 9i是Oracle公司在2001年发布的一个重要版本,它在性能、可扩展性、安全性和互操作...

    Oracle 9i官方培训资料大全集(pdf文档)

    Oracle 9i官方培训资料大全集是一份非常珍贵的学习资源,包含了Oracle数据库系统在9i版本中的各种核心技术、管理实践以及开发指南。这份资料对于学习和掌握Oracle数据库系统的专业人士来说,具有极高的参考价值。...

    oracle9i全套资料

    本套资料全面涵盖了Oracle9i的相关知识,包括安装配置、数据库管理、编程进阶以及系统开发等多个方面,对于学习和掌握Oracle数据库技术具有极大的帮助。 首先,我们来看"2.构件环境---安装oracle9i"部分。这部分...

    Oracle 9i&10g 编程艺术

    《Oracle 9i&10g 编程艺术》是一本专为数据库开发人员精心编写的经典技术书籍,它深入浅出地介绍了Oracle 9i和10g这两个版本的编程技术和最佳实践。Oracle数据库是全球广泛使用的数据库管理系统之一,尤其在企业级...

    Oracle9i应用及开发实务-源代码

    首先,Oracle9i引入了Real Application Clusters (RAC) 技术,这是一种高可用性解决方案,允许多台服务器共享同一数据库,提高系统的稳定性和性能。通过源代码,我们可以研究如何配置和管理RAC环境,以及在高并发...

    Oracle 9i 原版培训教材-1-1(中文版)___Oracle9i数据库管理基础PDF

    Oracle 9i是一款重要的关系型数据库管理系统,由甲骨文公司开发,广泛应用于企业级的数据存储和管理。本篇将围绕“Oracle 9i数据库管理基础”这一主题,深入探讨Oracle 9i的核心概念、安装配置、数据管理、性能优化...

    Oracle 9i Web开发指南

    5. **ASP (Application Server Pages)**:Oracle 9i也支持微软的ASP技术,通过Oracle ODBC桥接,开发者可以在ASP环境中利用Oracle数据库的强大功能。 6. **XML支持**:Oracle 9i引入了内置的XML处理能力,包括...

    PLSQL_ORACLE9i编程讲义

    《PLSQL_ORACLE9i编程讲义》是一份详尽介绍Oracle 9i数据库中PL/SQL编程技术的文档,旨在帮助开发者深入理解和掌握PL/SQL的使用。PL/SQL,全称Procedural Language/Structured Query Language,是Oracle数据库特有的...

    Oracle9i-10g编程艺术

    《Oracle9i-10g编程艺术》是数据库领域的经典之作,主要涵盖了Oracle9i到10g版本的编程技术和数据库管理系统的核心概念。这本书详细解析了Oracle数据库的内部工作原理,帮助读者深入理解如何高效地设计、开发和管理...

    Oracle9i学习精解版4

    压缩包中的10.pdf、13.pdf、12.pdf、11.pdf文件很可能包含了Oracle9i在这些领域的详细讲解,可能涵盖了数据库安装配置、SQL语法、PL/SQL编程、性能调优、安全管理等多个方面的内容。通过学习这些材料,读者可以全面...

    oracle9i 实用技术

    二、Oracle9i编程 1. SQL:SQL是操作Oracle数据库的基础,包括数据查询、插入、更新和删除等操作。Oracle9i支持增强的SQL语法,如子查询、联接、集合操作等。 2. PL/SQL:Oracle的Procedural Language/SQL,是一种...

    oracle9i10g编程艺术.rar

    本压缩包"oracle9i10g编程艺术.rar"显然是一份关于Oracle数据库编程与实践的资源集合,旨在帮助学习者深入理解和掌握Oracle数据库技术。 首先,Oracle 9i是Oracle数据库的第九个主要版本,引入了诸多新特性,如自动...

Global site tag (gtag.js) - Google Analytics