다음을 통해 공유


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 호출로 인해 세션과 연결된 instance 모든 작업이 중단되었으므로 작업을 완료할 수 없습니다.

JET_errInstanceUnavailable

세션과 연결된 instance 해당 데이터의 무결성을 보호하기 위해 모든 데이터에 대한 액세스를 해지해야 하는 심각한 오류가 발생하여 작업을 완료할 수 없습니다. 이 오류는 Windows XP 이상 릴리스에서만 반환됩니다.

JET_errInvalidgrbit

지정된 grbit 는 JET_bitReadLock 또는 JET_bitWriteLock 않습니다. 이 두 플래그 중 하나여야 합니다.

JET_errNoCurrentRecord

잠금을 획득하려면 커서가 레코드에 있어야 합니다. 잠금은 항상 레코드에 있습니다.

JET_errNotInitialized

세션과 연결된 instance 아직 초기화되지 않았기 때문에 작업을 완료할 수 없습니다.

JET_errNotInTransaction

잠금은 트랜잭션의 세션에서만 가져올 수 있습니다.

JET_errPermissionDenied

커서는 읽기 전용일 수 없으며 쓰기 잠금을 획득할 수 없습니다.

JET_errRestoreInProgress

세션과 연결된 instance 복원 작업이 진행 중이므로 작업을 완료할 수 없습니다.

JET_errSessionSharingViolation

두 개 이상의 스레드에 대해 동시에 동일한 세션을 사용할 수 없습니다. 이 오류는 Windows XP 이상 릴리스에서만 반환됩니다.

JET_errTermInProgress

세션과 연결된 instance 종료 중이므로 작업을 완료할 수 없습니다.

JET_errTransReadOnly

세션에는 쓰기 잠금을 획득할 수 있는 쓰기 권한이 있어야 합니다.

JET_errWriteConflict

충돌하는 잠금이 요청되면 반환되는 오류입니다.

성공하면 세션이 요청된 잠금을 획득했습니다.

실패 시 세션이 요청된 잠금을 획득하지 못했습니다.

설명

세션 및 커서가 궁극적으로 업데이트 작업을 수행하지 않더라도 읽기 전용 권한이 있는 세션 또는 커서를 사용하여 쓰기 잠금을 가져올 수 없습니다. 쓰기 잠금을 획득하려면 세션과 커서 모두 쓰기 권한이 있어야 합니다.

읽기 및 쓰기 잠금은 비관적 잠금의 수단입니다. 비관적 잠금은 여러 동시 세션이 충돌하여 작업이 성공할 수 있도록 잠금을 미리 획득해야 합니다.

대부분의 작업은 암시적으로 수행된 잠금으로 직렬화할 수 있습니다. 그러나 일부 작업은 그렇지 않습니다. 이를 설명하기 위해 두 트랜잭션을 고려합니다.

T1 : R(A), U(B)

T2 : R(B), U(A)

레코드 수준 버전 관리를 사용하면 동시에 실행될 때 각 트랜잭션에 A 및 B의 원래 값이 표시됩니다. 결과가 읽은 데이터에 종속된 경우 A 및 B에 대해 동일한 결과를 생성할 수 있는 직렬 실행 순서가 없습니다. 애플리케이션이 이 트랜잭션을 직렬화할 수 있도록 하려면 값을 읽을 때 각 트랜잭션에서 A 및 B에 대한 명시적 읽기 잠금을 획득해야 합니다.

요구 사항

요구 사항

클라이언트

Windows Vista, Windows XP 또는 Windows 2000 Professional이 필요합니다.

서버

Windows Server 2008, Windows Server 2003 또는 Windows 2000 Server가 필요합니다.

머리글

Esent.h에서 선언되었습니다.

라이브러리

ESENT.lib를 사용합니다.

DLL

ESENT.dll 필요합니다.

참고 항목

JET_ERR
JET_SESID
JET_TABLEID
JetPrepareUpdate
JetStopService
JetUpdate