如果有未提交的交易,那麼數據庫將被標記爲「不一致」。您可以使用ESENTUTL/MH對數據庫進行檢查。針對不一致的數據庫調用JetAttachDatabase將始終失敗。
因此,如果您的程序能夠附加並打開數據庫,那麼它是一致的。有兩種方法可以使數據庫保持一致:
- 清除關閉ESENT。
- 在JetInit時間使用日誌文件運行恢復。
JetInit做的第一件事就是查找由JET_paramLogFilePath和JET_paramBaseName指定的日誌文件。日誌文件包含它們引用的數據庫的完整路徑,然後將日誌文件中的事務提交到數據庫。因此,如果您正確設置系統參數,則ESENT將在連接數據庫時加載日誌。另一方面,如果您沒有正確設置參數,那麼您的程序實際上可以在不需要恢復的數據庫上工作。 JetInit不會找到任何日誌文件,所以它不會執行任何操作,因爲數據庫是一致的,所以連接會成功。
另一個難點是日誌文件包含數據庫的完整路徑。這意味着如果您已複製/移動數據庫,則恢復將不起作用。從Windows Server 2003開始,您可以通過將JET_paramAlternateDatabaseRecoveryPath設置爲包含數據庫的目錄來處理此問題。
重要提示:爲了安全起見,您應該始終使用只讀標誌附加並打開數據庫。這將避免由於日誌文件設置錯誤而導致的任何問題。一個常見的問題是,只讀應用程序最終會在不同的目錄中創建一組日誌文件,以防止數據庫被正確恢復。
謝謝你勞裏安。這非常有幫助! – fmotis 2011-05-19 12:25:48