Почему я должен заботиться о сжатии файла MS Access .mdb?
Мы распространяем приложение, которое использует файл MS Access .mdb. Кто-то заметил, что после открытия файла в MS Access размер файла сильно уменьшается. Это говорит о том, что файл является хорошим кандидатом на сжатие, но мы не предоставляем средств для этого нашим пользователям.
Итак, мой вопрос, это имеет значение? Мы заботимся? Какие плохие вещи могут случиться, если наши пользователи никогда не сжимают базу данных?
9 ответов
В дополнение к уменьшению размера вашей базы данных, она будет пересчитывать индексы ваших таблиц и дефрагментировать ваши таблицы, что может ускорить доступ. Он также обнаружит любые несоответствия, которые никогда не должны возникать в вашей базе данных, но могут возникнуть из-за ошибок или сбоев в Access.
Это не совсем без риска - ошибка в Access 2007 иногда удаляет вашу базу данных во время процесса.
Так что, как правило, это хорошо, но соедините его с хорошей программой резервного копирования. При наличии резервной копии вы также можете восстанавливаться от любых "неустранимых" проблем компактности и восстановления с минимальной потерей данных.
Убедитесь, что вы регулярно сжимаете и восстанавливаете базу данных, особенно если приложение базы данных часто обновляет, удаляет и вставляет записи. Это не только уменьшит размер файла базы данных до минимума - что поможет ускорить операции с базой данных и сетевые коммуникации - оно также выполняет ведение базы данных, что еще больше повышает стабильность ваших данных. Но прежде чем сжимать базу данных, убедитесь, что вы сделали резервную копию файла, на случай, если что-то пойдет не так с уплотнением.
Jet сжимает базу данных для реорганизации содержимого файла таким образом, чтобы каждая 4 КБ "страница" (2 КБ для Access 95/97) пространства, отведенного для данных, таблиц или индексов, находилась в смежной области. Jet восстанавливает пространство из записей, помеченных как удаленные, и перезаписывает записи в каждой таблице в порядке первичного ключа, как кластерный индекс. Это ускорит чтение и запись вашего БД.
Jet также обновляет статистику таблицы во время уплотнения. Это включает в себя определение количества записей в каждой таблице, что позволит Jet использовать наиболее оптимальный метод для сканирования записей либо с помощью индексов, либо с помощью полного сканирования таблиц, когда записей мало. После сжатия выполните каждый сохраненный запрос, чтобы Jet повторно оптимизировал его, используя эти обновленные статистические данные таблицы, что может повысить производительность запроса.
Access 2000, 2002, 2003 и 2007 объединяют сжатие с операцией восстановления, если это необходимо. Процесс ремонта:
1 - убирает незавершенные транзакции
2 - сравнивает данные в системных таблицах с данными в реальных таблицах, запросах и индексах и исправляет ошибки
3 - Исправляет очень простые ошибки структуры данных, такие как потерянные указатели на многостраничные записи (что не всегда успешно и поэтому "восстановление" не всегда работает, чтобы сохранить поврежденную базу данных Access)
4 - Заменяет недостающую информацию о структуре проекта VBA
5 - Заменяет недостающую информацию, необходимую для открытия формы, отчета и модуля
6 - Исправляет простые ошибки структуры объекта в формах, отчетах и модулях.
Плохие вещи, которые могут случиться, если пользователи никогда не сжимают / ремонтируют БД, заключаются в том, что он станет медленным из-за раздувания и может стать нестабильным, то есть поврежденным.
Сжатие базы данных Access (также известной как база данных MS JET) похоже на дефрагментацию жесткого диска. Доступ (или, точнее, механизм базы данных MS JET) не очень хорош с повторным использованием пространства - поэтому, когда запись обновляется, вставляется или удаляется, пространство не всегда восстанавливается - вместо этого новое пространство добавляется в конец файла базы данных и используется вместо.
Общее практическое правило заключается в том, что если ваша база данных [Access] будет записана (обновлена, изменена или добавлена), вам следует разрешить сжатие - в противном случае она будет увеличиваться в размере (намного больше, чем просто добавленные вами данные)., тоже).
Итак, чтобы ответить на ваш вопрос (ы):
- Да, это имеет значение (если ваша база данных только для чтения).
- Вы должны заботиться (если вы не заботитесь о дисковом пространстве вашего пользователя).
- Если вы не сожмете базу данных Access, со временем она будет расти намного, намного, намного больше, чем предполагаемые данные в ней, снижая производительность и увеличивая вероятность ошибок и повреждений. (Как база данных на основе файлов, файлы базы данных Access печально известны своими повреждениями, особенно при доступе по сети.)
Эта статья о том, как сжимать базу данных Microsoft Access с помощью ADO, станет хорошей отправной точкой, если вы решите добавить эту функцию в свое приложение.
Эхо Нейта: В старых версиях у меня были поврежденные базы данных, поэтому хороший режим резервного копирования необходим. Я не буду ничего кодировать в ваше приложение, чтобы сделать это автоматически. Тем не менее, если клиент обнаружит, что его база данных работает очень медленно, ваши специалисты службы технической поддержки могут обсудить их, если потребуется (с соответствующими резервными копиями, конечно).
Если их база данных становится настолько большой, что уплотнение начинает становиться необходимостью, возможно, пришло время перейти к MS-SQL.
Я бы предложил пользователям способ сжатия базы данных. Я видел, как базы данных увеличиваются до 600+ мегабайт, когда сжатие уменьшается до 60-80.
Я также настоятельно рекомендую обратиться к VistaDB ( http://www.vistadb.net/) или SQL Compact ( http://www.microsoft.com/sql/editions/compact/) для вашего приложения. Они могут не подходить для вашего приложения... но их стоит посмотреть.
Я обнаружил, что файлы базы данных Access почти всегда со временем портятся. Сжатие и исправление их помогают удерживать это некоторое время.
Ну, это действительно важно! Размер файлов mdb увеличивается с каждым разом, когда вы манипулируете его данными, пока он не достигнет невыносимого размера. Но вам не нужно предоставлять метод уплотнения через ваш интерфейс. Вы можете добавить следующий код в файл mdb, чтобы он сжимался при каждом закрытии файла:
Application.SetOption ("Авто Компакт"), 1
Если вы не предлагаете своим пользователям способ распаковки и исходный размер не является проблемой для начала, не беспокойтесь.