使用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;
如果這樣還不行的話,終極解決辦法大概就是殺掉進程后重啟程序服務了。
因為鎖表導致的程序異常問題能通過殺掉鎖表進程的方式解決,但還是應該找到鎖表的原因,從根源上解決以避免問題再次產生。
"目的是應達到的效果(結果),目標是要達到效果的量化指標。"