一、锁的概念
锁出现在数据共享的场合,用来保证数据的一致性。当多个会话同时修改一个表时,需要对数据进行相应的锁定。
锁有“只读锁”、“排它锁”,“共享排它锁”等多种类型
每种类型又有“行级锁”(一次锁住一条记录),“页级锁”(一次锁住一页,即数据库中存储记录的最小可分配单元),“表级锁”(锁住整个表)。
若为“行级排它锁”,则除被锁住的行外,该表中其他行均可被其他的用户进行修改(Update)或删除(delete)。
若为“表级排它锁”,则所有其他用户只能对该表进行查询(select)操作,而无法对其中的任何记录进行修改或删除。当程序对所做的修改进行提交(commit)或回滚(rollback)后,锁住的资源便会得到释放,从而允许其他用户进行操作。
有时,由于程序的原因,锁住资源后长时间未对其工作进行提交;或是由于用户的原因,调出需要修改的数据后,未及时修改并提交,而是放置于一旁;或是由于客户服务器方式中客户端出现“死机”,而服务器端却并未检测到,从而造成锁定的资源未被及时释放,影响到其他用户的操作。如果两个事务,分别锁定一部分数据,而都在等待对方释放锁才能完成事务操作,这种情况下就会发生死锁。
二、隐式锁和显式锁
在Oracle数据库中,修改数据操作时需要一个隐式的独占锁,以锁定修改的行,直到修改被提交或撤销为止。
如果一个会话锁定了数据,那么第二个会话要想对数据进行修改,只能等到第一个会话对修改使用COMMIT命令进行提交或使用ROLLBACK命令进行回滚撤销后,才开始执行。
因此应养成一个良好的习惯:执行修改操作后,要尽早地提交或撤销,以免影响其他会话对数据的修改。
三、学习示例
3.1 示例:
对emp表的SCOTT雇员记录进行修改,测试隐式锁。
步骤1:
启动第一个SQL*Plus,以SCOTT账户登录数据库(第一个会话),修改SCOTT记录,隐式加锁。
UPDATE emp SET sal=3500 where empno=7788;
执行结果:
已更新1 行。
步骤2:
启动第二个SQL*Plus,以SCOTT账户登录数据库(第二个会话),进行记录修改操作。
UPDATE emp SET sal=4000 where empno=7788;
执行结果,没有任何输出(处于等待解锁状态)。
步骤3:
对第一个会话进行解锁操作:
COMMIT;
步骤4:
查看第二个会话,此时有输出结果:
已更新1 行。
步骤5:
提交第二个会话,防止长时间锁定。
说明:
两个会话对同一表的同一条记录进行修改。步骤1修改SCOTT工资为3500,没有提交或回滚之前,SCOTT记录处于加锁状态。步骤2的第二个会话对SCOTT进行修改处于等待状态。步骤3解锁之后(即第一个会话对SCOTT的修改已经完成),第二个会话挂起的修改此时可以执行。最后结果为第二个会话的修改结果,即SCOTT的工资修改为4000。可以使用查询语句检查。
3.2 表的显式锁定操作语句
语 句
|
描 述
|
SELECT FOR UPDATE
|
锁定表行,防止其他会话对行的修改
|
LOCK TABLE
|
锁定表,防止其他会话对表的修改
|
3.3 锁定行
示例:
对emp表的部门10的雇员记录加显式锁,并测试。
步骤1:
对部门10加显式锁:
SELECT
empno,ename,job,sal FROM emp WHERE deptno=10 FOR UPDATE;
结果为:
EMPNO ENAME JOB SAL
------------------ -------------- ------------------ ------------------
7782 CLARK MANAGER 2450
7839 KING PRESIDENT 5000
7934 MILLER CLERK 1300
步骤2:
启动第二个SQL*Plus(第二个会话),以SCOTT账户登录数据库,对部门10的雇员CLARK进行修改操作。
UPDATE emp SET sal=sal+100 where empno=7782;
执行结果:
没有任何输出(处于等待解锁状态)。
步骤3:
在第一个会话进行解锁操作:
COMMIT;
步骤4:
查看第二个会话,有输出结果:
已更新1 行。
说明:
步骤1对选定的部门10的雇员加锁,之后其他会话不能对部门10的雇员数据进行修改或删除。如果此时要进行修改或删除,则会处于等待状态。使COMMIT语句进行解锁之后,如果有挂起的修改或删除操作,则等待的操作此时可以执行。
3.4 锁定表
LOCK语句用于对整张表进行锁定。语法如下:
LOCK TABLE 表名 IN {SHARE|EXCLUSIVE} MODE
对表的锁定可以是共享(SHARE)或独占(EXCLUSIVE)模式。共享模式下,其他会话可以加共享锁,但不能加独占锁。在独占模式下,其他会话不能加共享或独占锁。
示例:
对emp表添加独占锁。
步骤1:
对emp表加独占锁:
LOCK TABLE emp IN EXCLUSIVE MODE;
结果为:
表已锁定
步骤2
:对表进行解锁操作:
COMMIT;
说明:
当使用LOCK语句显式锁定一张表时,死锁的概率就会增加。同样地,使用COMMIT或ROLLBACK命令可以释放锁。
注意:
必须没有其他会话对该表的任何记录加锁,此操作才能成功。
分享到:
相关推荐
### Oracle性能诊断之——Latch Free:深入理解与分析 在探讨Oracle数据库的性能优化与故障诊断时,"Latch Free"事件往往成为关注的焦点。这一主题不仅涉及Oracle内存管理的核心机制,还触及到多线程环境下的并发...
"在线表重定义——Oracle 10g系列专栏(二)" 在线表重定义是Oracle 10g系列专栏中的一项重要功能,允许用户在线更改表结构,而不需要锁定表。这种功能对于维持Oracle数据库的高可用性非常重要。 传统的表维护动作,...
这个文档"Oracle——错误一览表 任务用.docx"列出了许多常见的Oracle数据库错误及其含义,帮助我们理解和解决这些问题。 1. **违反唯一约束条件 (ORA-00001)**: 这个错误表示尝试插入或更新的数据违反了表的唯一性...
总结来说,解锁Oracle存储过程的过程涉及到识别锁定会话、查询锁定详情,并最终终止锁定会话以释放锁定。这一系列操作需要对Oracle数据库的系统视图有深入的理解,同时也需要具备一定的数据库管理经验。通过遵循上述...
- Oracle通过锁定机制、事务隔离级别等方式来实现数据的并发性和一致性控制。 - **13.3 Oracle锁数据原理** - 锁是实现数据一致性的关键机制之一。 - **13.4 Oracle闪回查询** - 闪回查询允许用户查看过去某个...
Oracle数据库是全球广泛使用的大型企业级关系型数据库管理系统,其高效稳定性和强大的功能深受各行业的青睐。在管理和优化Oracle数据库时,了解常见的等待事件至关重要,因为它们可以帮助我们诊断和解决性能问题。...
对于Oracle数据库而言,这通常涉及到表空间设计、索引结构、分区策略以及数据压缩技术的应用。例如,合理地使用分区可以将大表分割成更小、更易管理的部分,从而加速查询速度;而采用合适的压缩算法,则可以在减少...
首先,介绍的是Oracle的命令行客户端——SQL*Plus。SQL*Plus是Oracle提供的一个基础工具,用户可以通过它在命令行界面执行SQL语句和管理数据库。在启动SQL*Plus时,需要输入用户名和口令,如"sqlplus scott/tiger",...
Oracle数据库管理中的用户管理是确保系统安全性和数据完整性的重要环节。本篇文档主要围绕Oracle用户管理实例进行讲解,涵盖了用户安全策略以及通过OEM(Oracle Enterprise Manager)和PL/SQL进行用户创建、修改、...
“Oracle_11gR2_概念_第2章_表和表簇.pdf”讲解了Oracle中数据存储的主要方式——表和表簇。表是数据的基本组织单元,包含一系列列和行,而表簇则是一种优化数据存储的方式,允许将相关的表物理地存储在一起,提高...
3. 隔离性(Isolation):在并发环境中,事务的执行独立于其他事务,避免了脏读、不可重复读和幻读等并发问题,Oracle通过锁定机制来实现这一点,保证了数据的一致性。 4. 永久性(Durability):一旦事务提交,其...
Oracle 11g是一款强大的关系型数据库管理系统,广泛应用于企业级的数据存储和管理。本教程主要聚焦于"事务...通过学习这些内容,你将能够深入理解Oracle 11g的事务管理和并发控制,为实际的数据库管理打下坚实的基础。
此外,Oracle的锁定机制也是保证数据一致性的重要工具,需要理解行级锁、表级锁以及读写锁等概念。 第六,Oracle的高可用性方案,如RAC(Real Application Clusters)和Data Guard,可以提供故障切换和灾难恢复能力...
通过这些步骤,可以实现对用户会话级别的资源限制,当超过限制时,Oracle会采取相应措施如终止操作、回滚事务或锁定账户,从而保护数据库免受滥用和攻击。同时,调用级别的限制则影响单个SQL语句,不影响其他已执行...
TOracleDataSet ——该数据集组件支持Oracle记录锁定、记录刷新、服务器生成值、自动队列值生成、BLOB压缩。如果主表和从表之间存在外来关键字,或主表含有一个或多个列或属性(网表或varray),那么主从复合关系将...
此外,还会深入讨论Oracle的并发控制机制——多版本并发控制(MVCC),以及读已提交(Read Committed)和串行化(Serializable)等隔离级别。 再者,Oracle的存储过程和函数是实现业务逻辑的重要手段。书会引导读者...
《数据库系统原理与应用——Oracle版》是刘淳教授针对计算机专业学生和Oracle数据库爱好者编写的教材,旨在深入浅出地讲解数据库系统的基础理论和实际应用。本教程以Oracle数据库管理系统为实例,提供了丰富的教学...
总的来说,Oracle大型数据库技术涵盖了数据库设计、并发控制、存储优化、备份恢复、性能调优和安全管理等多个方面,这门课件将带领学习者深入理解并掌握这些关键知识点,以应对日益复杂的企业级数据管理挑战。
另外,了解Oracle的并发控制机制——多版本并发控制(MVCC)和锁定机制,可以帮助你理解如何在多用户环境下保证数据的一致性。Oracle的并发控制通过读写锁定、行级锁定和事务管理来实现。 最后,性能优化是Oracle...