易截截图软件、单文件、免安装、纯绿色、仅160KB

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 support一次危机处理(之一)

天有不测风云,
IBM 的中端磁盘阵列这次又惹祸了。在微码升级的时候,
DS4800 发生故障。IBM工程师把阵列故障恢复后,拍拍屁股走人,留下了阵列上不一致的数据。
没办法,阵列上的数据又得我们来想办法抢救了。。。。
还好有oracle support的支持我们最终化解了这次危机。下文详细介绍了整个恢复的过程。
 
&nbs ......

C#在64位操作系统上连接Oracle的问题和解决方案


C#使用System.Data.OracleClient连接Oracle数据库。之前在WinXP上正常运行的程序移植到 Windows 2008 x64上之后就连不上数据库了,错误信息如下:
尝试加载 Oracle客户端库时引发BadImageFomatException。如果在安装32位Oracle客户端组件的情况下以64位模式运行,将出现此问题。
错误原因是原来WinXP机子上所安装的Orac ......

Oracle常用操作笔记

select name from v$datafile;
create dataspace tablespace datafile '/oracle/oradata/orcl/data01.dbf' size 1024m,'/oracle/oradata/orcl/data02.dbf' size 1024m autoextend on next 100m maxsize unlimited;
alter tablespace dataspace add datafile '/oracle/oradata/orcl/da ......

ORACLE SQL 优化的若干方法

一、 先介绍一下oracle的SGA:数据库的系统全局区,SGA主要由三部分构成:共享池、数据缓冲区、日志缓冲区。 1、共享池又由两部分构成:共享SQL区和数据字典缓冲区。共享SQL区专门存放用户SQL命令,oracle使用最近最少使用等优先级算法来更新覆盖;数据字典缓冲区(library cache)存放数据库运行的动态信息。数据库运行一 ......

oracle新建用户,授权,建表空间语句

oracle创建表空间,创建用户(转)
关键字: oracle 表空间 用户
//创建临时表空间
create temporary tablespace test_temp
tempfile 'E:\oracle\product\10.2.0\oradata\testserver\test_temp01.dbf'
size 32m
autoextend on
next 32m maxsize 2048m
extent management local;
//创建数据表空间
create ta ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号