少しIT関連に詳しい人なら不思議に思うことがありませんか?
データーベースに対して同時に書き込むことがあってもなぜデーターは正しく処理されるのか。あるいは同時に書き込もうとした場合に書き込みトランザクションはなぜエラーにならないのだろうかと。
OracleやMS SQL Serverなどのデーターベース管理システムでは、ある処理がデーターベースに書き込み中に他の処理がデーターベースに書き込もうとすると、排他制御と呼ばれる仕組みが働いて書き込めないようになっています。
このことにより、同時に複数のトランザクションがデーターベースの更新を行うことでデーターが壊れてしまったりすることを防いでいます。
その仕組みは大まかに以下の概要となります。
- 特定のトランザクションがデーターベースに書き込みに行く
- データーベースはそのトランザクションにのみアクセスを許可。他のトランザクションからはアクセス出来ないロック状態となります。
- 最初のトランザクション処理が実行されます。
- 処理中のトランザクション処理が完了すれば、他のトランザクションのアクセスが可能となります。
基本的にデータベース管理システムでは上記の様な方法で、複数トランザクションからの同時実行を制御しています。