共计 2114 个字符,预计需要花费 6 分钟才能阅读完成。
普通的 Oracle 开发人员经常会遇到删除,修改数据遇到锁,还有修改或删除存储过程产生锁。请看下面的例子:
一、DML 锁解决办法
假设锁在会话 1 上
session1:
drop table test;
create table test as select * from dba_objects;
select * from test for update;
系统现在无法完成 DML 操作,这个时候要人工造成一个锁等待冲突的现象
session2:
select sid from v$mystat where rownum=1; –204 先查出被堵塞会话 id
select * from test for update;
排除,解决
session3:
– 找到被堵塞会话中,可以看到行锁的等待事件 enq: TX – row lock contention,还可以看到制造堵塞的源头
select w.EVENT,w.BLOCKING_INSTANCE,w.BLOCKING_SESSION from v$session w where w.sid=204;
EVENT BLOCKING_INSTANCE BLOCKING_SESSION
—————————— —————– —————-
enq: TX – row lock contention 1 134
查找到源头的会话信息
select s.INST_ID,s.SID,s.SERIAL# from gv$session s where s.INST_ID =1 and s.SID =134;
INST_ID SID SERIAL#
———- ———- ———-
1 134 3559
现在实例 1 上杀会话:
alter system kill session ‘134,3559’;
有的时候不一定能杀掉,则需要在操作系统层面上杀:
select spid
from gv$process p, gv$session s
where p.INST_ID = s.INST_ID
and p.INST_ID = 1
and s.SID = 134
and s.SERIAL# = 3559
and p.ADDR = s.PADDR;
SPID
—–
27004
登陆实例 1 执行
kill -9 27004
二、DDL 锁解决办法
假设锁在会话 1 上
session1:
create or replace procedure p_test is
begin
dbms_lock.sleep(1000);
end;
call p_test();
系统现在无法完成 DML 操作,这个时候要人工造成一个锁等待冲突的现象
session2:
select sid from v$mystat where rownum=1; –134 先查出被堵塞会话 id
drop procedure p_test;
排除,解决
session3:
– 找到被堵塞会话中,可以看到行锁的等待事件 enq: TX – row lock contention,还可以看到制造堵塞的源头
select w.EVENT,w.BLOCKING_INSTANCE,w.BLOCKING_SESSION from v$session w where w.sid=134;
EVENT BLOCKING_INSTANCE BLOCKING_SESSION
—————————————————————- —————– —————-
library cache pin 1 202
查找到源头的会话信息
select s.INST_ID,s.SID,s.SERIAL# from gv$session s where s.INST_ID =1 and s.SID =202;
INST_ID SID SERIAL#
———- ———- ———-
1 202 105
现在实例 1 上杀会话:
alter system kill session ‘202,105’;
有的时候不一定能杀掉,则需要在操作系统层面上杀:
select spid
from gv$process p, gv$session s
where p.INST_ID = s.INST_ID
and p.INST_ID = 1
and s.SID = 202
and s.SERIAL# = 105
and p.ADDR = s.PADDR;
SPID
—–
27008
登陆实例 1 执行
kill -9 27008
更多 Oracle 相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-01/139746.htm