アットウィキロゴ

ロック

ロックの種類

①DMLロック
 ・処理対象行に対する排他行ロック
 ・処理対象表に対する共有表ロック
  ⇒DDLからの防止のため
   ※DDLから排他表ロックが取得できない場合は、以下のエラーとなる
    ORA-00054 : リソースビジー、NOWAITが指定されていました。

②手動行ロック
 通常のselectでは行ロックを取得することはないが、明示的に取得することができる。

 SELECT ・・・FOR UPDATE [NOWAI|WAIT 待機秒数]

 ・NOWAIT、WAITがないとロック取得まで待機
 ・NOWAIT指定の場合は、エラーとして制御を戻す(ORA-00054エラーが返る)
 ・WAIT指定の場合、指定した秒数を待機し超えるとエラー

③手動表ロック
 多くの行をロックする必要あるバッチなどの場合に有効

 LOCK TABLE 表名 IN ロックモード名 MODE [NOWAIT]



■ロックの競合
ロックは、ロック取得したトランザクションが終了(COMMIT、ROLLBACK)するまで取得される。


■ロック競合の原因
 ①トランザクションがコミットされていない
 ②不必要に長いトランザクション
 ③不必要に高いロックレベル

■ロックの解除
 セッションを中断する

 v$sessionからSID、serial#を取得して以下を実行する

 alter system kill session 'sid,serial#'

 

■ロックの検出?

 検出したらアラーとログに出力される

最終更新:2009年06月29日 14:47