- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
SelectForupdate语句浅析
?
Select For update语句浅析
分类:?Oracle 体系结构2012-09-05 21:34?40417人阅读?评论(0)?收藏?举报oraclesessionsqlobjectreference数据库
Select …forupdate语句是我们经常使用手工加锁语句。通常情况下,select语句是不会对数据加锁,妨碍影响其他的DML和DDL操作。同时,在多版本一致读机制的支持下,select语句也不会被其他类型语句所阻碍。
?
借助for update子句,我们可以在应用程序的层面手工实现数据加锁保护操作。本篇我们就来介绍一下这个子句的用法和功能。
?
下面是采自Oracle官方文档《SQLLanguage Reference》中关于for update子句的说明:(请双击点开图片查看)
?
?
从for update子句的语法状态图中,我们可以看出该子句分为两个部分:加锁范围子句和加锁行为子句。下面我们分别针对两个方面的进行介绍。
?
加锁范围子句
?
在select…for update之后,可以使用of子句选择对select的特定数据表进行加锁操作。默认情况下,不使用of子句表示在select所有的数据表中加锁。
?
//采用默认格式for update
SQL select * from emp where rownum2 for update;
?
EMPNO ENAME?????JOB????????MGR HIREDATE?????????SAL?????COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
?7369 SMITH?????CLERK????12-17????800.00??????????????20
?
?
此时,我们观察v$lock和v$locked_object视图,可以看到锁信息。
//事务信息视图
SQL select addr,xidusn,xidslot,xidsqn from v$transaction;
?
ADDR????????XIDUSN???XIDSLOT????XIDSQN
-------- ---------- ---------- ----------
377DB5D0?????????7????????19???????808
//锁对象信息
SQL select xidusn,xidslot,xidsqn,object_id,session_id, oracle_username from v$locked_object;
?
???XIDUSN???XIDSLOT????XIDSQN?OBJECT_ID SESSION_ID ORACLE_USERNAME
---------- ---------- ---------- ---------- ---------- ------------------------------
????????7????????19???????808?????73181????????36 SCOTT
//
SQL select owner,object_name from dba_objects where object_id=73181;
?
OWNER?????????????????????????OBJECT_NAME
------------------------------ ------------------------------------------------------------
SCOTT?????????????????????????EMP
?
//
SQL select addr, sid, type, id1,id2,lmode, request, block from v$lock where sid=36;
?
ADDR?????SID TYPE???????ID1???????ID2?????LMODE???REQUEST?BLOCK
-------- ---------- ---- ---------- ---------- ---------- ---------- ----------
37E808F0???36 AE?????????100?????????0?????????4?????????0???0
B7DE8A44??36 TM???????73181?????????0?????????3?????????0??0
377DB5D0??36 TX??????458771???????808?????????6
文档评论(0)