oracle表在什么情况下会被锁住
在对指定表做append操作,其他再做truncate时候,会产生锁表,如下验证步骤,
1、创建测试表,
create table test_lock(id number, value varchar2(200));
2、执行append语句;并且不做提交,insert /*+append*/ into test_lock values(1,1);
3、再次执行清表语句,truncate table test_lock;报锁表错误,
4、查看锁表语句,发现被锁表,
select b.object_name, t.*
from v$locked_object t, user_objects b
where t.object_id = b.object_id
ORA-00054: 资源正忙,要求指定 NOWAIT
解决方案:
1.查看有没有对象被锁
select * from v$locked_object;
2.得到被锁对象的session_id
select session_id from v$locked_object;
3.通过上⾯得到的session_id去取得v$session的sid和serial#(sid是第2步得到的session_id)
SELECT sid, serial#, username, osuser FROM v$session where sid = '259';
4.杀死该进程(ALTER SYSTEM KILL SESSION 'sid,serial')
ALTER SYSTEM KILL SESSION '259,3057';
————————————————