次の方法で共有


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