JetDefragment 函式

適用于:Windows |Windows伺服器

JetDefragment 函式

JetDefragment函式會啟動和停止資料庫重組工作,以改善資料庫中的資料組織。 這可藉由在資料庫內更有效率地使用現有的磁片配置來限制資料庫成長。 它也可以藉由確保資料更緊密地封裝來減少工作集。 最後,它可藉由透過更好的資料組織加速常見作業,以改善應用程式效能。

資料庫重組是線上作業,不會中斷一般資料庫活動,例如查詢作業或資料更新。 JetDefragment 也不會複製所有現有的資料。 相反地,它會就地重組資料庫。 最後, JetDefragment 會復原內部資料庫空間以供重複使用,但不會釋出過多空間給作業系統檔案系統。

產生的資料格式可能會更有效率,但通常不是最佳格式。 重組僅限於釋放資料庫頁面以供重複使用,其中包含已以邏輯方式刪除的資料。 重組也可讓資料庫頁面在某些情況下重複使用,方法是合併兩個頁面的資料,使其可以容納在單一頁面上。

這項作業與 JetCompact 不同,它會將唯讀資料庫的複本變成高度最佳形式。

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

參數

sesid

要用於這個呼叫的會話。

dbid

要重組的資料庫。

szTableName

未使用的參數。 系統會針對指定資料庫識別碼所描述的整個資料庫執行重組。

pcPasses

啟動線上重組工作時,此輸入參數會設定重組傳遞的最大數目。 停止線上重組工作時,此輸出緩衝區會設定為執行的傳遞數目。

當此參數設定為 Null 時,線上重組傳遞的數目不受限制。

pcSeconds

啟動線上重組工作時,此輸入參數會設定重組的最大時間。 停止線上重組工作時,此輸出緩衝區會設定為用於重組的時間長度。

當此參數設定為 Null 或 pcSeconds 指向負值時,重組的時間上限為無限制。

grbit

指定下列零個或多個選項的位群組。

意義

JET_bitDefragmentAvailSpaceTreesOnly

重組 ESE 資料庫空間配置的可用空間部分。 資料庫空間分成兩種類型:擁有的空間和可用空間。 擁有的空間會分別配置給資料表或索引,而可用空間已準備好用於資料表或索引。 可用空間在行為上更具動態性,而且需要比擁有的空間或資料表或索引資料更多的線上重組。

JET_bitDefragmentBatchStart

啟動新的重組工作。

JET_bitDefragmentBatchStop

停止重組工作。

傳回值

此函式會傳回具有下列其中一個傳回碼 的JET_ERR 資料類型。 如需可能 ESE 錯誤的詳細資訊,請參閱可延伸儲存體引擎錯誤錯誤處理參數

傳回碼

描述

JET_errSuccess

作業已成功完成。

JET_errClientRequestToStopJetService

因為與會話相關聯的實例上的所有活動因為對 JetStopService的呼叫而停止,所以無法完成作業。

JET_errDatabaseFileReadOnly

選擇進行重組的資料庫是唯讀的,而且無法以任何方式更新,包括重組。

JET_errDistributedTransactionAlreadyPreparedToCommit

指定的會話處於準備好認可狀態,而且在認可或回復目前交易之前,無法開始新的更新。

JET_errInstanceUnavailable

無法完成作業,因為與會話相關聯的實例發生嚴重錯誤,要求撤銷所有資料的存取權以保護該資料的完整性。 此錯誤只會由Windows XP 和更新版本傳回。

JET_errInvalidDatabaseId

指定的資料庫識別碼與 實例中的已知資料庫不符。

JET_errNotInitialized

無法完成作業,因為與會話相關聯的實例尚未初始化。

JET_errRestoreInProgress

因為與會話相關聯的實例上正在進行還原作業,所以無法完成作業。

JET_errSessionSharingViolation

同一個會話不能同時用於多個執行緒。 此錯誤只會由Windows XP 和更新版本傳回。

JET_errTermInProgress

因為與會話相關聯的實例正在關閉,所以無法完成作業。

JET_errTransReadOnly

指定的會話只有唯讀許可權,而且無法啟動可執行更新的工作,包括重組。

JET_errVersionStoreOutOfMemory

當版本存放區設定的大小不足,無法保存所有未完成的更新時,就會發生此錯誤。

JET_wrnDefragAlreadyRunning

已傳遞JET_bitDefragmentBatchStart選項,但重組工作已在指定資料庫上執行重組。

JET_wrnDefragNotRunning

已傳遞JET_bitDefragmentBatchStop選項,但目前未執行重組工作。

成功時,會針對具有指定選項的指定資料啟動重組工作的要求動作,或執行停止現有重組工作的動作。

失敗時,不會完成啟動或停止線上重組作業的要求動作。 不會發生其他副作用。

備註

線上重組是由參數設定以及此 API 來控制。 預設系統參數值是JET_OnlineDefragAll,這表示已針對所有支援的資料結構啟用重組。 不過,使用 JetSetSystemParameter可以停用線上重組,或選擇性地針對資料庫空間樹狀結構、僅限資料庫、僅串流檔案或這些選項的任何組合加以啟用。 如果線上重組的系統設定設為過時的設定, JetDefragment 會將設定視為JET_OnlineDefragAll。

每個資料庫最多隻能執行一項工作。 工作會在裝載 ESE 的進程中以執行緒的形式執行。

用來啟動線上重組工作的會話可以後續用於資料庫作業,而重組工作會繼續執行,因為重組工作會配置自己的會話。 指定的會話僅用於檢查與工作啟動會話相關聯的許可權,而且實際上不會用於重組作業本身。

規格需求

需求

用戶端

需要Windows Vista、Windows XP 或 Windows 2000 Professional。

Server

需要 Windows Server 2008、Windows Server 2003 或 Windows 2000 Server。

標頭

在 Esent.h 中宣告。

程式庫

使用 ESENT.lib。

DLL

需要ESENT.dll。

Unicode

實作為 JetDefragmentW (Unicode) 和 JetDefragmentA (ANSI) 。

另請參閱

JET_ERR
JET_SESID
JetCompact
JetDefragment2
JetSetSystemParameter
JetStopService