ロックの種類
①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#'
■ロックの検出?
検出したらアラーとログに出力される