JetDefragment2 함수JetDefragment2 Function

적용 대상: Windows | Windows ServerApplies to: Windows | Windows Server

JetDefragment2 함수JetDefragment2 Function

JetDefragment2 함수는 데이터베이스 내의 데이터 조직을 개선 하는 데이터베이스 조각 모음 태스크를 시작 하 고 중지 하며,이를 통해 콜백 매개 변수를 사용 하 여 조각 모음 진행 상황을 보고 합니다.The JetDefragment2 function starts and stops database defragmentation tasks which improves data organization within a database, with a callback parameter available to report the progress of the defragmentation. 데이터베이스 내에서 기존 디스크 할당을 보다 효율적으로 사용 하 여 데이터베이스 증가를 제한 하기 위해이 작업을 수행 합니다.This is done to limit database growth by using existing disk allocation more efficiently within the database. 또한 데이터가 더 잘 압축 되도록 하 여 작업 집합을 줄일 수 있습니다.It can also reduce working set by ensuring that data is more closely packed. 마지막으로, 데이터를 보다 효율적으로 구성 하 여 일반적인 작업 속도를 높여 응용 프로그램 성능을 향상 시킬 수 있습니다.Lastly, it can improve application performance by speeding common operations through better data organization.

WINDOWS xp: JETDEFRAGMENT2 는 windows xp에서 도입 되었습니다.Windows XP: JetDefragment2 is introduced in Windows XP.

또한 JetDefragment2 에는 조각 모음 프로세스의 진행 상황을 보고 하는 데 사용 되는 콜백 함수 매개 변수도 포함 되어 있습니다.JetDefragment2 also contains a callback function parameter that is used to report on the progress of the defragmentation process.

데이터베이스 조각 모음은 온라인 작업 이며 쿼리 작업 또는 데이터 업데이트와 같은 일반적인 데이터베이스 작업을 중단 하지 않습니다.Database defragmentation is an online operation and does not interrupt regular database activity such as query operations or data updates. 또한 JetDefragment2 는 모든 기존 데이터의 복사본을 만들지 않습니다.JetDefragment2 also does not make a copy of all existing data. 대신 데이터베이스의 조각 모음을 수행 합니다.Instead, it defragments a database in place. 마지막으로 JetDefragment2 는 다시 사용 하기 위해 내부 데이터베이스 공간을 복구 하지만 운영 체제 파일 시스템에 대 한 과도 한 공간을 해제 하지는 않습니다.Lastly, JetDefragment2 recovers internal database space for re-use but does not release excess space to the operating system file system.

데이터의 결과 형식은 훨씬 더 효율적일 수 있지만 일반적으로는 적합 하지 않습니다.The resulting format of the data can be much more efficient but is not generally optimal. 조각 모음은 이미 논리적으로 삭제 된 데이터를 포함 하는 다시 사용을 위해 데이터베이스 페이지를 해제 하도록 제한 됩니다.Defragmentation is limited to releasing database pages for re-use which contain data that has already been logically deleted. 또한 조각 모음을 사용 하면 한 페이지에 맞출 수 있는 경우 두 페이지의 데이터를 결합 하 여 데이터베이스 페이지를 다시 사용할 수 있습니다.Defragmentation also makes database pages available for re-use in some cases by combining data from two pages when it can fit on a single page.

이 작업은 읽기 전용 데이터베이스의 복사본을 매우 최적의 형식으로 만드는 JetCompact 와 다릅니다.This operation is different from JetCompact which makes a copy of a read-only database into a highly optimal form.

JET_ERR JET_API JetDefragment2(
  __in          JET_SESID sesid,
  __in          JET_DBID dbid,
  __in          JET_PCSTR szTableName,
  __out_opt     unsigned long* pcPasses,
  __out_opt     unsigned long* pcSeconds,
  __in          JET_CALLBACK callback,
  __in          JET_GRBIT grbit
);

매개 변수Parameters

sesidsesid

이 호출에 사용할 세션입니다.The session to use for this call.

dbiddbid

조각 모음 할 데이터베이스입니다.The database to defragment.

szTableNameszTableName

경우에 따라 Sztablename 이 필요 하며 때로는 사용할 수 없는 경우도 있습니다.Sometimes szTableName is required, and sometimes it is forbidden:

grbitgrbit szTableNameszTableName
JET_bitDefragmentBTreeBatch NULL이어야 합니다.Must be NULL.
JET_bitDefragmentBTree 조각 모음 할 테이블/BTree의 이름을 지정 합니다.Specifies the name of the table/BTree to defragment.
다른other NULL이어야 합니다.Must be NULL.

지정 된 데이터베이스 ID에서 설명 하는 전체 데이터베이스에 대해 조각 모음이 수행 됩니다.Defragmentation is performed for the entire database described by the given database ID.

pcPassespcPasses

온라인 조각 모음 태스크를 시작할 때이 선택적 입력 매개 변수는 최대 조각 모음 통과 수를 설정 합니다.When starting an online defragmentation task, this optional input parameter sets the maximum number of defragmentation passes. 온라인 조각 모음 태스크를 중지 하는 경우이 선택적 출력 버퍼는 수행 된 패스 수로 설정 됩니다.When stopping an online defragmentation task, this optional output buffer is set to the number of passes performed.

이 매개 변수를 NULL로 설정 하면 온라인 조각 모음 수에 제한이 없습니다.When this parameter is set to NULL, the number of online defragmentation passes is unlimited.

pcSecondspcSeconds

온라인 조각 모음 태스크를 시작할 때이 선택적 입력 매개 변수는 조각 모음에 대 한 최대 시간을 설정 합니다.When starting an online defragmentation task, this optional input parameter sets the maximum time for defragmentation. 온라인 조각 모음 태스크를 중지 하는 경우이 선택적 출력 버퍼는 조각 모음에 사용 되는 시간으로 설정 됩니다.When stopping an online defragmentation task, this optional output buffer is set to the length of time used for defragmentation.

이 매개 변수를 NULL로 설정 하거나 Pcseconds 음수 값을 가리키는 경우 조각 모음에 대 한 최대 시간은 무제한입니다.When this parameter is set to NULL or if pcSeconds points to a negative value, the maximum time for defragmentation is unlimited.

콜백(callback)callback

조각 모음에서 진행률을 보고 하기 위해 정기적으로 호출 하는 콜백 함수입니다.Callback function that defragmentation calls regularly to report progress.

grbitgrbit szTableNameszTableName
JET_bitDefragmentBTreeBatch NULL이어야 합니다.Must be NULL.
JET_bitDefragmentBTree NULL이어야 합니다.Must be NULL.
다른other 선택 사항입니다.Optional.

grbitgrbit

다음 옵션을 0 개 이상 지정 하는 비트 그룹입니다.A group of bits specifying zero or more of the following options.

Value

의미Meaning

JET_bitDefragmentAvailSpaceTreesOnlyJET_bitDefragmentAvailSpaceTreesOnly

이 옵션은 ESE 데이터베이스 공간 할당의 사용 가능한 공간 부분을 조각 모음 하는 데 사용 됩니다.This option is used to defragment the available space portion of ESE database space allocation. 데이터베이스 공간은 소유 된 공간 및 사용 가능한 공간 이라는 두 가지 유형으로 구분 됩니다.Database space is divided into two types, owned space and available space. 소유 된 공간은 테이블이 나 인덱스에 할당 되지만 사용 가능한 공간은 테이블이 나 인덱스에서 각각 사용할 준비가 됩니다.Owned space is allocated to a table or index while available space is ready for use within the table or index, respectively. 사용 가능한 공간은 동작에서 훨씬 더 동적 이며, 소유 된 공간 또는 테이블 또는 인덱스 데이터 보다 더 많은 온라인 조각 모음이 필요 합니다.Available space is much more dynamic in behavior and requires online defragmentation more so than owned space or table or index data.

JET_bitDefragmentBatchStartJET_bitDefragmentBatchStart

이 옵션은 새 조각 모음 태스크를 시작 하는 데 사용 됩니다.This option is used to start a new defragmentation task.

JET_bitDefragmentBatchStopJET_bitDefragmentBatchStop

이 옵션은 기존에 시작 된 조각 모음 작업을 중지 하는 데 사용 됩니다.This option is used to stop an existing started defragmentation task.

JET_bitDefragmentBTreeJET_bitDefragmentBTree

이 옵션은 szTableName으로 지정 된 B-트리를 조각 모음 하는 데 사용 됩니다.This option is used to defrag a B-Tree, specified by szTableName.

JET_bitDefragmentBTreeBatchJET_bitDefragmentBTreeBatch

이 옵션은 전체 데이터베이스에서 OLD2을 호출 하는 데 사용 됩니다.This option is used to call OLD2 on the entire database.

반환 값Return Value

이 함수는 다음 반환 코드 중 하나를 사용 하 여 JET_ERR 데이터 형식을 반환 합니다.This function returns the JET_ERR datatype with one of the following return codes. 가능한 ESE 오류에 대 한 자세한 내용은 확장 가능한 저장소 엔진 오류오류 처리 매개 변수를 참조 하세요.For more information about the possible ESE errors, see Extensible Storage Engine Errors and Error Handling Parameters.

반환 코드Return code

설명Description

JET_errSuccessJET_errSuccess

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

JET_errClientRequestToStopJetServiceJET_errClientRequestToStopJetService

JetStopService에 대 한 호출로 인해 세션과 연결 된 인스턴스의 모든 활동이 더 이상 사용 되지 않기 때문에 작업을 완료할 수 없습니다.It is not possible to complete the operation because all activity on the instance associated with the session has ceased as a result of a call to JetStopService.

JET_errDatabaseFileReadOnlyJET_errDatabaseFileReadOnly

조각 모음에 대해 선택한 데이터베이스는 읽기 전용 이며 조각 모음을 포함 하 여 어떤 방식으로든 업데이트할 수 없습니다.The database chosen for defragmentation is read only and cannot be updated in any way, including defragmentation.

JET_errDistributedTransactionAlreadyPreparedToCommitJET_errDistributedTransactionAlreadyPreparedToCommit

지정 된 세션은 커밋 준비 상태 이며 현재 트랜잭션이 커밋되거나 롤백될 때까지 새 업데이트를 시작할 수 없습니다.The given session is in the prepared to commit state, and cannot begin new updates until the current transaction is committed or rolled back.

JET_errInstanceUnavailableJET_errInstanceUnavailable

세션과 연결 된 인스턴스에 모든 데이터에 대 한 액세스를 취소 하 여 해당 데이터의 무결성을 보호 해야 하는 치명적인 오류가 발생 했기 때문에 작업을 완료할 수 없습니다.It is not possible to complete the operation because the instance associated with the session has encountered a fatal error that requires that access to all data be revoked to protect the integrity of that data. 이 오류는 Windows XP 이상 버전 에서만 반환 됩니다.This error will only be returned by Windows XP and later releases.

JET_errInvalidDatabaseIdJET_errInvalidDatabaseId

지정 된 데이터베이스 ID가 인스턴스의 알려진 데이터베이스와 일치 하지 않습니다.The given database ID does not match a known database in the instance.

JET_errNotInitializedJET_errNotInitialized

세션과 연결 된 인스턴스가 아직 초기화 되지 않았기 때문에 작업을 완료할 수 없습니다.It is not possible to complete the operation because the instance associated with the session has not been initialized yet.

JET_errRestoreInProgressJET_errRestoreInProgress

세션과 연결 된 인스턴스에서 복원 작업이 진행 중 이므로 작업을 완료할 수 없습니다.It is not possible to complete the operation because a restore operation is in progress on the instance associated with the session.

JET_errSessionSharingViolationJET_errSessionSharingViolation

동시에 둘 이상의 스레드에 동일한 세션을 사용할 수 없습니다.The same session cannot be used for more than one thread at the same time. 이 오류는 Windows XP 이상 버전 에서만 반환 됩니다.This error will only be returned by Windows XP and later releases.

JET_errTermInProgressJET_errTermInProgress

세션과 연결 된 인스턴스가 종료 되 고 있으므로 작업을 완료할 수 없습니다.It is not possible to complete the operation because the instance associated with the session is being shut down.

JET_errTransReadOnlyJET_errTransReadOnly

지정 된 세션에는 읽기 전용 권한만 있으며, 조각 모음을 포함 하 여 업데이트를 수행할 수 있는 작업을 시작할 수 없습니다.The given session has read-only privileges only and cannot start a task that may perform an update, including defragmentation.

JET_errVersionStoreOutOfMemoryJET_errVersionStoreOutOfMemory

이 오류는 구성 된 버전 저장소 크기에서 처리 중인 모든 업데이트를 보관할 수 없을 때 발생 합니다.This error will occur when the configured size of the version store is insufficient to hold all outstanding updates.

JET_wrnDefragAlreadyRunningJET_wrnDefragAlreadyRunning

JET_bitDefragmentBatchStart 옵션이 전달 되었지만 조각 모음 태스크에서 지정 된 데이터베이스에 대 한 조각 모음을 이미 실행 하 고 있습니다.The JET_bitDefragmentBatchStart option has been passed but a defragmentation task is already running defragmentation on the given database.

JET_wrnDefragNotRunningJET_wrnDefragNotRunning

JET_bitDefragmentBatchStop 옵션이 전달 되었지만 현재 실행 중인 조각 모음이 없습니다.The JET_bitDefragmentBatchStop option has been passed, but no defragmentation task is currently running.

성공 하면 지정 된 옵션을 사용 하 여 지정 된 데이터에 대해 조각 모음 태스크를 시작 하는 요청 된 작업이 수행 되거나 기존 조각 모음 태스크를 중지 하는 작업이 수행 됩니다.On success, the requested action of either starting a defragmentation task for a given data with given options is performed, or the action of stopping an existing defragmentation task is performed.

오류가 발생 하면 온라인 조각 모음 작업을 시작 하거나 중지 하는 요청 된 작업이 수행 되지 않습니다.On failure, the requested action of either starting or stopping an online defragmentation job is not done. 다른 부작용은 발생 하지 않습니다.No other side effects occur.

설명Remarks

온라인 조각 모음은이 API 뿐만 아니라 매개 변수 설정에 의해 제어 됩니다.Online defragmentation is controlled both by a parameter setting, as well as by this API. 기본 시스템 매개 변수 값은 JET_OnlineDefragAll입니다. 즉, 지원 되는 모든 데이터 구조에 대해 조각 모음을 사용할 수 있습니다.The default system parameter value is JET_OnlineDefragAll, which means defragmentation is enabled for all supported data structures. 그러나 JetSetSystemParameter을 사용 하면 온라인 조각 모음을 사용 하지 않도록 설정 하거나 데이터베이스 공간 트리와 데이터베이스 전용, 스트리밍 파일만 또는 이러한 옵션의 조합에 대해 선택적으로 사용 하도록 설정할 수 있습니다.However, using JetSetSystemParameter, it is possible to disable online defragmentation, or to selectively enable it for database space trees only, databases only, streaming files only or any combination of these options. 온라인 조각 모음에 대 한 시스템 설정이 사용 되지 않는 설정에 해당 하는 경우 JetDefragment2 는 설정을 JET_OnlineDefragAll로 처리 합니다.If the system setting for on-line defragmentation is to an obsolete setting, JetDefragment2 will treat the setting as JET_OnlineDefragAll.

각 데이터베이스에 대해 하나의 작업을 실행할 수 있습니다.There can at most be one task running for each database. 작업은 ESE를 호스트 하는 프로세스에서 스레드로 실행 됩니다.The task runs as a thread in the process hosting ESE.

조각 모음 태스크는 자체 세션을 할당 하기 때문에 온라인 조각 모음 태스크를 시작 하는 데 사용 되는 세션은 나중에 데이터베이스 작업에 사용할 수 있습니다.The session used to start the online defragmentation task can be subsequently used for database operations while the defragmentation task continues, because the defragmentation task allocates its own session. 지정 된 세션은 태스크 시작 세션과 연결 된 사용 권한을 확인 하는 데만 사용 되며 실제로 조각 모음 작업에는 사용 되지 않습니다.The given session is only used to check the permissions associated with the task starting session and is not actually used for the defragmentation operations themselves.

요구 사항Requirements

클라이언트Client

Windows Vista 또는 Windows XP가 필요 합니다.Requires Windows Vista or Windows XP.

서버Server

Windows Server 2008 또는 Windows Server 2003이 필요 합니다.Requires Windows Server 2008 or Windows Server 2003.

HeaderHeader

Esent에 선언 됩니다.Declared in Esent.h.

라이브러리Library

ESENT를 사용 합니다.Use ESENT.lib.

GDIPLUS.DLLDLL

ESENT.dll 필요 합니다.Requires ESENT.dll.

유니코드Unicode

JetDefragment2W (유니코드) 및 JetDefragment2A (ANSI)로 구현 됩니다.Implemented as JetDefragment2W (Unicode) and JetDefragment2A (ANSI).

참고 항목See Also

JET_ERRJET_ERR
JET_SESIDJET_SESID
JetCompactJetCompact
JetDefragmentJetDefragment
JetSetSystemParameterJetSetSystemParameter
JetStopServiceJetStopService