1、模拟死锁的场景:
登录sqlplus,如下输入命令不提交。
-
C:\Windows\System32>sqlplus /nolog
-
-
SQL*Plus: Release 12.1.0.1.0 Production on 星期六 11月 7 16:02:00 20
-
-
Copyright (c) 1982, 2013, Oracle. All rights reserved.
-
-
SQL> conn / as sysdba
-
已连接。
-
SQL> conn scott/windows
-
已连接。
-
SQL> delete from emp;
-
-
已删除 12 行。
-
-
SQL>
2、在打开一个sqlplus,如下输入命令:
-
Microsoft Windows [版本 6.1.7601]
-
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
-
-
C:\Windows\System32>sqlplus /nolog
-
-
SQL*Plus: Release 12.1.0.1.0 Production on 星期六 11月 7 16:55:03 2015
-
-
Copyright (c) 1982, 2013, Oracle. All rights reserved.
-
-
SQL> conn scott/windows
-
已连接。
-
SQL> delete from emp;
此时在PL/SQL Developer中输入一下命令,查询出来锁。
-
select /*+ RULE */
-
ls.osuser os_user_name,
-
ls.username user_name,
-
decode(ls.type,
-
'RW',
-
'Row wait enqueue lock',
-
'TM',
-
'DML enqueue lock',
-
'TX',
-
'Transaction enqueue lock',
-
'UL',
-
'User supplied lock') lock_type,
-
o.object_name object,
-
decode(ls.lmode,
-
1,
-
null,
-
2,
-
'Row Share',
-
3,
-
'Row
-
Exclusive',
-
4,
-
'Share',
-
5,
-
'Share Row Exclusive',
-
6,
-
'Exclusive',
-
null) lock_mode,
-
o.owner,
-
ls.sid,
-
ls.serial# serial_num,
-
ls.id1,
-
ls.id2
-
from sys.dba_objects o,
-
(select s.osuser,
-
s.username,
-
l.type,
-
l.lmode,
-
s.sid,
-
s.serial#,
-
l.id1,
-
l.id2
-
from v$session s, v$lock l
-
where s.sid = l.sid) ls
-
where o.object_id = ls.id1
-
and o.owner <> 'SYS'
-
order by o.owner, o.object_name;
然后输入以下命令,查询出来sid和serial#:
-
SELECT /*+ rule */
-
lpad(' ', decode(l.xidusn, 0, 3, 0)) || l.oracle_username User_name,
-
o.owner,
-
o.object_name,
-
o.object_type,
-
s.sid,
-
s.serial#
-
FROM v$locked_object l, dba_objects o, v$session s
-
WHERE l.object_id = o.object_id
-
AND l.session_id = s.sid
-
ORDER BY o.object_id, xidusn DESC
然后输入以下命令,杀死死锁:alter
system kill session ‘sid,serial#’
-
Microsoft Windows [版本 6.1.7601]
-
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
-
-
C:\Windows\System32>sqlplus /nolog
-
-
SQL*Plus: Release 12.1.0.1.0 Production on 星期六 11月 7 17:43:49 2015
-
-
Copyright (c) 1982, 2013, Oracle. All rights reserved.
-
-
SQL> conn / as sysdba
-
已连接。
-
SQL> alter system kill session '129,17';
-
-
系统已更改。
-
-
SQL> alter system kill session '134,71';
-
-
系统已更改。
-
-
SQL>
杀死完成后,再回头看看,刚才锁住的sql,如下所示:
-
Microsoft Windows [版本 6.1.7601]
-
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
-
-
C:\Windows\System32>sqlplus /nolog
-
-
SQL*Plus: Release 12.1.0.1.0 Production on 星期六 11月 7 16:55:03 2015
-
-
Copyright (c) 1982, 2013, Oracle. All rights reserved.
-
-
SQL> conn scott/windows
-
已连接。
-
SQL> delete from emp;
-
-
已删除 12 行。
-
-
SQL>
已经执行完成了!
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22275400/viewspace-1825262/
,如需转载,请注明出处,否则将追究法律责任。