Share via


コンカレンシー制御について

JDBC ドライバーのダウンロード

コンカレンシー制御とは、複数のユーザーが同時に行を更新しているときにデータベースの整合性を維持するために使用される、さまざまな手法を表します。 不適切なコンカレンシーは、ダーティ リード、ファントム読み取り、反復不能読み取りなどの問題につながります。 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 が行を一意に識別できる一意キーがありません。 一意キーをテーブルに追加し、各行を一意に識別できるようにします。

関連項目

JDBC ドライバーによる結果セットの管理