*データベースがロックした場合の処置 [#ya563583]
データベースがロックした場合、ロックを引き起こした犯人であるセッションを切断することで、データベース自体を再起動しなくても復旧できる場合が多いです。
*セッション切断の方法 [#y0672f26]
+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';
システムが変更されました。
**コメント
#comment