Я вставлял данные в базу данных MS Access с помощью драйвера JDBC-ODBC. Пустой файл mdb был 2 КБ. После заполнения этой базы данных размер вырос до 155 МБ. Затем я удалял данные. Но я обнаружил, что размер mdb остается таким же, как и 155 МБ. У меня нет ошибок. Но так ли это нормально? Я ожидаю, что размер файла уменьшится. Если он сконструирован таким образом, какова его идея? Благодаря
Не уменьшился бы размер файла MS Access (.mdb) после удаления содержимого базы данных?
Ответ 1
MS Access не возвращает пространство для записей, пока вы не уплотнили базу данных.
Это то, что вы должны сделать для базы данных доступа как часть вашего регулярного обслуживания, иначе вы столкнетесь с некоторыми довольно болезненными проблемами.
Вы можете скомпилировать базу данных либо через интерфейс доступа MS Access (Инструменты → Утилиты базы данных →
Compact и Repair Database), вы можете использовать командную строку, используя:
msaccess.exe "target database.accdb" /compact
N.B. переключатель /Compact должен быть после целевой базы данных
Ответ 2
MS Access не освобождает пространство, используемое в записях даже после их удаления. Вы можете освободить место вручную, когда вам нужно или автоматически при каждом закрытии приложения.
Чтобы сделать это вручную, используйте утилиту Compact и Repair:
-
Создайте резервную копию своей базы данных, так как есть ошибка в Access 2007, которая может удалить вашу базу данных во время процедуры уплотнения.
-
Если вы уплотняете многопользовательскую (общую) базу данных, расположенную на сервере или в общей папке, убедитесь, что никто другой не открыл ее.
-
В меню "Сервис" выберите "Утилиты базы данных" и нажмите "Компакт" и "Восстановить базу данных".
Сделать это автоматически при закрытии приложения:
-
Откройте базу данных, в которой MS Access будет компактным автоматически.
-
В меню "Сервис" выберите "Параметры", а затем выберите вкладку "Общие".
-
Установите флажок Compact On Close.
После удаления данных и уплотнения база данных не удивляется, если она еще больше 100 КБ. Существует определенный объем накладных расходов, которые невозможно удалить после добавления данных в первый раз.
Кроме того, будьте осторожны, что значения поля AutoNumber ведут себя иначе, чем объявлено после процедуры уплотнения. Согласно документации MS Access 2000, если вы удаляете записи из конца таблицы с полем AutoNumber, уплотнение базы данных сбрасывает значение AutoNumber, Таким образом, значение AutoNumber для следующей добавляемой записи будет больше, чем значение AutoNumber последней восстановленной записи в таблице.
Я не нашел, что это так: если у вас есть 100 записей с автосозданием и удалите последние 50, следующая запись AutoNumber (согласно документации) должна быть пронумерована "51". Но, по моему опыту, вместо него "101".
Ответ 3
Первая остановка, как упоминалось, должна заключаться в том, чтобы сжать/восстановить базу данных. Однако вы также можете получить некоторую экономию за счет этого, создав новую базу данных и импортируя все объекты из старого.
Ответ 4
Вы можете скомпилировать базу данных из кода с помощью JRO. См.: http://support.microsoft.com/kb/230501
Ответ 5
Первая остановка, как упоминалось, должна заключаться в том, чтобы сжать/восстановить базу данных. Однако вы также можете получить некоторое сохранение размера за счет создания новой базы данных и импорта всех объектов из старого. Прошлое, что, превращая его в MDE, вы должны получить больше волос. Как всегда, не играйте со своей производственной копией. Также, если вы идете с MDE, убедитесь, что вы правильно разделили базу данных. (И, конечно, сохраните копию исходного MDB, если вам нужно будет вносить изменения в будущем.)