JetOpenTemporaryTable 함수

적용 대상: Windows | Windows Server

JetOpenTemporaryTable 함수

JetOpenTemporaryTable 함수는 JetCreateTableColumnIndex를 통해 생성된 일반 테이블과 마찬가지로 레코드를 저장하고 검색하는 데 사용할 수 있는 단일 인덱스로 휘발성 테이블을 만듭니다.

Windows Vista:JetOpenTemporaryTable 이 Windows Vista에 도입되었습니다.

임시 테이블은 휘발성 특성으로 인해 일반 테이블보다 빠릅니다. 순차적으로 액세스하면 레코드 집합에서 중복 제거를 신속하게 정렬하고 수행할 수 있습니다.

    JET_ERR JET_API JetOpenTemporaryTable(
      __in          JET_SESID sesid,
      __in          JET_OPENTEMPORARYTABLE* popentemporarytable
    );

매개 변수

sesid

이 호출에 사용할 세션입니다.

popentemporarytable

입력에서 만들 임시 테이블에 대한 설명이 포함된 JET_OPENTEMPORARYTABLE 구조체에 대한 포인터입니다. 성공적으로 호출된 후 구조체에는 임시 테이블 및 열 식별에 대한 핸들이 포함됩니다.

반환 값

이 함수는 다음 반환 코드 중 하나를 사용하여 JET_ERR 데이터 형식을 반환합니다. 가능한 ESE 오류에 대한 자세한 내용은 확장 가능한 스토리지 엔진 오류오류 처리 매개 변수를 참조하세요.

반환 코드

설명

JET_errSuccess

작업이 성공적으로 완료되었습니다.

JET_errOutOfMemory

완료할 메모리가 부족하여 작업이 실패했습니다.

JetOpenTemporaryTable 은 호스트 프로세스의 주소 공간이 너무 조각화되면 JET_errOutOfMemory 반환할 수 있습니다. 임시 테이블 관리자는 저장된 데이터의 양에 관계없이 만들어진 모든 임시 테이블에 대해 1MB의 주소 공간을 할당합니다.

JET_errInvalidParameter

제공된 매개 변수 중 하나에 예기치 않은 값이 포함되어 있거나 여러 매개 변수 값의 조합으로 인해 예기치 않은 결과가 발생했습니다.

이 오류는 다음 조건에서 JetOpenTemporaryTable 에서 반환됩니다.

  • JET_OPENTEMPORARYTABLE 구조체의 cbStruct 멤버는 해당 버전의 데이터베이스 엔진에서 지원하는 이 구조체의 버전과 일치하지 않습니다.

  • JET_OPENTEMPORARYTABLE 구조체의 cbKeyMost 멤버가 JET_cbKeyMostMin 미만입니다.

  • JET_OPENTEMPORARYTABLE 구조체의 cbKeyMost 멤버는 instance(JET_paramDatabasePageSize)의 데이터베이스 페이지 크기에 대해 지원되는 가장 큰 값보다 큽니다. 자세한 내용은 정보 매개 변수 목록에서 JET_paramKeyMost 매개 변수 를 참조하세요.

  • JET_OPENTEMPORARYTABLE 구조체의 cbVarSegMac 멤버가 cbKeyMost 멤버보다 큽니다.

JET_errNotInitialized

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

JET_errClientRequestToStopJetService

JetStopService 호출로 인해 세션과 연결된 instance 모든 작업이 중단되었으므로 작업을 완료할 수 없습니다.

JET_errInstanceUnavailable

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

Windows XP: 이 오류는 Windows XP 이상 릴리스에서만 반환됩니다.

JET_errTermInProgress

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

JET_errRestoreInProgress

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

JET_errSessionSharingViolation

두 개 이상의 스레드에 대해 동시에 동일한 세션을 사용할 수 없습니다.

Windows XP: 이 오류는 Windows XP 이상 릴리스에서만 반환됩니다.

JET_errInvalidSesid

세션 핸들이 잘못되었거나 닫힌 세션을 참조합니다.

참고 이 오류는 모든 상황에서 반환되지 않습니다. 핸들은 최상의 노력으로만 유효성을 검사합니다.

JET_errOutOfCursors

엔진에서 새 커서를 여는 데 필요한 리소스를 할당할 수 없으므로 작업이 실패했습니다. 커서 리소스는 JET_paramMaxCursorsJetSetSystemParameter를 사용하여 구성됩니다.

JET_errTooManySorts

엔진이 임시 테이블을 만드는 데 필요한 리소스를 할당할 수 없기 때문에 작업이 실패했습니다. 임시 테이블 리소스는 JET_paramMaxTemporaryTablesJetSetSystemParameter를 사용하여 구성됩니다.

JET_errCannotMaterializeForwardOnlySort

jetOpenTemporaryTable 은 JET_bitTTForwardOnly 지정되었고 정방향 전용 최적화를 사용하여 지정된 임시 테이블을 만들 수 없기 때문에 실패했습니다.

Windows Server 2003: 이 오류는 Windows Server 2003 이상 릴리스에서만 반환됩니다.

JET_errTooManyColumns

테이블에 너무 많은 열을 추가하려고 했습니다. 테이블에는 고정 열이 JET_ccolFixedMost 이상, 가변 길이 열이 JET_ccolVarMost 이상, 태그가 지정된 열이 JET_ccolTaggedMost 수 없습니다.

JET_errTooManyOpenTables

엔진이 테이블의 스키마를 캐시하는 데 필요한 리소스를 할당할 수 없기 때문에 작업이 실패했습니다. 캐시할 수 있는 스키마가 있는 테이블 수를 구성하려면 JET_paramMaxOpenTables JetSetSystemParameter를 사용합니다.

JET_errInvalidCodePage

JET_COLUMNDEF 구조체의 cp 멤버가 유효한 코드 페이지로 설정되지 않았습니다. 텍스트 열에 유효한 값은 영어(1252) 및 유니코드(1200)뿐입니다. 값이 0이면 기본값이 사용됩니다(영어, 1252).

JET_errInvalidColumnType

JET_COLUMNDEFcoltyp 멤버가 유효한 열 형식으로 설정되지 않았습니다.

JET_errInvalidLanguageId

잘못된 로캘 ID를 사용하려고 했기 때문에 인덱을 만들 수 없습니다. 로캘 ID가 완전히 잘못되었거나 연결된 언어 팩이 설치되지 않았을 수 있습니다.

JET_errInvalidLCMapStringFlags

잘못된 정규화 플래그 집합을 사용하려고 했기 때문에 인덱스 를 만들 수 없습니다.

Windows XP: 이 오류는 Windows XP 이상 릴리스에서만 반환됩니다.

Windows 2000: Windows 2000에서 정규화 플래그가 잘못되면 JET_errIndexInvalidDef.

JET_errIndexInvalidDef

잘못된 인덱스 정의가 지정되어 인덱스 를 만들 수 없습니다. JetOpenTemporaryTable 은 다음 조건에서 이 오류를 반환합니다.

  • 언어 중립 로캘이 지정됩니다.

  • 잘못된 정규화 플래그 집합이 지정되었습니다.

Windows 2000: 이 오류는 Windows 2000에서만 반환됩니다.

JET_errTooManyOpenIndexes

엔진이 테이블의 인덱스를 캐시하는 데 필요한 리소스를 할당할 수 없기 때문에 작업이 실패했습니다. 캐시할 수 있는 스키마가 있는 인덱스 수를 구성하려면 JET_paramMaxOpenTables JetSetSystemParameter를 사용합니다.

성공하면 새로 만든 임시 테이블에서 열린 커서가 반환됩니다. 임시 데이터베이스의 상태는 새 임시 테이블을 포함하도록 준비됩니다. 데이터베이스 엔진에서 사용 중인 일반 데이터베이스의 상태는 변경되지 않은 상태로 유지됩니다.

실패 시 임시 테이블이 만들어지지 않고 커서가 반환되지 않습니다. 임시 데이터베이스의 상태를 변경할 수 있습니다. 데이터베이스 엔진에서 사용 중인 일반 데이터베이스의 상태는 변경되지 않은 상태로 유지됩니다.

설명

임시 테이블은 일반적으로 데이터베이스 엔진에서 지원하는 열 정의 옵션의 전체 보완을 지원하지 않습니다. 실제로 JET_bitColumnFixed 및 JET_bitColumnTagged만 지원됩니다. 즉, 임시 테이블에 자동 증가, 버전 또는 다중값 열을 만들 수 없습니다. 마지막으로 에스크로 업데이트 열은 한 번에 한 세션에서만 사용할 수 있으므로 지원되지 않습니다. 이러한 옵션이 요청되면 무시됩니다.

임시 테이블은 기본값을 지원하지 않습니다. 기본값 사양을 포함하는 열 정의가 제공되면 해당 사양은 무시됩니다.

임시 테이블은 다양한 ESE 함수의 결과로 호출자에게 반환됩니다. 예를 들어 JET_IdxInfo 옵션 집합이 설정된 JetGetIndexInfo 는 지정된 인덱스의 모든 키 열 목록을 포함하는 임시 테이블을 반환합니다. 임시 테이블은 여기에 설명된 대로 일반 임시 테이블과 동일한 수명 주기 규칙을 따릅니다.

임시 테이블은 데이터베이스 엔진에서 많은 작업에 대해 내부적으로도 사용됩니다. 이러한 작업 중 가장 중요한 것은 기존 테이블에 대한 인덱스 생성입니다. 임시 테이블은 해당 인덱스 생성에 사용되는 인덱스 키를 정렬하는 데 사용됩니다.

모든 임시 테이블은 임시 데이터베이스에 저장됩니다. 임시 데이터베이스는 ESE instance 수명 동안 유지 관리되며 해당 instance 종료되거나 다시 시작될 때 삭제되는 특수 데이터베이스 파일입니다. 임시 데이터베이스의 위치는 JET_paramTempPathJetSetSystemParameter를 사용하여 구성할 수 있습니다. 애플리케이션에서 임시 테이블을 많이 사용하거나 인덱스를 자주 만드는 경우 트랜잭션 로그 파일 및 데이터베이스 파일을 기준으로 디스크에 임시 데이터베이스를 배치하는 것이 중요할 수 있습니다.

임시 테이블의 수명 주기는 이를 참조하는 커서에 연결됩니다. 임시 테이블을 참조하는 모든 커서가 암시적 또는 명시적으로 닫히면 임시 테이블이 삭제됩니다. 임시 테이블이 트랜잭션 내부에 만들어지고 해당 트랜잭션이 이후에 롤백되면 이 시점에서 참조한 커서가 암시적으로 닫히기 때문에 임시 테이블이 삭제됩니다. 새 커서는 JetDupCursor를 사용하는 경우에만 임시 테이블을 참조할 수 있습니다. 이 경우 임시 테이블의 첫 번째 인덱스 항목에 새 커서가 배치됩니다. JetDupCursor 는 임시 테이블에 대해 특정 사용 단계에서만 작동합니다. 자세한 내용은 임시 테이블 커서 기능에 대한 설명을 참조하세요. 한 번에 둘 이상의 세션에서 임시 테이블을 참조할 수 없습니다.

주의JetDupCursor 에는 임시 테이블에 영향을 주는 중요한 문제가 있습니다. 전달 전용 모드에 있는 임시 테이블을 복제하려고 하면 결과 커서가 제대로 만들어지지 않고 오작동합니다. 구체화된 임시 테이블에 커서를 복제하는 것은 여전히 안전합니다.

임시 테이블 관리자는 세 가지 방법으로 임시 테이블을 구현할 수 있습니다. 첫 번째 방법은 메모리 내 테이블을 유지하는 것입니다. 이 전략은 가장 빠르지만 작고 간단한 임시 테이블에만 사용할 수 있습니다. 두 번째 방법은 전방 전용 반복기를 사용하여 구동할 수 있는 디스크 기반 정렬을 만드는 것입니다. 이 전략은 특정 상황에서만 사용할 수 있으며 매우 큰 데이터 집합에서 중복 항목을 정렬하고 제거하는 가장 빠른 방법입니다. 세 번째 방법은 임시 데이터베이스에 임시 테이블을 저장할 B+ 트리를 만드는 것입니다. 이 전략은 가장 느리지만 가장 다양하며 구체화된 임시 테이블이라고 합니다. 이러한 전략을 함께 사용하여 궁극적으로 임시 테이블에 요청된 기능을 달성할 수 있습니다.

임시 테이블이 구체화되지 않으면 주로 두 가지 주요 단계에서 사용됩니다. 첫 번째 단계는 테이블이 초기 데이터 집합으로 채워지는 삽입 단계입니다. 이 단계에서는 데이터 삽입만 허용됩니다. 이 단계는 JetMove 또는 JetSeek을 사용하여 커서를 이동하려고 하면 종료됩니다. 두 번째 단계는 데이터 추출 단계입니다. 이 단계에서 임시 테이블을 만들 때 요청된 기능에 따라 임시 테이블에 저장된 데이터를 추출할 수 있습니다.

임시 테이블 커서 기능

임시 테이블이 구체화되면 커서에는 다음과 같은 기능이 있지만 요청된 옵션으로 인해 더 제한될 수 있습니다.

임시 테이블이 구체화되지 않고 삽입 단계에 있는 경우 커서에는 다음과 같은 기능이 있지만 요청된 옵션으로 인해 더 제한될 수 있습니다.

임시 테이블이 구체화되지 않고 추출 단계에 있는 경우 커서에는 다음과 같은 기능이 있지만 요청된 옵션으로 인해 더 제한될 수 있습니다.

요구 사항

요구 사항

클라이언트

Windows Vista가 필요합니다.

서버

Windows Server 2008이 필요합니다.

머리글

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

라이브러리

ESENT.lib를 사용합니다.

DLL

ESENT.dll 필요합니다.

참고 항목

JET_ERR
JET_SESID
JET_OPENTEMPORARYTABLE
JetCloseTable
JetCreateTableColumnIndex
JetDupCursor
JetMove
JetRollback
JetSeek
JetSetSystemParameter
정보 매개 변수
임시 데이터베이스 매개 변수