使用oracle数据库的过程中有可能会因为某些操作导致锁表,一旦发生了锁表的情况程序就无法正常使用了,因此要学会如何查看与杀掉锁表的进程。
查看锁表进程
select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.object_name, lo.locked_mode from v$locked_object lo, dba_objects ao, v$session sess where ao.object_id = lo.object_id and lo.session_id = sess.sid;
或者
select * from v$session t1, v$locked_object t2 where t1.sid = t2.session_id;
杀掉锁表进程
如果能查询出来记录,说明有锁表,这时候需要记录下sid和serial#,用于解除锁表(即杀掉锁表进程)。
alter system kill session 'sid, serial#';
要是杀掉了锁表进程之后并没有解决程序异常问题,可能是因为oracle有自己的进程管理策略,在很多情况下杀进程往往不能即时生效,这时候可以在语句末尾加上【immediately】再试试。
alter system kill session 'sid, serial#' immediately;
如果这样还不行的话,终极解决办法大概就是杀掉进程后重启程序服务了。
因为锁表导致的程序异常问题能通过杀掉锁表进程的方式解决,但还是应该找到锁表的原因,从根源上解决以避免问题再次产生。
"目的是应达到的效果(结果),目标是要达到效果的量化指标。"