Есть ядро ​​базы данных, ограниченное определенными размерами страниц?

У меня была проблема с открытием базы данных esent (Windows.edb) из-за проблем с размером страницы. Размер страниц Windows.edb в моей системе составляет 32 КБ. Когда я устанавливаю это через JET_paramDatabasePageSize, JetInit возвращает ошибку -1213 (размер страницы базы данных не соответствует движку). Лорион Бурчалл предложил отключить JET_paramRecovery, когда мне нужен только доступ ReadOnly к базе данных. Это решило мою проблему.

До сих пор. У меня не совсем отключенная база данных. Я предполагаю, что при JET_paramRecovery=On JetInit автоматически выполнит восстановление и позволит мне прочитать базу данных. Но если я попробую это, я получу эту старую ошибку -1213.

Теперь я могу исправить свой файл с помощью ESENTUTL, но фиктивный пользователь моего приложения не сможет. Есть ли какой-нибудь способ включить восстановление и при этом иметь возможность определять ЛЮБОЙ DatabasePageSize? В месте расположения базы данных нет файлов журналов (и я установил Logpath в тот же каталог, чтобы они не были записаны в другом месте).

Означает ли это, что движок на моей машине не поддерживает размер страницы или базу данных? Или я могу решить проблему с установкой другого магического переключателя?

2 ответа

Решение

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

  1. Где находятся файлы журналов (JET_paramLogFilePath)
  2. Размер файла журнала (JET_paramLogFileSize)
  3. Размер страницы базы данных (JET_paramDatabasePageSize)
  4. Базовое имя файла журнала (JET_paramBaseName)

Если вы установите все эти параметры правильно, восстановление будет работать правильно. Если вы не сделаете это правильно, то у другого приложения могут возникнуть проблемы с восстановлением его базы данных!

Существует простой (но хитрый) способ "исправить" базу данных EDB, которая не была корректно закрыта. В смещении 52 в заголовке есть флаг состояния. Это 4-битное целое число, которое должно быть установлено в 3 (если оно не закрыто изящно, то значение, которое вы найдете, вероятно, будет 2).

Возможно, вам придется повторить эту запись на второй странице базы данных, которая содержит копию заголовка базы данных. Вы можете найти эту страницу просто размером страницы базы данных (обычно 4096, 8192 и т. Д.).

Поскольку это действительно взломать, вы должны использовать его на свой страх и риск!

Другие вопросы по тегам