Oracle/データベースロック時の開放
データベースがロックした場合の処置 †
データベースがロックした場合、ロックを引き起こした犯人であるセッションを切断することで、データベース自体を再起動しなくても復旧できる場合が多いです。
セッション切断の方法 †
- SQL*PLUSで、該当のデータベースに接続します。
ALTER SYSTEM権限が必要なので、「system/manager」ユーザでログインします。 - V$LOCKデータディクショナリから、ロックしているセッションを突き止めます。
SELECT SID,TYPE,LMODE,REQUEST,CTIME FROM V$LOCK WHERE TYPE IN ('TX','TM') ; (実行結果) SID TY LMODE REQUEST CTIME ---------- -- ---------- ---------- ---------- 140 TX 6 0 17573 140 TM 3 0 17568 140 TM 3 0 17573 SIDはセッションID、CTIMEはロック時間(秒)を示します。
- 次に、V$SESSIONデータディクショナリから、ロックしているセッションのシリアルNo.を突き止めます。
SELECT SADDR,SID,SERIAL#,USERNAME,PROGRAM FROM V$SESSION WHERE SID = ANY(SELECT SID FROM V$LOCK WHERE TYPE IN ('TX','TM')) ; (実行結果) SADDR SID SERIAL# USERNAME -------- ---------- ---------- ------------------------------ PROGRAM ---------------------------------------------------------------- 37DBA190 140 5688 SMS JDBC Thin Client
- 最後に、ALTER SYSTEM KILLコマンドで、ロックしているセッションを切断します。
(基本文法) ALTER SYSTEM KILL SESSION 'sid,serial#' (例) ALTER SYSTEM KILL SESSION '140,5688'; (実行結果) SQL> ALTER SYSTEM KILL SESSION '140,5688'; システムが変更されました。
このページのURL: