JetDefragment2 函式

適用于:Windows |Windows伺服器

JetDefragment2 函式

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

Windows XP:JetDefragment2是在 Windows XP 中引進。

JetDefragment2 也包含回呼函式參數,用來報告重組程式的進度。

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

產生的資料格式可能更有效率,但通常不是最佳格式。 重組僅限於釋放資料庫頁面以供重複使用,其中包含已以邏輯方式刪除的資料。 重組也可讓資料庫頁面在單一頁面上配合時,結合來自兩個頁面的資料,讓資料庫頁面可供重複使用。

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

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
);

參數

sesid

要用於這個呼叫的會話。

dbid

要重組的資料庫。

szTableName

有時需要 szTableName ,有時禁止:

grbit szTableName
JET_bitDefragmentBTreeBatch 必須是 NULL
JET_bitDefragmentBTree 指定要重組的資料表/BTree 名稱。
其他 必須是 NULL

重組會針對指定資料庫識別碼所描述的整個資料庫執行重組。

pcPasses

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

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

pcSeconds

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

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

回檔

重組呼叫的回呼函式會定期呼叫 以報告進度。

grbit szTableName
JET_bitDefragmentBTreeBatch 必須是 NULL
JET_bitDefragmentBTree 必須是 NULL
其他 選擇性。

grbit

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

意義

JET_bitDefragmentAvailSpaceTreesOnly

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

JET_bitDefragmentBatchStart

此選項可用來啟動新的重組工作。

JET_bitDefragmentBatchStop

此選項可用來停止現有的已啟動重組工作。

JET_bitDefragmentBTree

此選項可用來重組 szTableName 所指定的 B 型樹狀結構。

JET_bitDefragmentBTreeBatch

此選項可用來呼叫整個資料庫的 OLD2。

傳回值

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

傳回碼

Description

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可以停用線上重組,或選擇性地針對資料庫空間樹狀結構、僅限資料庫、僅串流檔案或這些選項的任何組合加以啟用。 如果線上重組的系統設定是過時的設定, JetDefragment2 會將設定視為JET_OnlineDefragAll。

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

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

規格需求

需求

用戶端

需要Windows Vista 或 Windows XP。

Server

需要 Windows Server 2008 或 Windows Server 2003。

標頭

在 Esent.h 中宣告。

程式庫

使用 ESENT.lib。

DLL

需要ESENT.dll。

Unicode

實作為 JetDefragment2W (Unicode) 和 JetDefragment2A (ANSI) 。

另請參閱

JET_ERR
JET_SESID
JetCompact
JetDefragment
JetSetSystemParameter
JetStopService