Если есть незафиксированные транзакции, база данных будет помечена как «несогласованная». Вы можете проверить это, используя ESENTUTL / MH для базы данных. Вызов JetAttachDatabase для несовместимой базы данных всегда завершится ошибкой.
Итак, если ваша программа может присоединить и открыть базу данных, значит, она согласована. Есть два способа сделать базу данных согласованной:
- Чистое отключение ESENT.
- Запуск восстановления с использованием файлов журналов во время JetInit.
Первое, что делает JetInit, - это ищет файлы журнала, указанные в JET_paramLogFilePath и JET_paramBaseName. Лог-файлы содержат полные пути баз данных, на которые они ссылаются, и транзакции в лог-файлах затем фиксируются в базе данных. Таким образом, если вы правильно настроите системные параметры, ESENT загрузит журналы при подключении базы данных.
С другой стороны, если вы не установите параметры должным образом, ваша программа будет работать с базами данных, которые не требуют восстановления. JetInit не найдет никаких файлов журналов, поэтому он ничего не будет делать, и присоединение будет выполнено успешно, потому что база данных согласована.
Еще один поворот заключается в том, что файлы журналов содержат полный путь к базе данных. Это означает, что если вы скопировали / переместили базу данных, восстановление не будет работать. Начиная с Windows Server 2003, вы можете справиться с этим, установив JET_paramAlternateDatabaseRecoveryPath в каталог, содержащий базу данных.
Важно: для обеспечения безопасности всегда следует подключать и открывать базу данных с использованием флагов только для чтения. Это позволит избежать проблем, вызванных неправильными настройками файла журнала. Распространенная проблема заключается в том, что приложения, доступные только для чтения, в конечном итоге создают набор файлов журналов в другом каталоге, которые препятствуют правильному восстановлению базы данных.