楼主: nyfor

[精华] 出一个关于Skip Locked的小题目

[复制链接]
论坛徽章:
126
ITPUB元老
日期:2007-07-04 17:27:50会员2007贡献徽章
日期:2007-09-26 18:42:10现任管理团队成员
日期:2011-05-07 01:45:08优秀写手
日期:2015-01-09 06:00:14版主7段
日期:2015-07-16 02:10:00
21#
发表于 2008-9-23 17:02 | 只看该作者
原帖由 zhangweicai74 于 2008-9-23 16:57 发表

你不是改行了么,怎么还在这儿混


没有改行!只不过是要基于Siebel这套成熟的企业应用软件从事开发了, 基于oracle数据库开发居多!

另外, 再开启另一个 SESSION窗口执行后没有记录, 者是否和第一次执行那条语句的结果集已经却定有关?

[ 本帖最后由 bell6248 于 2008-9-23 17:09 编辑 ]

使用道具 举报

回复
论坛徽章:
69
生肖徽章2007版:羊
日期:2008-11-14 14:42:19复活蛋
日期:2011-08-06 08:59:05ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20版主4段
日期:2012-05-15 15:24:11
22#
 楼主| 发表于 2008-9-23 17:26 | 只看该作者
此回帖内容被编辑到 2# 中去了

[ 本帖最后由 nyfor 于 2008-9-23 17:36 编辑 ]

使用道具 举报

回复
论坛徽章:
187
状元
日期:2016-04-28 14:18:17榜眼
日期:2016-04-28 14:18:17探花
日期:2016-04-28 14:18:17进士
日期:2016-04-28 14:18:17举人
日期:2016-04-28 14:18:17红宝石
日期:2012-04-13 17:18:06蓝锆石
日期:2012-02-20 12:20:11紫水晶
日期:2012-04-19 12:49:17祖母绿
日期:2012-02-27 22:10:14海蓝宝石
日期:2012-02-27 16:58:24
23#
发表于 2008-9-23 17:30 | 只看该作者
第一题 选择 B,
第二题 应是C

使用道具 举报

回复
论坛徽章:
3
奥运会纪念徽章:铁人三项
日期:2008-08-14 11:45:20生肖徽章2007版:马
日期:2009-03-20 11:26:202010新春纪念徽章
日期:2010-03-01 11:19:07
24#
发表于 2008-9-23 17:40 | 只看该作者
原帖由 nyfor 于 2008-9-23 16:15 发表
此题目, 可能对于一些新手还不知道 SKIP LOCKED 是干什么用的. 呵呵.

1. 我们看看第一个结果, 应该是 B.
这个小知识点地球人都知道, 就是: 同一个SESSION的锁定可以重复获取.

2. 第二题的结果是 A.
我们分析一下为什么出现这个结果,初看感觉是前面的SESSION锁定了全部的记录.
但我们从第二个SESSION 窗口中执行以下语句:
SQL> select * from t for update skip locked;

        ID
----------
         2
         3

2 rows selected.
可以发现后面两条记录并没有被第一个SESSION锁定.
那为何 select * from t where rownum  

在另一个session用同样的语句,因符合条件的记录已被锁定,是否可以认为oracle只做了查询,并未对表做其它动作,第一个session事物结束,第二个session未结束情况下,表是无法被删除?

使用道具 举报

回复
论坛徽章:
66
现任管理团队成员
日期:2011-05-07 01:45:08版主9段
日期:2013-04-21 02:21:02ITPUB年度最佳版主
日期:2014-02-19 10:05:27ITPUB年度最佳版主
日期:2013-01-30 17:30:25ITPUB年度最佳技术原创精华奖
日期:2012-03-13 17:12:05优秀写手
日期:2013-12-18 09:29:15元宝章
日期:2015-02-10 19:57:54金牌徽章
日期:2015-02-10 19:59:42银牌徽章
日期:2015-02-10 19:59:42铜牌徽章
日期:2015-02-10 19:59:41
25#
发表于 2008-9-23 17:44 | 只看该作者
原帖由 kmpx 于 2008-9-23 17:40 发表

在另一个session用同样的语句,因符合条件的记录已被锁定,是否可以认为oracle只做了查询,并未对表做其它动作,第一个session事物结束,第二个session未结束情况下,表是无法被删除?


这个是另外一个话题了

使用道具 举报

回复
论坛徽章:
69
生肖徽章2007版:羊
日期:2008-11-14 14:42:19复活蛋
日期:2011-08-06 08:59:05ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20版主4段
日期:2012-05-15 15:24:11
26#
 楼主| 发表于 2008-9-23 17:45 | 只看该作者
原帖由 kmpx 于 2008-9-23 17:40 发表

在另一个session用同样的语句,因符合条件的记录已被锁定,是否可以认为oracle只做了查询,并未对表做其它动作,第一个session事物结束,第二个session未结束情况下,表是无法被删除?

在另一个session用同样的语句,因符合条件的记录已被锁定,是否可以认为oracle只做了查询,并未对表做其它动作回复:是的,第一个session事物结束,第二个session未结束情况下,表是无法被删除?回复:可以删除, 因为第二个SESSION对表并无锁定
==> 经过 kmpx 测试发现第二个SESSION有个 MODE=3 的TM锁定.

[ 本帖最后由 nyfor 于 2008-9-23 17:58 编辑 ]

使用道具 举报

回复
论坛徽章:
3
奥运会纪念徽章:铁人三项
日期:2008-08-14 11:45:20生肖徽章2007版:马
日期:2009-03-20 11:26:202010新春纪念徽章
日期:2010-03-01 11:19:07
27#
发表于 2008-9-23 17:50 | 只看该作者
原帖由 nyfor 于 2008-9-23 17:45 发表

在另一个session用同样的语句,因符合条件的记录已被锁定,是否可以认为oracle只做了查询,并未对表做其它动作回复:是的,第一个session事物结束,第二个session未结束情况下,表是无法被删除?回复:可以删除, 因为第二个SESSION对表并无锁定

第一个sessionn
SQL> select * from t where rownum <= 1 for update skip locked;

        ID
----------
         1

SQL> select * from t where rownum <= 1 for update skip locked;

        ID
----------
         1

SQL>

第二个session
SQL> select * from t where rownum <= 1 for update skip locked;

未选定行

SQL>
第一个session

SQL> commit;

提交完成。

SQL> drop table t;
drop table t
           *
ERROR 位于第 1 行:
ORA-00054: 资源正忙,要求指定 NOWAIT


SQL>
????
这是我测试的结果,第二个session   commit后,表才能被删除

使用道具 举报

回复
论坛徽章:
3
奥运会纪念徽章:铁人三项
日期:2008-08-14 11:45:20生肖徽章2007版:马
日期:2009-03-20 11:26:202010新春纪念徽章
日期:2010-03-01 11:19:07
28#
发表于 2008-9-23 17:52 | 只看该作者
原帖由 wangfans 于 2008-9-23 17:44 发表


这个是另外一个话题了

是刚刚测试完,操作的时候出现的,不是特意来改变话题

使用道具 举报

回复
论坛徽章:
69
生肖徽章2007版:羊
日期:2008-11-14 14:42:19复活蛋
日期:2011-08-06 08:59:05ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20版主4段
日期:2012-05-15 15:24:11
29#
 楼主| 发表于 2008-9-23 17:57 | 只看该作者
还真是不能 drop table t;
这是什么原因呢?

谢谢 kmpx 提出这个问题.

经查发现第二个SESSION对 T 表有一个 LMODE=3  的TM锁定.

使用道具 举报

回复
论坛徽章:
138
19周年集字徽章-19
日期:2020-06-08 08:30:56马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:02路虎
日期:2013-11-22 12:26:18问答徽章
日期:2014-05-08 12:15:31
30#
发表于 2008-9-23 18:07 | 只看该作者
skiped lock这玩意是未公开的吧

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表