コンカレンシー制御について
コンカレンシー制御とは、複数のユーザーが同時に行を更新しているときにデータベースの整合性を維持するために使用される、さまざまな手法を表します。 不適切なコンカレンシーは、ダーティ リード、ファントム読み取り、反復不能読み取りなどの問題につながります。 SQL Server 用 Microsoft JDBC ドライバー は、これらの問題を解決するために SQL Server によって使用されるすべてのコンカレンシー手法へのインターフェイスを提供します。
Note
SQL Server のコンカレンシーの詳細については、「同時実行データ アクセスの管理」を参照してください。
解説
JDBC ドライバーは、以下に示すコンカレンシーの種類をサポートしています。
コンカレンシーの種類 | 特性 | 行ロック | 説明 |
---|---|---|---|
CONCUR_READ_ONLY | [読み取り専用] | いいえ | カーソルを使用して更新することはできません。また、結果セットを構成する行にはロックが設定されません。 |
CONCUR_UPDATABLE | オプティミスティック読み取り、書き込み | いいえ | データベースで、行の競合が発生する可能性が低いと想定されます。 行の整合性は、タイムスタンプの比較によって検証されます。 |
CONCUR_SS_SCROLL_LOCKS | ペシミスティック読み取り、書き込み | はい | データベースで、行の競合が発生する可能性が高いと想定されます。 行の整合性は、行のロックによって保証されます。 |
CONCUR_SS_OPTIMISTIC_CC | オプティミスティック読み取り、書き込み | いいえ | データベースで、行の競合が発生する可能性が低いと想定されます。 行の整合性は、タイムスタンプの比較によって検証されます。 SQL Server 2005 (9.x) 以降の場合、テーブルにタイムスタンプ列が含まれていなければ、サーバーはこの同時実行の種類を CONCUR_SS_OPTIMISTIC_CCVAL に変更します。 SQL Server 2000 (8.x) の場合、基になるテーブルにタイムスタンプ列があれば、OPTIMISTIC WITH VALUES が指定されていても、OPTIMISTIC WITH ROW VERSIONING が使用されます。 OPTIMISTIC WITH ROW VERSIONING が指定されていて、テーブルにタイムスタンプがない場合は、OPTIMISTIC WITH VALUES が使用されます。 |
CONCUR_SS_OPTIMISTIC_CCVAL | オプティミスティック読み取り、書き込み | いいえ | データベースで、行の競合が発生する可能性が低いと想定されます。 行の整合性は、行データの比較によって検証されます。 |
更新不可能な結果セット
更新可能な結果セットは、行の挿入、更新、および削除が可能な結果セットです。 次の場合、SQL Server は更新可能なカーソルを作成できません。 "結果セットは更新可能ではありません" という意味の例外が生成されます。
原因 | 説明 | 解決方法 |
---|---|---|
ステートメントが JDBC 2.0 (以降) の構文を使用して作成されていない | JDBC 2.0 では、ステートメントを作成するための新しい方法が導入されました。 JDBC 1.0 の構文を使用した場合、結果セットは既定で読み取り専用になります。 | ステートメントを作成するときに、結果セットの種類とコンカレンシーを指定します。 |
ステートメントが TYPE_SCROLL_INSENSITIVE を使用して作成されている | SQL Server は、静的スナップショット カーソルを作成します。 このカーソルは、他のユーザーによる行の更新からカーソルを保護するために、基になるテーブル行から切り離されています。 | TYPE_SCROLL_SENSITIVE、TYPE_SS_SCROLL_KEYSET、TYPE_SS_SCROLL_DYNAMIC、または TYPE_FORWARD_ONLY を CONCUR_UPDATABLE と共に使用し、静的カーソルが作成されないようにします。 |
テーブル デザインにより KEYSET カーソルまたは DYNAMIC カーソルが使用できなくなっている | 基になるテーブルに、SQL Server が行を一意に識別できる一意キーがありません。 | 一意キーをテーブルに追加し、各行を一意に識別できるようにします。 |