다음을 통해 공유


JetAttachDatabase 함수

적용 대상: Windows | Windows Server

JetAttachDatabase 함수

JetAttachDatabase 함수는 데이터베이스 instance 사용할 데이터베이스 파일을 연결합니다. 데이터베이스를 사용하려면 나중에 JetOpenDatabase를 사용하여 열어야 합니다.

    JET_ERR JET_API JetAttachDatabase(
      __in          JET_SESID sesid,
      __in          const tchar* szFilename,
      __in          JET_GRBIT grbit
    );

매개 변수

sesid

API 호출에 사용할 데이터베이스 세션 컨텍스트입니다.

szFilename

연결할 데이터베이스의 이름입니다.

grbit

다음 옵션 중 0개 이상을 지정하는 비트 그룹입니다.

의미

JET_bitDbDeleteCorruptIndexes

JET_paramEnableIndexChecking 설정된 경우 유니코드 데이터에 대한 모든 인덱스가 삭제됩니다. 자세한 내용은 설명 섹션을 참조하세요.

JET_bitDbDeleteUnicodeIndexes

유니코드 데이터에 대한 모든 인덱스는 JET_paramEnableIndexChecking 설정에 관계없이 삭제됩니다. 자세한 내용은 설명 섹션을 참조하세요.

JET_bitDbUpgrade

사용되지 않습니다. 사용하지 마십시오.

JET_bitDbReadOnly

데이터베이스 수정을 방지합니다.

반환 값

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

반환 코드

설명

JET_errSuccess

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

JET_errBackupInProgress

백업 중에는 데이터베이스를 연결할 수 없습니다.

JET_errDatabaseFileReadOnly

szFilename으로 지정된 데이터베이스 파일을 쓸 수 있어야 합니다. Read-Only 특성을 설정해서는 안 되며 실행 중인 프로세스에는 파일에 쓸 수 있는 충분한 권한이 있어야 합니다.

JET_errDatabaseInUse

데이터베이스 파일이 이미 다른 프로세스에 의해 열려 있습니다.

JET_errDatabaseInvalidPath

szFilename에 잘못된 경로가 지정되었습니다. szFilename 은 NULL이 아니어야 하며 유효한 경로를 참조해야 합니다.

JET_errDatabaseSharingViolation

데이터베이스 파일이 이미 다른 세션에 의해 연결되었습니다.

JET_errFileAccessDenied

데이터베이스 엔진에서 데이터베이스 파일을 열 수 없습니다. 파일이 다른 프로세스에서 사용 중이거나 호출자에게 파일을 열 수 있는 충분한 권한이 없을 수 있습니다.

JET_errFileNotFound

szFilename에 지정된 파일이 없습니다.

JET_errPrimaryIndexCorrupted

기본 인덱스 오류가 있습니다. 이는 물리적 손상(예: 디스크 또는 메모리 손상)에서 발생할 수 있습니다. 또한 이전 운영 체제에서 마지막으로 수정된 데이터베이스를 연결할 때 반환될 수 있으며 기본 인덱스는 유니코드 데이터가 있는 열 위에 있습니다. 유니코드 데이터에 대한 인덱스에 대한 자세한 내용은 설명을 참조하세요.

JET_errSecondaryIndexCorrupted

보조 인덱스가 있는 오류가 있습니다. 이는 물리적 손상(예: 디스크 또는 메모리 손상)에서 발생할 수 있습니다. 이전 운영 체제에서 마지막으로 수정된 데이터베이스를 연결하고 보조 인덱스가 유니코드 데이터가 있는 열 위에 있는 경우에도 반환될 수 있습니다. 유니코드 데이터에 대한 인덱스에 대한 자세한 내용은 설명을 참조하세요. 보조 인덱스는 다음 명령을 사용하여 오프라인 유틸리티로 데이터베이스를 조각 모음할 때 완전히 다시 작성됩니다. esentutl -d.

JET_errTooManyAttachedDatabases

instance당 한정된 수의 데이터베이스만 연결할 수 있습니다. 이 제한은 현재 instance당 7개의 데이터베이스입니다.

JET_wrnDatabaseAttached

데이터베이스 파일이 이 세션에서 이미 연결되어 있음을 나타내는 심각하지 않은 경고입니다.

설명

JetAttachDatabase를 호출하는 것은 JetAttachDatabase2를 호출하고 값을 0으로 전달하는 것과 같습니다. 즉, cpgDatabaseSizeMax 매개 변수에 대한 제한이 없습니다.

쓰기 가능한 데이터베이스(즉, grbit 매개 변수에 JET_bitDbReadOnly 지정되지 않은 경우)를 연결하면 운영 체제 수준에서만 파일이 열립니다. 다른 프로세스에서 파일을 열 수 없습니다. 여러 프로세스가 단일 데이터베이스를 읽기 전용 모드로 열어 연결할 수 있습니다.

데이터베이스 파일은 JetDetachDatabase 또는 JetDetachDatabase2를 사용하여 분리됩니다.

인덱스 검사 매개 변수

다양한 버전의 Windows는 다른 방식으로 유니코드 텍스트를 정규화합니다. 즉, 한 버전의 Windows에서 빌드된 인덱스는 다른 버전에서 작동하지 않을 수 있습니다.

Windows Server 2003 이전에는 운영 체제 버전이 변경되었을 때(서비스 팩 설치 포함) 유니코드 데이터에 대한 모든 인덱스가 잠재적으로 손상되었을 수 있습니다.

Windows Server 2003 이상에서 만든 인덱스는 빌드된 유니코드 정규화 버전으로 플래그가 지정됩니다. 이전 인덱스에는 버전 정보가 없습니다. 대부분의 유니코드 정규화 변경 내용은 새 문자를 추가하는 것으로 구성되며, 이전에 정의되지 않은 코드 포인트는 이제 정의되고 다르게 정규화됩니다. 따라서 이진 데이터가 유니코드 열에 저장되면 새 코드 포인트가 정의될 때 다르게 정규화됩니다.

Windows Server 2003을 기준으로 ESE 데이터베이스 엔진은 정의되지 않은 코드 포인트가 포함된 유니코드 인덱스 항목을 추적합니다. 정의된 유니코드 문자 집합이 변경될 때 인덱스 수정에 사용할 수 있습니다.

이러한 매개 변수는 ESE 데이터베이스 엔진이 운영 체제의 다른 빌드에서 마지막으로 사용된 데이터베이스에 연결할 때 발생하는 작업을 제어합니다. 운영 체제 버전은 데이터베이스 헤더에 스탬프됩니다.

JET_paramEnableIndexCheckingTRUE로 설정되고 데이터베이스에 잠재적으로 손상된 인덱스가 포함된 경우:

  • grbit에 JET_bitDbDeleteCorruptIndexes 포함된 경우 JetAttachDatabase는 잠재적으로 손상된 인덱스를 삭제합니다.

  • grbit에 JET_bitDbDeleteCorruptIndexes 포함되어 있지 않고 삭제가 필요한 인덱스가 있는 경우 JetAttachDatabase에서 오류를 반환합니다.

JET_paramEnableIndexCheckingFALSE로 설정된 경우:

  • JetAttachDatabase 는 잠재적으로 손상된 인덱스를 무시하고 JET_errSuccess 반환합니다(다른 오류가 없다고 가정).

Windows Server 2003 이상: JET_paramEnableIndexChecking 다시 설정되지 않은 경우 내부 픽스업 테이블을 사용하여 인덱스 항목을 수정합니다. 이렇게 하면 모든 인덱스 손상이 해결되지는 않지만 애플리케이션에 투명하게 적용됩니다.

데이터베이스가 읽기 전용으로 연결된 경우 인덱스가 수정되거나 삭제될 수 없습니다. 이 경우 API는 대신 JET_errSecondaryIndexCorrupted 또는 JET_errPrimaryIndexCorrupted 같은 오류를 반환합니다.

요구 사항

요구 사항

클라이언트

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

서버

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

머리글

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

라이브러리

ESENT.lib를 사용합니다.

DLL

ESENT.dll 필요합니다.

유니코드

JetAddColumnW(유니코드) 및 JetAddColumnA(ANSI)로 구현됩니다.

참고 항목

확장 가능한 스토리지 엔진 파일
JET_ERR
JET_GRBIT
JET_SESID
JET_TABLEID
JetAttachDatabase2
JetCreateDatabase
JetDetachDatabase
JetDetachDatabase2
JetOpenDatabase
JetSetSystemParameter