【SQL Server】【Oracle】ロック(Lock)

ロック

 * 複数ユーザーがテーブルやレコードなどを更新しようとした際、
   同時アクセスを制限することで、データの不整合性などが生じないようにするための仕組み

 [1] 排他ロック
 [2] 共有ロック
 [3] 更新ロック (SQL Server)

[1] 排他ロック

 * レコードのデータを変更するために取得するロックで、一つのレコードに対して、一つのプロセスだけが取得できる
 * OracleSQL Serverでは、あるプロセスがデータを更新する際には自動的に排他ロックを取得
  => これによって、データを更新している途中で、ほかのプロセスがデータを読み込んだり、
     変更できないようになる

[2] 共有ロック

 * リソースに対して、同時に複数のプロセスが取得できるロックで、基本的に読み込みの際に利用する

[3] 更新ロック

 * 働き自体は共有ロックと同じですが、取得できるのは、
   一つのレコードに対して、一つのプロセスに限られる
 * 主に、あるレコードのデータを読み込んだ後に、排他ロックに切り替えてデータを書き込むなどに使用する


デッドロック / Dead Lock

 * トランザクションの実行によって、複数のタスクが相手の確保しているものを待ち続けてしまう状態になり、
   いつまでたっても待ち状態が続いてしまう(固まってしまう)こと