JetInit 函式

適用于: Windows |Windows Server

JetInit 函式

JetInit函式會將資料庫引擎置於可支援應用程式使用資料庫檔案的狀態。 引擎必須已經正確設定,才能使用 JetSetSystemParameter進行初始化。 資料庫當機復原會在初始化過程中自動執行。

JET_ERR JET_API JetInit(
  __in_out_opt  JET_INSTANCE* pinstance
);

參數

pinstance

要用於這個呼叫的 實例。

若為 Windows 2000,則會忽略此參數,且一律為 Null。

針對 Windows XP 和更新版本,此參數的使用取決於引擎的作業模式。 如果引擎在舊版模式中運作 (Windows 2000 相容性模式) 其中只支援一個實例,則此參數可能是 Null,或者它可能會設定為有效的輸出緩衝區,以傳回建立為初始化副作用的全域實例控制碼。 此輸出緩衝區必須設定為 Null 或JET_instanceNil。 然後,這個實例控制碼可以傳遞至任何其他使用 實例的函式。 如果引擎是以多重實例模式運作,則必須將此參數設定為有效的輸入緩衝區,其中包含正在初始化之 JetCreateInstance 函式實例所傳回的實例控制碼。

備註

實例必須透過對 JetInit 的呼叫進行初始化,才能供 JetSetSystemParameter以外的任何專案使用。

即使從未使用JetInit初始化該實例,仍會透過JetTerm函式的呼叫來終結實例。 實例是資料庫引擎的復原能力單位。 它會控制用來保護一組資料庫檔案中資料完整性的所有檔案生命週期。 這些檔案包括檢查點檔案和交易記錄檔。

任何一次可建立的實例數目上限是由 JET_paramMaxInstances所控制,可由 JetSetSystemParameter呼叫來設定。 第一次初始化資料庫引擎時, JetInit 會建立一組初始檔案來支援該實例。 這些檔案包含名為 < JET_paramBaseName 的檢查點檔案 (> 。CHK) ,一組保留的交易記錄檔 (名為 RES1。LOG 和 RES2。LOG) ,這是名為 < JET_paramBaseName 的初始交易記錄檔 (> 。LOG) ,以及根據JET_paramTempPath) 命名的暫存資料庫 (檔案。 如果 JET_paramRecovery 設定為 「Off」,將不會建立檢查點檔案和記錄檔。 如果 JET_paramMaxTemporaryTables 設定為零,則不會建立暫存資料庫檔案。 這些檔案代表實例的磁片使用量,而且必須小心管理。 如果個別或彼此損毀這些檔案,則與實例相關聯的資料庫中儲存的資料可能會遺失。

當資料庫引擎以現有的交易記錄檔集初始化時,將會檢查這些檔案,以查看實例先前的插入是否發生當機。 如果偵測到當機,系統會自動執行損毀復原。 此程式會在引擎的上一個引擎內建期間重新建構附加至 實例的資料庫,並將變更儲存回資料庫檔案。 結果將會是交易一致的資料庫。 如果要針對資料庫重新執行交易記錄檔的數目很大,此程式可能需要很長的時間。

由於 JetInit 執行損毀復原,因此在發生失敗時,幾乎可能會傳回任何資料庫引擎錯誤。 在實務上,部署中看到的大部分錯誤分為兩種類別:資料損毀和檔案管理錯誤。 資料損毀通常會在下列或類似的錯誤中自行顯示:

  • JET_errReadVerifyFailure

  • JET_errLogFileCorrupt

  • JET_errCheckpointCorrupt

這些錯誤幾乎一律是由硬體問題所造成,因此無法避免。 檔案錯誤通常會在下列或類似的錯誤中自行顯示:

  • JET_errMissingLogFile

  • JET_errAttachedDatabaseMismatch

  • JET_errDatabaseSharingViolation

  • JET_errInvalidLogSequence

如果復原是在一組記錄上執行,但並非所有資料庫都存在 (,這會在正常情況下傳回錯誤JET_errAttachedDatabaseMismatch) ,而且用戶端希望即使遺失資料庫仍繼續復原,JET_ bitReplayIgnoreMissingDB 可用來繼續復原可用的資料庫。 應用程式可避免這些錯誤。 應用程式必須小心保護這些檔案的存放庫,以防止外部強制操作,例如使用者或其他應用程式。 如果應用程式想要完全終結實例,則必須刪除與實例相關聯的所有檔案。 其中包括檢查點檔案、交易記錄檔,以及附加至 實例的任何資料庫檔案。

JetInit函式在 Windows 2000 與更新版本之間,與附加至 實例的資料庫檔案不同。

Windows 2000: 在 Windows 2000 中,在舊版實例中附加至實例的任何資料庫,在 JetInit 成功完成之後,仍會附加至實例。 JetInit之後不需要呼叫JetAttachDatabase,以確保稍後的資料庫存取。 如果在JetInit函式之後呼叫JetAttachDatabase函式,則會傳回JET_wrnDatabaseAttached警告。 這個警告表示資料庫附件已保留,而且可以忽略。

Windowsxp: 在 Windows XP 和更新版本中,所有資料庫都會由 JetInit自動從實例中斷連結。 這表示 JetAttachDatabase 在此案例中必須一律在 JetInit 之後呼叫。

任何寫入以在 Windows 2000 和更新版本上執行的應用程式,都必須在JetInit之後呼叫JetAttachDatabase。 如果應用程式在 Windows 2000 上執行,則在某些情況下必須看到JET_wrnDatabaseAttached。 如需詳細資訊,請參閱 JetAttachDatabase

規格需求

需求

用戶端

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

Server

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

標頭

在 Esent.h 中宣告。

程式庫

使用 ESENT.lib。

Dll

需要ESENT.dll。

另請參閱

可延伸儲存引擎檔案
JET_ERR
JET_GRBIT
JET_INSTANCE
JET_paramMaxTemporaryTables
JET_paramRecovery
JetAttachDatabase
JetCreateInstance
JetInit3
JetSetSystemParameter