Есть ядро ​​базы данных, ограниченное определенными размерами страниц? - PullRequest
1 голос
/ 17 февраля 2011

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

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

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

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

Ответы [ 2 ]

1 голос
/ 18 февраля 2011

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

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

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

0 голосов
/ 13 сентября 2011

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

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

...