同時実行制御の種類
多くのユーザーが同時にデータベースのデータを変更する場合、あるユーザーによる変更が別のユーザーによる変更に悪影響を及ぼすことを防ぐために、何らかの制御機構を実装する必要があります。この制御機構を同時実行制御と呼びます。
同時実行制御の原理は、制御方法によって次の 2 種類に分類されます。
- ペシミスティック同時実行制御
ロック機構により、ユーザーが他のユーザーに影響するデータの変更を行うことを防ぎます。あるユーザーによる操作でロックがかかると、そのユーザーがロックを解放するまで他のユーザーはロックと競合する操作を実行できません。この方式は、データの競合が多く、同時実行による競合が発生した場合にトランザクションをロールバックするコストに比べデータをロックして保護するコストの方が低い環境で主に使用されるので、ペシミスティック同時実行制御と呼ばれます。 - オプティミスティック同時実行制御
オプティミスティック同時実行制御では、データを読み取る時点ではロックがかかりません。データを更新するときに、そのユーザーが読み取ってから他のユーザーによる変更がなかったかが確認されます。他のユーザーがデータを更新していた場合、エラーが発生します。通常は、エラーが報告されたユーザーがトランザクションをロールバックして再実行します。この方式は、データの競合が少なく、データを読み取るときにロックして保護するコストに比べトランザクションを必要に応じてロールバックするコストの方が低い環境で主に使用されるので、オプティミスティック同時実行制御と呼ばれます。
Microsoft SQL Server 2005 ではさまざまな同時実行制御がサポートされています。接続のトランザクション分離レベルやカーソルの同時実行オプションを選択することで、同時実行制御の種類を指定できます。これらの属性を選択するには、Transact-SQL ステートメントを使用するか、ADO、ADO.NET、OLE DB、ODBC などのデータベース API (アプリケーション プログラミング インターフェイス) のプロパティおよび属性を指定します。
カーソルの同時実行の詳細については、「カーソルの同時実行 (データベース エンジン)」を参照してください。
トランザクション分離レベルの詳細については、「データベース エンジンにおける分離レベル」を参照してください。