Oracle给Select结果集加锁,Skip Locked(跳过加锁行获得可以加锁的结果集)

1、通过select for update或select for update wait或select for update nowait给数据集加锁

具体实现参考select for update和select for update wait和select for update nowait的区别

2、Skip Locked(跳过加锁行获得可以加锁的结果集)

Skip locked是oracle 11g引入的。

通过skip locked可以使select for update语句可以查询出(排除已经被其他会话加锁了的数据行)剩下的数据集,并给剩下的数据集,进行加锁操作。

a、测试一、

代码如下:新建一个SQL窗口1(相当于新建一个会话),执行

update test8 set price=6 where ID=1

但是不执行commit操作,此时,当前数据已经被加锁了。

然后,在新建一个SQL窗口2(相当于新建一个会话),执行

select * from test8 for update skip locked

根据结果集,我们发现ID=1的数据行被排除了

b、测试二

新建SQL窗口1(相当于新建一个会话)代码如下:执行如下语句

select * from test8 for update

此时,不进行commit操作,表中所有的数据行被加锁。根据测试一的结果得出推论:如果使用skip locked的话将查询不出任何结果

新建SQL窗口2(相当于新建一个会话)代码如下:执行如下语句

select * from test8 for update skip locked

没有查出任何结果集,ok,推论正确!

时间: 2024-11-06 06:22:43

Oracle给Select结果集加锁,Skip Locked(跳过加锁行获得可以加锁的结果集)的相关文章

oracle中 SELECT INTO 和INSERT INTO ... SELECT区别

在Oracle中,将一张表的数据复制到另外一个对象中.通常会有这两种方法:insert into select  和 select into from. 前者可以将select 出来的N行(0到任意数)结果集复制一个新表中,后者只能将"一行"结果复制到一个变量中.这样说吧,select into是PL/SQL language 的赋值语句.而前者是标准的SQL语句. 做一个简单测试,我们就可以很容易地看出两者的差别. 首先,我们创建两个表,一个作为源表,一个作为目标表. create

Oracle 查询(SELECT)语句(二)

?  简介 在前面的 Oracle 查询 SELECT 语句(一) 中介绍了 SELECT 常用的一些基本查询语法,接下来再来看 SELECT 更深入的一些查询功能和技巧,包括以下内容: 1.   All 与 Any 运算符 2.   分页查询(rownum) 3.   集合操作符(UNION.UNION ALL.INTERSECT.MINUS) 1.   All 与 Any 运算符 1)   All 运算符,表示满足给出列表中的所有值.通常用于以下场景: 1.   查出大于30号部门所有员工最

ORACLE逻辑DATAGUARD数据库如何恢复SKIP的表ORA-02019\ORA-16276\

--------------------------------------------------- 同步表 --------------------------------------------------- SQL> EXECUTE DBMS_LOGSTDBY.INSTANTIATE_TABLE('USERNAME', 'TABLENAME', 'DBLINKNAME'); BEGIN DBMS_LOGSTDBY.INSTANTIATE_TABLE('USERNAME', 'TABLEN

Oracle 数据库(oracle Database)Select 多表关联查询方式

Oracle数据库中Select语句语法及介绍 SELECT [ ALL | DISTINCT ] <字段表达式1[,<字段表达式2[,…] FROM <表名1>,<表名2>[,…] [WHERE <筛选择条件表达式>] [GROUP BY <分组表达式> [HAVING<分组条件表达式>]] [ORDER BY <字段>[ASC | DESC]] 语句说明: []方括号为可选项 [GROUP BY <分组表达式&g

在Hadoop集群实施成功后再次格式化名称节点,datanode无法加入集群的处理办法

格式化namenode后,通过jps可发现datanode没有启动成功,查看datanode上的日志/home/wukong/usr/hadoop-1.2.1/logs/hadoop-wukong-datanode-bd12.log,可以发现是namespaceid不对. 解决办法: 1.查看namenode上hadoop.tmp.dir参数路径 /usr/hadoop-tmp/dfs/name/current/VERSION中的namespaceid: 2.在其他数据节点上修改上dfs.dat

如何对行 表 数据库加锁

如何对行 表 数据库加锁 android 多线程数据库读写分析与优化 (转)SQLite的事务和锁 SQLite多线程下的并发操作

解决iPhone上select时常失去焦点,随意跳到下一个输入框,影响用户操作

window.addEventListener('load', function() { FastClick.attach(document.body); }, false); //300s延迟,解决iPhone上select时常失去焦点,随意跳到下一个输入框,影响用户操作 结合fastclick.min.js使用

18.1集群介绍18.2keepalived介绍18.3-5用keepalived配置高可用集群

18.1集群介绍18.2 keepalived介绍18.3 18.4 18.5 用keepalived配置高可用集群这里是用ngixn作为高可用的演示对象,因为有生产中很多企业用nginx作为负载均衡器使用编辑130上keepalived配置文件,内容从https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_keepalived.conf获取首先清空原来的配置文件内容再增加内容global_def

Oracle里面的用户smsdb无法登录 LOCKED(TIMED)

创建的一个用户smsdb ,查看状态LOCKED(TIMED) 解锁后,conn smsdb/password 仍然报错,然后又被锁 :最后发现是错误登陆次数达到oracle限制的10次:导致后续无法登陆操作.网上找的解决方法如下: 看看dba_users中该用户的状态等信息 SQL>select account_status,lock_date,profile from dba_users where username='SMSDB';发现昨天才锁定的,帐号状态为"LOCKED(TIME