第二章锁2.1锁的基本概念

锁的定义:锁(lock)机制用于管理对共享资源的并发访问,用于多用户的环境下,可以保证数据库的完整性和一致性。锁是防止访问相同资源的事务之间的破坏性交互的机制。既可以是用户对象(例如表或行),也可以是对用户不可见的系统对象(例如共享数据结构和数据字典行)。

锁的解释:当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的完整性和一致性。当事务在对某个数据对象进行操作前oracle锁表怎么解决,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制。

锁的作用:在并发事务之间防止破坏性的交互作用,不需要用户的动作,自动使用最低的限制级别,在事务处理期间保持。

数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据oracle锁表怎么解决,破坏数据库的一致性。

锁(lock)是防止访问相同资源(例如表或数据行等用户对象,或内存中的共享数据结构及数据字典等对用户不可见的系统对象)的事务产生破坏性交互的机制。

在任何情况下,Oracle都能够自动地获得执行SQL语句所必须的所有锁,无需用户干预。Oracle会尽可能地减少锁产生的影响,从而最大程度地保证数据的并发访问能力,并确保数据一致性及错误恢复。同时,Oracle也支持用户手工加锁的操作。

Oracle 从来不会升级锁,但是它会执行锁转换(lock conversion)或锁提升(lock promotion)。

Alockis a mechanism that preventsdestructive interactions, which are interactions that incorrectly update data or incorrectly alter underlying data structures, between transactions accessing shared data. Locks play a crucial row in maintaining database concurrency and consistency.

锁是一种机制,用来防止多个共同访问共享数据的事务之间的破坏性交互,包括不正确地更新数据或不正确地更改基础数据结构。锁在维护数据库并发性和一致性当中扮演着一个关键的角色。

2.1.1并发和并行

并发(concurrency)和并行(parallel)。并发意思是在数据库中有超过两个以上用户对同样的数据做修改,而并行的意思就是将一个任务分成很多小的任务,让每一个小任务同时执行,最后将结果汇总到一起。所以说,锁产生的原因就是并发,并发产生的原因是因为系统和客户的需要。

2.1.2使用锁

在单用户数据库中,锁不是必需的,因为只有一个用户在修改信息。但是,当多个用户在访问和修改数据时,数据库必须提供一种方法,以防止对同一数据进行并发修改。锁实现了以下重要的数据库需求:

v·一致性

一个会话正在查看或更改的数据不能被其它会话更改,直到用户会话结束。

v·完整性

数据和结构必须按正确的顺序反映对他们所做的所有更改。数据库通过其锁定机制,提供在多个事务之间的数据并发性、一致性、和完整性。锁定将自动执行,并且不需要用户操作。

执行SQL语句时,Oracle数据库自动获取所需的锁。例如,在数据库允许某个会话修改数据之前,该会话必须先锁定数据。锁给予该会话对数据的独占控制权,以便在释放该锁之前,任何其它事务都不可以修改被锁定的数据。

因为数据库的锁定机制与事务控制紧密地绑定在一起,应用程序设计人员只需要正确地定义事务,而数据库会自动管理锁定。

2.1.3锁模式(Lock Modes)–共享和排它

Oracle数据库自动使用最低适用的限制级别,来提供最高程度的数据并发,但还能提供非常安全的数据完整性。限制级别越低、则有更多的可用数据供其他用户访问。相反,限制级别越高,则其它事务为获取其所需的锁类型就将遭受更多的限制。

在多用户的数据库系统中,Oracle使用两种模式的锁:

oracle 锁表session_oracle锁表怎么解决_oracle sql锁表解锁

2.1.4锁的持续时间

事务内各语句获得的锁在事务执行期内有效,以防止事务间破坏性的相互干扰,例如:脏读取(dirty read),无效地更新(lost update),以及其它并发事务中具有破坏性的DDL操作。如果某个事务中的SQL语句对数据进行了修改,只有在此事务提交后开始的事务才能看到前者修改的结果。

当用户提交(commit)或撤销(undo)一个事务后,Oracle将释放此事务内各个SQL语句获得的锁。当用户在事务内回滚到某个保存点(savepoint)后,Oracle也会释放此保存点后获得的锁。只有当前没有等待被锁资源的事务才能获得可用资源的锁。等待事务不会对可用资源加锁而是继续等待,直至拥有其所等待资源的事务完成提交或回滚。

锁历史文章

oracle 锁表session_oracle锁表怎么解决_oracle sql锁表解锁

About Me:小麦苗

●本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

●本文itpub地址:

●本文博客园地址:

●2016-10-21 09:00 ~ 2016-11-22 22:00 完成