JetGetLock 関数
適用対象: Windows |Windows Server
JetGetLock 関数
JetGetLock 関数は、行の更新、ロックの書き込み、または行が他のセッションの読み取りロックによって明示的に更新されないようにする機能を明示的に予約する手段を提供します。 通常、行の書き込みロックは、行の更新の結果として暗黙的に取得されます。 通常、レコードのバージョン管理のために読み取りロックは必要ありません。 ただし、場合によっては、トランザクションでは、シリアル化を適用するために行を明示的にロックするか、必要なロックが既に実行されているために後続の操作が成功することを望む場合があります。
JET_ERR JET_API JetGetLock(
__in JET_SESID sesid,
__in JET_TABLEID tableid,
__in JET_GRBIT grbit
);
パラメーター
sesid
この呼び出しに使用されるセッション。
tableid
この呼び出しに使用されるカーソル。
grbit
この呼び出しに使用するオプションを含むビットのグループ。次の 0 個以上が含まれます。
値 |
説明 |
---|---|
JET_bitReadLock |
このフラグにより、現在のレコードで読み取りロックが取得されます。 読み取りロックは、他のセッションによって既に保持されている書き込みロックと互換性がありませんが、他のセッションによって保持される読み取りロックと互換性があります。 |
JET_bitWriteLock |
このフラグにより、現在のレコードに対して書き込みロックが取得されます。 書き込みロックは、他のセッションによって保持される書き込みロックまたは読み取りロックと互換性はありませんが、同じセッションによって保持される読み取りロックと互換性があります。 |
戻り値
この関数は、次のいずれかの戻りコードを 使用して、JET_ERR データ型を返します。 考えられる ESE エラーの詳細については、「 拡張ストレージ エンジン エラー と エラー処理パラメーター」を参照してください。
リターン コード |
説明 |
---|---|
JET_errSuccess |
操作は正常に完了しました。 |
JET_errClientRequestToStopJetService |
JetStopService の呼び出しの結果、セッションに関連付けられたインスタンスのすべてのアクティビティが停止したため、操作を完了できません。 |
JET_errInstanceUnavailable |
セッションに関連付けられているインスタンスで、そのデータの整合性を保護するためにすべてのデータへのアクセスを取り消す必要がある致命的なエラーが発生したため、操作を完了できません。 このエラーは、Windows XP 以降のリリースでのみ返されます。 |
JET_errInvalidgrbit |
指定された grbit はJET_bitReadLockでもJET_bitWriteLockでもありません。 この 2 つのフラグのいずれかである必要があります。 |
JET_errNoCurrentRecord |
ロックを取得するには、レコードにカーソルが置かれている必要があります。 ロックは常にレコードに対して行われます。 |
JET_errNotInitialized |
セッションに関連付けられているインスタンスがまだ初期化されていないため、操作を完了できません。 |
JET_errNotInTransaction |
ロックは、トランザクション内のセッションによってのみ取得できます。 |
JET_errPermissionDenied |
カーソルを読み取り専用にして書き込みロックを取得することはできません。 |
JET_errRestoreInProgress |
セッションに関連付けられているインスタンスで復元操作が進行中のため、操作を完了できません。 |
JET_errSessionSharingViolation |
同じセッションを複数のスレッドに同時に使用することはできません。 このエラーは、Windows XP 以降のリリースでのみ返されます。 |
JET_errTermInProgress |
セッションに関連付けられているインスタンスがシャットダウンされているため、操作を完了できません。 |
JET_errTransReadOnly |
書き込みロックを取得するには、セッションに書き込みアクセス許可が必要です。 |
JET_errWriteConflict |
競合するロックが要求されたときに返されるエラー。 |
成功すると、セッションは要求されたロックを取得しました。
失敗した場合、セッションは要求されたロックを取得していません。
解説
セッションとカーソルが最終的に更新操作を実行しない場合でも、読み取り専用アクセス許可を持つセッションまたはカーソルを使用して書き込みロックを取得することはできません。 書き込みロックを取得するには、セッションとカーソルの両方に書き込み特権が必要です。
読み取りロックと書き込みロックは、ペシミスティック ロックの手段です。 ペシミスティック ロックでは、複数の同時実行セッションが競合し、操作が成功するようにロックを事前に取得する必要があります。
ほとんどの操作は、暗黙的に行われるロックによってシリアル化できます。 ただし、一部の操作では実行されません。 これを説明するために、2 つのトランザクションについて考えてみましょう。
T1 : R(A), U(B)
T2 : R(B), U(A)
レコード レベルのバージョン管理により、同時に実行された各トランザクションに、A と B の元の値が確実に表示されます。結果が読み取られたデータに依存している場合に、A と B に対して同じ結果を生成する可能性のある連続した実行順序はありません。 アプリケーションでこのトランザクションをシリアル化できるようにするには、値の読み取り時に、各トランザクションの A と B に対する明示的な読み取りロックを取得する必要があります。
要件
要件 | 値 |
---|---|
Client |
Windows Vista、Windows XP、または Windows 2000 Professional が必要です。 |
[サーバー] |
Windows Server 2008、Windows Server 2003、または Windows 2000 Server が必要です。 |
Header |
Esent.h で宣言されています。 |
Library |
ESENT.lib を使用します。 |
[DLL] |
ESENT.dllが必要です。 |
参照
JET_ERR
JET_SESID
JET_TABLEID
JetPrepareUpdate
JetStopService
JetUpdate