miya
この記事ではOracleDBがロックされた場合の解除手順と、解除対象が多い場合に解除コマンドを生成するSQLを紹介します。
DBをロックしているセッションを確認
Oracleのデータベースをロックされていた場合、セッションを特定するには以下のSQLで確認をします。
1 2 3 | SELECT SID, SERIAL#, MACHINE, STATUS, PROGRAM FROM V$SESSION WHERE USERNAME = 'ユーザ名を指定'; |
ロックを解除するコマンド
セッションを確認できたら、不要なものを以下のコマンドでkillすることで、ロックを強制的に解除できます。
1 2 3 4 | ALTER SYSTEM KILL SESSION 'SERIAL#の値'; 複数選択する場合は ALTER SYSTEM KILL SESSION 'SERIAL#の値','SERIAL#の値'; |
ロックを解除するコマンドを生成するSQL
この時、killしたいセッションが大量にあると、面倒です。
そういう時は、以下のコマンドを実行することで、ALTER SYSTEM KILL SESSIONコマンドを作成できます。
1 2 3 | select 'alter system kill session '''||s.sid||','||s.serial#||''' ;' from v$session s, v$locked_object l, dba_objects o where s.sid = l.session_id and l.object_id = o.object_id; |
セッションをkillする場合は十分に気を付けましょう。
V$SESSIONについては以下リファレンスが有効です。
[blogcard url="https://docs.oracle.com/cd/E16338_01/server.112/b56311/dynviews_3016.htm"]