Как сделать исправление Extensible Storage Engine (JetBlue) в коде? - PullRequest
0 голосов
/ 26 февраля 2010

Я использую ESE (JetBlue) в приложении, когда вызывается JetAttachDatabase, он возвращает JET_errDatabaseDirtyShutdown. Что я должен делать в своем приложении? Я хочу, чтобы все незарегистрированные транзакции были удалены

Ответы [ 2 ]

1 голос
/ 03 марта 2010

Восстановление журнала будет выполнено автоматически при вызове JetInit, который автоматически откатит незавершенные транзакции. Чтобы JetInit работал, он должен найти файлы журналов, поэтому в этом случае вы, вероятно, имеете либо:

  1. Удалил логи. Не делай этого.
  2. Неправильно указан путь к файлу журнала. Всегда устанавливайте один и тот же путь к файлу журнала при инициализации, чтобы ESE могла найти журналы.
  3. Перемещена база данных. Журналы содержат жестко заданный путь к базе данных, поэтому перемещение базы данных прерывает восстановление. Чтобы справиться с этим, вы можете установить системный параметр альтернативного пути восстановления в каталог, содержащий базу данных.
0 голосов
/ 20 ноября 2016

Вы можете настроить свое приложение на автоматическую попытку очистки «грязного завершения», добавив следующее после JetCreateInstance () и перед JetInit (). Да порядок этих вещей важен:

Api.JetSetSystemParameter(instance, JET_SESID.Nil, Server2003Param.AlternateDatabaseRecoveryPath, 0, Path.GetDirectoryName(databasePath));

(пример выше в C #, но вы поняли ...)

Последний параметр - это место, где вы хотите, чтобы восстановленная база данных появлялась, так что, скорее всего, это будет тот же каталог, что и грязный файл базы данных.

...