同時実行
同時実行は、複数のユーザーが同時にデータにアクセスできる機能です。データベース エンジンでサポートできる同時操作数が多い場合は、データベースの同時実行性が増加します。Microsoft SQL Server Compact 3.5 では、ロックを使用して同時実行を制御し、データを保護することができます。このロックでは、複数のユーザーが互いに競合せずに、同時に共有データにアクセスし、共有データを変更できる方法を制御します。詳細については、「ロック (SQL Server Compact)」を参照してください。
同時実行の問題
複数のユーザーによるデータの変更と読み取りを管理しないと、同時実行の問題が発生する可能性があります。たとえば、複数のユーザーがデータベースに同時にアクセスした場合、同じデータに対して複数の操作が同時に実行されます。SQL Server Compact 3.5 の使用時には、同時実行に関する次のような問題が発生します。
この問題は、複数のトランザクションで同じ行が選択され、最初に選択された値に基づいて行が更新されると発生します。最新の更新によって他のトランザクションで加えられた更新データが上書きされると、データが失われてしまいます。
不一致分析 (反復不能読み取り)。
反復不能読み取りは、2 つ目のトランザクションが同じ行に複数回アクセスし、毎回異なるデータを読み取る場合に発生します。これは、同じ行が複数回読み取られることになります。そのたびに、別のトランザクションによって情報が変更されます。
ファントム読み取り。
ファントム読み取りは、トランザクションによって読み取られる行の範囲に含まれているいずれかの行で、挿入操作または削除操作が行われるときに発生します。トランザクションの最初の読み取りの範囲に含まれる行は、別のトランザクションによって削除されたことになるので、2 回目以降の読み取りでは存在しなくなった行を示します。同様に、別のトランザクションで挿入が行われた場合、トランザクションの 2 回目以降の読み取りは、最初の読み取りで存在しなかった行を示します。
注意
SQL Server Compact 3.5 では発生しませんが、非常に一般的な同時実行の問題として非コミット依存 (ダーティ リード) があります。この問題は、2 回目のトランザクションで、別のトランザクションによって更新中の行が選択されると発生します。2 回目のトランザクションが読み取るデータは、まだコミットされていないので、行を更新中のトランザクションによって変更される可能性があります。ダーティー リードは、MicrosoftSQL Server の使用中に発生することがあります。同時実行の問題の詳細については、SQL Server オンライン ブックの「同時実行の影響」を参照してください。
同時実行制御
データベース シナリオでは、次の 2 種類の同時実行制御メカニズムがあります。
オプティミスティック同時実行制御
オプティミスティック同時実行制御は、複数のユーザー間でリソースの競合が起こらないことを前提として機能します。また、この同時実行制御では、どのリソースもロックせずにトランザクションを実行できます。トランザクションによりデータの変更が試行されている場合だけ、リソースが確認されます。この確認により、競合が発生したかどうかが判断されます (たとえば、バージョン番号が確認されます)。競合が発生した場合、アプリケーションによってデータが読み取られ、再び変更が試される必要があります。オプティミスティック同時実行制御は製品に組み込まれていませんが、データベース アクセスを監視することで、手動でアプリケーションに組み込むことができます。
ペシミスティック同時実行制御
ペシミスティック同時実行制御では、トランザクションの処理中、必要に応じてリソースがロックされます。SQL Server Compact 3.5 では、トランザクションの処理中に必要に応じてリソースをロックするペシミスティック同時実行制御がサポートされています。
オプティミスティック同時実行制御とペシミスティック同時実行制御の詳細については、SQL Server オンライン ブックの「同時実行制御の種類」を参照してください。
注意
一部の 64 ビット プラットフォームの環境では、以前のバージョンの SQL Server Compact を使用したデータベース ファイルへの同時アクセスがサポートされません。64 ビット コンポーネントの詳細については、「64 ビット データベース アプリケーションの管理」を参照してください。