https://www.it610.com/article/1762045.htm
上面是关于锁介绍的链接, 作者关于锁的介绍很详细, 大家可以看看.
下面是我们的实验过程.
-----------------------------------------------------------------------------------------------------------------------------------------------
3, 锁机制
(1)SELECT * FROM myemp WHERE deptno=10 FOR UPDATE 加锁, 解锁;
S1:SCOTT 用户分别登录两个 SQLPLUS 窗口是 session1 和 session2;
- Session1
- SELECT * FROM myemp WHERE deptno=10 FOR UPDATE;
结果:
- Session2
- SELECT * FROM myemp WHERE deptno=10 FOR UPDATE;
结果:
发现第 2 个会话, 一直在等待, 不执行......
S2 解除锁定
- Session1
- Commit;
- Session2
结果:
Commit 之后可以查询了!
(2)表级锁定和解锁;
S1:SCOTT 用户分别登录两个 SQLPLUS 窗口是 session1 和 session2;
- Session1:
- LOCK TABLE myemp IN SHARE MODE NOWAIT;
- Session2:
- DELETE FROM myemp;
结果:
因是共享锁, 第二个 SESSION 应该只能查度不能修改, 所以一直在等待
S2 解除锁定: 管理员身份登录 SQLPLUS 窗口 session3, 查看 (sid,serial#) 的步骤如下:
- S2.1:
- SELECT session_id,oracle_username,process FROM v$locked_object ;
结果:
使用语句:
SELECT sid,serial#,username,lockwait,status FROM v$session where sid IN(SESSION_ID);
即:->
- S2.2:
- SELECT sid, serial#, status FROM v$session where sid IN (132,191) ;
结果:
可以查询到 Serial#
最后使用
ALTER SYSTEM KILL SESSION'sid,serial#';
即:->
- ALTER SYSTEM KILL SESSION '132,711';
- (其中 132,711 用 S2.2 查询的 sid, serial# 替换)
解除死锁.
session1
结果:
这里就不贴截图了, 可以发现, 我们刚才的锁应该解除锁定.
Session2
结果:
这里我们刚才所作的操作现在也显示出来了.
---------------------------------------------------------------------------------------------------
后面没贴截图的部分, 希望看到我这篇文章的同学, 可以自己实验一下, 因为我是电脑原因, 突然卡住了, 所以就不贴截图了.
来源: http://www.bubuko.com/infodetail-3279862.html