2011-02-17 58 views
1

由於頁面大小存在問題,我在打開esent數據庫(Windows.edb)時遇到了問題。我的系統上的Windows.edb的頁面大小是32K。當我通過JET_paramDatabasePageSize設置它時,JetInit將返回錯誤-1213(數據庫頁面大小與引擎不匹配)。一旦我只需要ReadOnly訪問數據庫,Laurion Burchall建議關閉JET_paramRecovery。這解決了我的問題。當前數據庫引擎僅限於特定的頁面大小?

直到現在。我有一個不完美的關機數據庫。我假設,使用JET_paramRecovery = On時,JetInit將自動執行恢復並讓我讀取數據庫。但是,如果我嘗試得到舊的-1213錯誤。

現在我可以用ESENTUTL修復我的文件,但我的應用程序的虛擬用戶將無法修復。有沒有辦法恢復,仍然可以定義ANY DatabasePageSize?在數據庫的位置沒有任何日誌文件(並且我將Logpath設置爲相同的目錄以確保它們不會寫入其他任何地方)。

這是否意味着我的機器上的引擎不支持頁面大小或數據庫?或者我可以通過設置另一個魔術開關來解決問題嗎?

回答

1

在另一個應用程序的數據庫上運行恢復比較棘手。 ESENT是一個嵌入式引擎,每個應用程序都可以有自己的設置。在運行恢復,你需要知道:

  1. 當日志文件的位置(JET_paramLogFilePath)
  2. 日誌文件大小(JET_paramLogFileSize)
  3. 數據庫頁面大小(JET_paramDatabasePageSize)
  4. 日誌文件基名(JET_paramBaseName )

如果您正確設置所有這些參數,則恢復將正常工作。如果你不這樣做,那麼其他應用程序可能會在恢復數據庫時遇到問題!

0

有一個簡單(但棘手)的方法來「修復」一個沒有正常關閉的EDB數據庫。在偏移量爲52的頭部有一個狀態標誌。它是一個4Byte整數,應該設置爲3(如果沒有正常關閉,你會發現它的值可能是2)。

您可能需要在包含數據庫標題副本的第2個數據庫頁面重複此條目。你可以發現該頁面只是數據庫的頁面大小(通常是4096,8192等)。

由於這實在是一個黑客,你應該使用它在你自己的風險!