この記事ではOracle Databaseのロックの種類について解説します。
ロックとは
ロックとは複数のユーザが同時にデータベースを更新する際にデータの整合性を保つために排他制御をする仕組みです。
ロックの対象は表などのデータベースオブジェクトやメモリ領域、データディクショナリなどになります。
対象をロックすることによってほかのユーザの影響を受けずに更新処理を行うことができます。
一方で他のユーザはロックされたリソースにはアクセスできず、ロックが解除されるまで待ち状態になります。
この待ち状態を減らすためにはロックの範囲を最小限にする必要があります。
ロックモードについて
ロックのモードには排他ロックと共有ロックの2つのモードがあります。
排他ロックはリソースを専有するロックです。
排他ロックがかかると他のセッションはいかなるロックも獲得できません。
共有ロックはリソースを共有するロックです。
共有ロックをかけると、そのリソースは読み取り専用になります。
共有ロックがかかっているリソースに対して他のセッションが共有ロックをかけることも可能です。
DMLのロック範囲
DML文を実行すると自動でロックが取得されます。
ロックの範囲は「行レベルロック」と、「表ロック」の2種類に分けられます。
行レベルロックは表の特定の行に対して排他ロックをかけます。
表ロックは表全体へかけるロックになります。
DML実行時にはこの2つのロックがかけられます。