SELECT ... FOR UPDATE(WAIT/NOWAIT)命令与ORACLE锁
oracle锁的排队机制:
请求锁定需要排队。如果某个会话请求一个锁定,但是由于其他会话已经锁定了指定记录或对象而无法获得所需的锁定,那么这个会话将会等待。此时,可能多个会话都在等待访问相同记录或对象,在这种情况下,ORACLE会跟踪这些会话请求锁定的顺序。
如果不希望某个会话在无法获得锁定时进行排队等候,那么避免排队的唯一方式是使用SELECT ... FOR
UPDATE(子句WAIT/NOWAIT)命令。SELECT ... FOR
UPDATE命令会采用专用的模式来选择和锁定记录。如果某条记录已被锁定,那么在锁定被释放前,SELECT ... FOR
UPDATE语句会像DML语句一样进行排队并挂起会话。使用子句NOWAIT或WAIT
<n>就可以避免挂起会话,其中<n>是以秒为单位的数值。
我们在使用ORACLE进行数据处理的时候,有时需要对查询出来的记录进行锁定,禁止其他进程对该记录进行修改操作。
oracle数据库提供了一种利用SELECT的FOR
UPDATE子句实现的方法(可能sqlserver也有这个功能,但是没有测试过)。通过select * from ta for
update方法,可以将查询结果中的记录进行update锁定,及不允许其他进行对这些记录进行修改。我们还可以通过select *
from a for update of a.a;(a表的a列)对记录中的某一列进行锁定。
当我们使用FOR
UPDATE子句将记录锁定后,其他进程在对锁定记录进行update或delete操作时,就会处于停顿状态,等待解锁。当锁定进程释放锁定以后才会继
续执行。如果不想其他进行进入停顿状态,可以用nowait子句,直接返回操作异常信息,提示操作的记录处于锁定状态不能进行修改。
所以我们在做多线程同步时,可以通过select * form ta for update
nowait的方法防止多个进程同时操作同一数据。
这种锁定方式是建立在数据库连接的基础上,一旦连接断开或者锁定进程commit时,这种锁定就自动解除。同时这种锁定方式是一种update锁定,锁定时不影响其他的select操作。
相关文档:
oracle常用函数-----------------------------------------------
SQL中的单记录函数
1.ASCII
返回与指定的字符对应的十进制数;
SQL> select ascii(’A’) A,ascii(’a’) a,ascii(’0’) zero,ascii(’ ’) space from dual;
A A ZERO SPACE
--------- --------- - ......
Windows下ORACLE 10g安装与操作图解
刚刚接触ORACLE的人来说,从那里学,如何学,有那些工具可以使用,应该执行什么操作,一定回感到无助。所以在学习使用ORACLE之前,首先来安装一下ORACLE 10g,在来掌握其基本工具。俗话说的好:工欲善其事,必先利其器。我们开始吧!
首先将ORACLE 10g的安装光盘放入光驱,如果自动运行 ......
血液明细表如下:
create table "blood"."OC_CarryOrderD" (
ID nvarchar2(20) &n ......
一.什么是注册
注册就是将数据库作为一个服务注册到监听程序。客户端不需要知道数据库名和实例名,只需要知道该数据库对外提供的服务名就可以申请连接到数据库。这个服务名可能与实例名一样,也有可能不一样。
在数据库服务器启动过程中,数据库服务器会向监听程序注册相应的服务(无论何时启动一个数据库,默认地都 ......
Oracle提供了大量索引选项。知道在给定条件下使用哪个选项对于一个应用程序的性能来说非常重要。一个错误的选择可能会引发死锁,并导致数据库性能急剧下降或进程终止。而如果做出正确的选择,则可以合理使用资源,使那些已经运行了几个小时甚至几天的进程在几分钟得以完成,这样会使您立刻成为一位英雄。这篇文章就将简单的 ......