Как уменьшить размер файла аксесс

Обновлено: 02.07.2024

После удаления всех записей, содержащихся в файле, размер остается 70 МБ.

Как уменьшить размер файла .mdb ?

Каждый движок базы данных, который когда-либо существовал, требует регулярных операций по обслуживанию, чтобы оптимизировать хранение данных и восстановить свободное место. Вернувшись в xBase-дни, вы, например, выполнили команду PACK для удаления удаленных строк. На SQL Server вы запускаете скрипты для сокращения фактических файлов данных по тем же причинам.

Почему каждый движок базы данных делает это?

Потому что это будет огромный успех, если каждая запись в базу данных должна была переписать весь файл в оптимизированном порядке. Рассмотрим базу данных, в которой каждая таблица данных хранится в отдельном файле. Если таблица имеет 10000 записей, и вы удаляете 5000-ю запись, чтобы избавиться от свободного места, вам придется переписать всю вторую половину файла данных. Вместо этого каждая база данных использует некоторую форму маркировки пространства, используемого как неиспользуемое и отбрасываемое, в следующий раз, когда операции оптимизации выполняются в таблице данных.

Jet/ACE в этом отношении не отличается от любого другого механизма базы данных, и любое приложение, использующее базу данных Jet/ACE, в качестве хранилища данных должно планировать регулярные операции обслуживания, включая резервную копию, а затем компактную версию.

В Jet/ACE есть некоторые проблемы, которые отсутствуют в серверах базы данных сервера. В частности, вы не можете сжимать, если все пользователи не закрыли свои подключения к файлу данных. В базе данных сервера пользователи подключаются к серверному процессу базы данных, а этот демон на стороне сервера является единственным "пользователем" фактических файлов данных, в которых хранятся данные. Таким образом, демон сервера может решить, когда выполнять процедуры оптимизации и обслуживания, поскольку он полностью контролирует, когда файлы данных используются или нет.

Одной из распространенных проблем с приложениями Access является то, что пользователи оставят свое приложение открытым на своих компьютерах и покинут офис в течение дня, а это означает, что при запуске компактной операции, скажем, в 2 часа ночи, файл все еще открыт и вы не можете запустить его (поскольку компакт-диск заменяет исходный файл). Большинство программистов приложений Access, которые сталкиваются с этой проблемой, будут либо терпеть случайный сбой такого вида ночного обслуживания (теневая копия тома все еще позволяет делать резервную копию файла, хотя нет гарантии, что резервная копия будет находиться в 100% внутреннем состоянии), или они будут обрабатывать приложения Access, чтобы прекратить работу в то время, которое позволяет выполнять операции по ночному техобслуживанию. Я сделал и то, и другое.

В приложениях без доступа существует одна и та же проблема, но ее нужно решать по-разному. Для веб-приложений это что-то вроде проблемы, но в целом я бы сказал, что любое веб-приложение, которое сбивает данные, достаточные для того, чтобы компактный был необходим, - это тот, для которого хранилище данных Jet/ACE совершенно неуместно.

Теперь, на тему КОМПАКТ-ЗА ЗАКРЫТЬ:

Он никогда не должен использоваться кем-либо.

Это бесполезно и совершенно опасно, когда он на самом деле пинает.

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

Во-вторых, даже если кто-то иногда запускает его, он работает только в том случае, если этот пользователь является единственным, у которого открыта база данных. Как я сказал выше, он не может быть уплотнен, если есть другие пользователи с открытым, так что это не сработает - COMPACT ON CLOSE может работать только тогда, когда пользователь запускает его эксклюзивный доступ.

Но хуже всего, COMPACT ON CLOSE опасен и, если он работает, может привести к фактической потере данных. Это связано с тем, что есть определенные состояния, в которых может существовать дата-база Jet/ACE, в которой внутренние структуры выходят из строя, но данные все еще доступны. Когда операция compact/repair выполняется в этом состоянии, данные могут быть потеряны. Это крайне редкое условие, но это очень отдаленная возможность.

Дело в том, что COMPACT ON CLOSE не является условным, и нет приглашения, которое спросит вас, хотите ли вы его запустить. У вас нет возможности делать резервную копию до ее запуска, поэтому, если вы ее включили, и она срабатывает, когда ваша база данных находится в очень редком состоянии, вы можете потерять данные, которые вы могли бы восстановить, если вы не запускали компактную операцию.

Итак, словом, никто не понимает, что Jet/ACE и компактирование когда-либо включается COMPACT ON CLOSE.

Для одного пользователя вы можете просто сжимать по мере необходимости.

Для общего приложения какое-то плановое обслуживание script - лучшая вещь, обычно работающая на ночь на файловом сервере. Это script сделает резервную копию файла, а затем запустит компакт. Это довольно простой script для записи в VBScript и легко запланированный.

В конце концов, если ваше приложение часто удаляет большое количество записей, в большинстве случаев это указывает на ошибку дизайна. Записи, которые добавляются и удаляются при обычном использовании, являются ВРЕМЕННЫМИ ДАННЫМИ и не принадлежат к вашему основному файлу данных, как логически, так и прагматично.

Все мои производственные приложения имеют временную базу данных как часть архитектуры, и там хранятся все временные таблицы. Я никогда не пытаюсь скомбинировать базы данных temp. Если по какой-то причине производительность увязла из-за раздувания в базе данных temp, я бы просто скопировал нетронутую пустую копию базы данных temp поверх старой, поскольку ни одна из данных в ней не является чем-то другим, кроме временного. Это уменьшает отток и раздувание в передней или задней части корпуса и значительно снижает частоту необходимых компакт-дисков в файле данных задней части.

В вопросе о том, как сжимать, существует ряд опций:

в пользовательском интерфейсе доступа вы можете сжать текущую открытую базу данных (TOOLS | DATABASE UTILITIES). Однако это не позволяет делать резервную копию как часть процесса, и всегда рекомендуется создать резервную копию перед уплотнением, на случай, если что-то пойдет не так.

в пользовательском интерфейсе доступа вы можете скомпилировать базу данных, которая не открыта. Он объединяется с существующим файлом на новый, поэтому, когда вы закончите, вы должны переименовать как оригинальный, так и недавно сжатый файл (чтобы иметь новое имя). Диалоговое окно FILE OPEN, в котором запрашивается, какой файл является компактным, позволяет вам переименовать файл в этой точке, поэтому вы можете сделать это как часть ручного процесса.

Позвольте мне подчеркнуть, насколько важны резервные копии. Вам это не понадобится в 999 раз из 1000 (или даже реже), но когда вам это нужно, вам это будет плохо! Поэтому никогда не компактно, не делая резервной копии заранее.

Наконец, после любого компактного файла рекомендуется проверить сжатый файл, чтобы увидеть, есть ли системная таблица, называемая MSysCompactErrors. В этой таблице будут перечислены все проблемы, возникающие во время работы компакт-диска, если таковые имеются.

Базы данных могут быстро увеличиваться в размере по мере использования, что иногда снижает их быстродействие. Они также могут быть повреждены или повреждены. Для предотвращения и устранения этих проблем можно использовать команду "Сжатие и восстановление базы данных". Процесс сжатия не сжимает данные — он уменьшает файл базы данных, убирая неиспользуемое пространство. Команда Сжать и восстановить базу данных также поможет улучшить производительность базы данных.

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

Что вы хотите сделать?

Способы сжатия и восстановления базы данных

Существует несколько подходов к сжатию и восстановлению базы данных. Часто происходит автоматическое сжатие и восстановление базы данных при ее закрытии. Кроме того, вы можете вручную выполнить команду "Сжатие и восстановление базы данных", если база данных открыта, а база данных не открыта.

Подготовка

Перед началом сжатий и восстановления необходимо сделать следующее:

Резервное копирование базы данных В ходе восстановления Access может удалить некоторые данные из поврежденных таблиц. Иногда эти данные можно восстановить из резервной копии. В дополнение к обычной стратегии резервного копирования следует сделать резервную копию непосредственно перед использованием команды "Сжатие и восстановление базы данных". Дополнительные сведения см. в теме "Защита данных с помощью резервного копирования и восстановления".

Монопольный доступ к базе данных Для операции сжатия и восстановления базы данных требуется монопольный доступ к файлу базы данных, так как она может привести к отключению других пользователей. Перед выполнением сжатия и восстановления базы данных следует уведомить других пользователей, чтобы они не работали с ней в это время. Дополнительные сведения см. в теме "Открытие существующей базы данных Access".

Сообщите пользователям, как долго они не должны работать с базой данных. Если вы регулярно выполняете сжатие и восстановление, отмечайте, как долго выполняется эта операция. Это позволит более точно оценить, как долго пользователи не должны работать с базой данных.

Получить достаточное разрешение на доступ к базе данных Если у вас нет достаточных разрешений и вам нужно сжатие и восстановление базы данных, обратитесь за помощью к системному администратору. Дополнительные сведения см. в разделе "Изменения общего доступа к файлам по сети в Windows 10".

Автоматическое сжатие и восстановление базы данных при ее закрытии

Чтобы автоматически сжимать и восстанавливать базу данных при ее закрытии, установите флажок Сжимать при закрытии. Этот параметр влияет только на открытую в данный момент базу данных. Заключив этот параметр отдельно для каждой базы данных, которую вы хотите автоматически сжатие и восстановление. В многопользовательских базах данных этот параметр включать не стоит, поскольку из-за него может кратковременно нарушаться доступ к базе данных.

На вкладке Файл выберите пункт Параметры.

В диалоговом окне "Параметры Access" выберите "Текущая база данных".

В разделе Параметры приложений установите флажок Сжимать при закрытии.

Закройте и снова разкройте базу данных, чтобы параметр вступил в силу.

Сжатие и восстановление открытой базы данных вручную

Выберите "Файл>в >"& базы данных восстановления".

Access создаст копию сжатой и восстановленной базы данных в одном месте.

Сжатие и восстановление базы данных, которая не открыта, вручную

Используйте эту процедуру, если не можете открыть базу данных Access напрямую.

Убедитесь, что другие пользователи в данный момент не используют файл базы данных.

В Access 2013, Access 2016 и Access 2019

На странице шаблонов дважды щелкните пустую базу данных.

Выберите "Файл >закрыть".

Выберите "Работа с базами данных> сжатие и восстановление базы данных.

В диалоговом окне База данных для сжатия перейдите к базе данных, которую вы хотите сжать и восстановить, и щелкните ее два раза.

Access создаст копию сжатой и восстановленной базы данных в одном месте.

Сжатие и восстановление поврежденной базы данных при запросе Access

Если Access запросит сжатие и восстановление базы данных, при попытке открыть поврежденный файл базы данных выберите "Да". Могут произойти два вещи:

Если Access успешно работает лишь частично, он отслеживает объекты базы данных, которые не удалось восстановить в системной таблице MSysCompactErrors. Access откроет таблицу MSysCompactErrors в представлении таблицы. Если у вас есть резервная копия, созданная перед повреждением базы данных, можно воспользоваться таблицей MSysCompactErrors для определения объектов, которые необходимо импортировать в восстановленную базу данных. Чтобы отобрать системные таблицы, щелкните правой кнопкой мыши заголовок окна навигации, а затем в диалоговом окне "Параметры переходов" выберите "Показать системные объекты".

Зачем сжатие и восстановление базы данных

Увеличение размера файлов базы данных по мере использования

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

Access создает временные скрытые объекты для выполнения различных задач. Иногда временные объекты остаются в базе данных, когда они уже не нужны.

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

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

Повреждение файлов базы данных

При определенных обстоятельствах файл базы данных может быть поврежден. Если файл базы данных совместно работает по сети и несколько пользователей одновременно работают с ним напрямую, существует небольшой риск его повредить. Риск повреждения тем выше, если пользователи часто редактирует данные в полях Memo, а риск растет со временем. Вы можете снизить этот риск с помощью команды "Сжатие и восстановление базы данных".

Зачастую такой тип повреждения возникает из-за проблемы с модулем VBA Visual Basic для приложений и не приводит к потере данных. Однако они могут привести к нарушению структуры базы данных, например потере кода VBA или ошибкам форм.

Иногда повреждение файла базы данных приводит к потере данных. Обычно эта потеря ограничивается потерей последнего действия одного пользователя, то есть единичного изменения данных. Когда пользователь начинает изменять данные и изменение прерывается (например, из-за отказа сетевой службы), Access помечает файл базы данных как поврежденный. Файл можно восстановить, но после восстановления некоторые данные могут отсутствовать.

1.1. При удалении данных в таблицах БД записи из файла БД не удаляются, а просто помечается как удаленные (удаляются логически). Т.е. стертые данные так и лежат в базе, в результате файл по мере работы постепенно растет;

1.2. При внесении изменений в формы, отчеты, запросы и т.п. прежние копии редактируемых объектов, по аналогии с записями в таблицах (см. выше), удаляются логически, но не физически, что так же приводит к "распуханию" файла БД;

1.3. Access во время выполнения Проекта активно пользуется Скрытыми таблицами Проекта (БД), поэтому рост размеров файла БД может наблюдаться даже в MDE/ADE-файлах (редактировать формы, отчеты и т.п. в которых невозможно), не содержащих таблицы с данными пользователя;

1.4. Распухание БД возможно, если при выполнении каких-либо задач создаются временные таблицы (например, при формировании сложных отчетов), а затем данные временные таблицы уничтожаются. Уничтожаются они так же логически (просто помечаются как удаленные).

Q2. За счет чего размер файла БД уменьшается при сжатии?

При сжатии из файла БД физически удаляются записи и объекты БД, помеченные как "удаленные" (логически удаленные).

Q3. Зачем необходимо сжимать БД?

3.1. Для повышения производительности Проекта (быстродействия БД). Во время сжатия Access не только физически удаляет логически удаленные записи, что само по себе увеличивает производительность (отпадает необходимость фильтровать действительные данные от логически удаленных данных), но и дефрагментирует таблицы, в результате чего увеличивается скорость доступа к данным;

3.2. Для повышения надежности БД. На основе эмпирических данных замечено, что регулярное сжатие (и соответственно, восстановление) БД повышает "иммунитет" Проекта к глюкам;

3.3. В некоторых случаях сжатие/восстановление БД просто необходимо. Если БД "упала", то первым делом необходимо сделать ее (уже упавшей) резервную копию и вторым шагом произвести сжатие/восстановление;

3.4. В качестве профилактических мер после неких форс-мажорных обстоятельств. Например, если во время работы БД был выключен свет, либо пользователь сам выключил компьютер, не закрыв БД, либо произошло "падение" сети в момент работы БД и т.п.

3.5. Заново создается статистика по таблицам (количество записей в таблицах, наличие и типы связей, присутствие индексов и т.п.), которая в дальнейшем будет использована Оптимизатором выполнения запросов. Кроме того, сбрасывается флаг компиляции запросов, что приводит при первом следующем выполнении запроса к новому построению плана выполнения запроса, но уже с учетом обновленной статистики, что увеличивает скорость выполнения запросов. Этот пункт можно считать единственным минусом сжатия/восстановления БД, так как на построение плана запроса требуется некоторое время (небольшое).

Q4. Как часто необходимо сжимать БД?

Теоретически, сжимать БД необходимо при каждом закрытии БД. Практически это не всегда целесообразно, т.к. занимает определенное время и в некоторых случаях отрицательно сказывается на производительности БД в момент первого выполнения запросов (см. Пункт 3.5).
Оптимальным вариантом является некий график сжатия БД: раз в день, раз в два дня, раз в неделю и т.п., который определяется исходя из: 1) Количества одновременно работающих с БД пользователей, 2) размеров БД, 3) из частоты обновления данных в БД (удаление, добавление, редактирование записей) и т.п.

Q5. Как сжимать БД?

5.1. Через меню: Сервис/Служебные программы/Сжать и восстановить базу данных;

5.2. Через меню: Сервис/Параметры/Вкладка "ОБЩИЕ"/Флаг "Сжимать при закрытии". С помощью данной настройки можно организовать автоматическое сжатие БД при каждом ее закрытии. Действие данного флажка относится только к открытой базе данных, при этом подключенные (прилинкованные) базы данных сжаты не будут. Как сжать прилинкованную БД см. Вопрос/Ответ Q6;

5.3. Через преобразование БД к предыдущей версии БД (Сервис/Служебные программы/Преобразовать базу данных:) с последующим преобразованием полученного файла к текущей версии БД. Данный способ наиболее эффективен для сжатия БД после внесения изменений в его интерфейсную часть (редактирование форм, отчетов, кода и т.п.), так как иногда удается обнаружить ряд скрытых ошибок, зачастую возникших из-за сбоев самого Access, а так же физически удалить из файла БД логически удаленные объекты.

5.4. Через импорт в пустой (новый) файл БД. По преследуемым целям схож с предыдущим пунктом.

5.5. Через выполнение запуска Access в командной строке со специальными параметрами. Например:

5.6. Через VBA-код, при этом можно использовать несколько различных технологий программного сжатия БД (См. ответы на вопросы Q6 и Q7).

Q6. Как сжать БД из VBA-кода моего Проекта?

Можно программно нажать кнопку "Сжать и восстановить базу данных" (меню Сервис/Служебные программы). Этот вариант является наиболее простым, но в то же время наименее гибким из предложенных далее, а также обладает рядом серьезных недостатков (см. ниже):

Сжатие через DAO-метод DBEngine.CompactDatabase.
Данный метод сжатия наиболее предпочтителен для MDB/MDE форматов БД расположенных "настольно" (без сети) или для сетевых БД, организованных по технологии "Файл-Сервер". Основным условием является доступность (подключение) Библиотеки DAO.
Метод не пригоден для сжатия текущей БД (базы данных, в которой выполняется процедура сжатия), но прекрасно подходит для разделенных БД (см. Пункт 8.3). Для сжатия базы данных, в которой выполняется программный код, инициирующий данное сжатие, можно воспользоваться Вариантом 1 (см пункт 6.1) или, что намного лучше, Отдельным процессом, который и произведет данное сжатие (см. пункт 6.4). Кроме того можно попытаться воспользоваться (на свой страх и риск) вариантом, приведенным в Пункте 7.2

Сжатие производится следующим образом:

- если к БД подключаются несколько пользователей, то перед сжатием БД необходимо убедиться, что ни один пользователь не подключен к базе. В противном случае система сгенерирует перехватываемую ошибку и сжатие БД выполнено не будет;

- сформировать полный путь к сжимаемой БД и полный путь к новому (временному) файлу, в который сжатая БД будет записана;

- скопировать новый (появившийся в результате сжатия БД) файл на место старого (копирование под именем, которое принадлежало старому файлу);

- удалить новый (временный) файл.

В качестве примера можно привести два варианта реализации сжатия БД DAO-методом, отличающихся способами манипулирования файлами:

6.2.1. Пример 1

6.2.2. Пример 2

Сжатие через JRO-метод ("расширение" ADO) JRO.JetEngine.
Данный метод сжатия наиболее предпочтителен для ADP/ADE форматов БД, обычно не использующих DAO-библиотеку.

Сжатие производится следующим образом:

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

- Проверяем, подключен ли кто-нибудь еще к базе данных, что можно сделать двумя вариантами:

1) Проверить наличие .ldb файла

2) Использовать метод ADO OpenSchema для получения информации о подключенных пользователях (если есть файл рабочей группы) или машинах (в данном примере именно так, где имя машины - 10 символов). Вариант более гибкий, т.к. можно узнать, кто именно блокирует файл (в данном примере проверяем подключен кто-то или нет, но из полученного рекордсета легко можно забрать и реальные имена пользователей/машин).

- Производим сжатие, при этом должна быть подключена библиотека Microsoft Jet and Replication Objects x.x Library (JRO)

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

Как это работает:

База данных, в которой выполняется код (Клиентская часть или Неразделенная БД), перед закрытием (возможно, не при каждом закрытии: См. Вопрос/Ответ Q4) вызывает другую программу, которая производит все необходимые действия по обслуживанию БД.
В приведенном ниже примере в качестве обслуживающих действий выполняется сжатие Вызвавшей БД и Дополнительной БД, при этом в качестве Сервис-Провайдера используется Access.

Для реализации описанного механизма:

- Создайте новую базу данных с именем "DBServiceProvaider.mdb", в которой создайте форму. Скопируйте в модуль формы следующий код:
Обратите внимание, что в процедуре Private Sub Form_Timer() указан путь к двум сжимаемым БД, который необходимо настроить в соответствии с именами и размещением сжимаемых БД на машине.

- сохраните форму и укажите ее имя в качестве автоматически открываемой формы (Меню Сервис\Параметры запуска\Вывод формы или страницы);

- создайте модуль и разместите в нем функцию, приведенную в Пункте 6.2.1 (можно воспользоваться и Примером из пункта 6.2.2, соответствующим образом откорректировав процедуру gsTryToCompactDB());

- подключите DAO-библиотеку (в случае, если еще не подключена), откомпилируйте код и закройте созданную "DBServiceProvaider.mdb";

- откройте базу, из которой будет вызываться созданный нами "Провайдер Обслуживания БД", и добавьте в соответствующее место (например, на кнопку "Выход", или на событие выгрузки главной формы проекта) код:
Обратите внимание, что сначала указывается полный путь к исполнимому файлу Access, а затем полный путь к созданной "DBServiceProvaider.mdb", при этом как тот, так и другой необходимо указать в соответствии с расположением файлов на машине.

Следует отметить, что процедура Private Sub Form_Timer() может содержать сколько угодно шагов, направленных на обслуживание БД.

Код приведен в качестве упрощенного примера и призван показать в общих чертах пути реализации приведенной концепции.

7. Что еще можно сделать и почему так делать не надо?

7.1. Можно Программно нажать кнопку "Сжать и восстановить базу данных". Один из наиболее работоспособных вариантов подобного способа сжатия описан в Пункте 6.1. Здесь рассмотрен вариант выполнения аналогичных действий всего лишь одной командой (только для Access 200x):

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

Здесь же можно привести несколько видоизмененную версию описываемого способа сжатия БД:

Данный вариант не зависит от локализации Access и работает в версиях 2000 и XP, но гарантировать невозможно, что в следующих версиях индексы останутся прежними, а значит, что приложение использующее данный код в следующих версиях останется работоспособным.

Кроме рассмотренных особенностей использования данного способа сюда можно отнести и все сказанное в пункте 6.1

7.2. Попытаться сжать Текущую БД (базу данных, в которой выполняется код, инициирующий сжатие) можно на основе метода, описанного в Пункте 6.2.2, при этом следует внести изменения в алгоритм выполнения сжатия:

- скопировать текущую (исполняемую) БД во временный файл;

- сжать временный файл в другой временный файл;

- полученный сжатый временный файл скопировать на место текущего (выполняемого) файла.

Данная методика, так же как и методика, описанная в Пункте 7.1, приведена здесь с целью ознакомления со всеми возможными вариантами сжатия БД и настоятельно не рекомендуется к реальному применению! Причин несколько. Во-первых, не всегда получается подменить (перезаписать) файл открытой БД. Во-вторых, если подмена будет "удачной" (система позволит перезаписать файл открытой БД), то это может обернуться полным разрушением БД. В-третьих, читаем Help: "CompactDatabase Method: Copies and compacts a closed database. ", т.е. сжимать можно только закрытую (не используемую) БД.

8. Что еще следует иметь в виду по данному вопросу?

8.1. Перед сжатием БД рекомендуется создавать резервную копию сжимаемого файла. В случае если сжатие производится после некой аварийной ситуации (см. Пункты 3.3 и 3.4), то данная рекомендация превращается в жесткое требование;

8.2. Как уже было указано в пункте 6, во время сжатия к БД не должны быть подключены пользователи;

8.3. К вопросу о сжатии БД, повышающем скорость выполнения и "глюкоустойчивость" Проекта, можно добавить рекомендацию разделять БД на несколько частей, ключевыми из которых являются "Интерфейсная часть" (формы, отчеты, запросы, модули и т.п.) и "Часть с Данными" (таблицы). Данная рекомендация основана на многих причинах, выходящих за рамки FAQ;

8.4. Во время сжатия БД Автоматические Счетчики в таблицах, генерирующие Последовательные значения при добавлении записей, так же "сжимаются" - принимают значения равные Максимальному значению счетчика в столбце + 1;

8.5. После сжатия БД рекомендуется выполнять дефрагментацию диска (по мере возможности), что положительно сказывается на производительности Проекта уже на системном уровне (скорость доступа к дефрагментированному файлу выше, нежели скорость доступа к файлу, разбросанному по диску).

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

Сжатие повышает производительность баз данных и проектов Access. Однако сжатие проекта не влияет на объекты, такие как представления и таблицы, хранящиеся в базе данных на SQL Server. Сжатие проекта не влияет также на таблицы, содержащие поле счетчика в проектах Access, как это происходит с базами данных. Если из базы данных, перед сжатием из таблицы, содержащей поле счетчика, были удалены последние записи, после сжатия номер первой пустой записи сбрасывается. Добавленная после этого запись получит в поле счетчика номер, на единицу превышающий значение счетчика в последней оставшейся записи.

Замечание

Сжатие баз данных, созданных в предыдущих версиях Microsoft Access, не приводит к их преобразованию в формат Microsoft Access 2002. Способы преобразования баз данных предыдущих версий Access описаны в гл. 19.

Перед сжатием совместно используемой базы данных убедитесь, что она не открыта ни одним из пользователей сети. Для сжатия базы данных необходимо обладать правами на ее открытие, запуск и открытие в монопольном режиме (см. разд. "Назначение прав доступа к объектам базы данных" в этой главе). Чтобы сжать открытую базу данных или проект Access 2002:

  1. Перед сжатием сетевой базы данных, расположенной в общей папке или на сервере, убедитесь, что она не открыта другими пользователями.
  2. Выберите команду Сервис, Служебные программы, Сжать и восстановить базу данных (Tools, Database Utilities, Compact and Repair Database).

Чтобы сжать закрытую в данный момент базу данных или проект Access 2002:

  1. Если в данный момент открыта другая база данных или проект Access 2002, закройте ее (его). Если база данных или проект расположены в общей папке или на сервере, убедитесь, что они не открыты другими пользователями.
  2. Выберите команду Сервис, Служебные программы, Сжать и восстановить базу данных (Tools, Database Utilities, Compact and Repair Database).
  3. Появится диалоговое окно База данных для сжатия (Database To Compact From) (рис. 20.1), похожее на окно открытия базы данных. Укажите базу данных или проект, который необходимо сжать, и нажмите кнопку Сжать (Compact).

Рис. 20.1. Диалоговое окно База данных для сжатия

Замечание

В обоих случаях процесс сжатия можно прервать с помощью комбинации клавиш <Ctrl>+<Break> или клавиши <Esc>.

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

Можно настроить Access 2002 так, чтобы конкретная база данных или проект автоматически сжимались при закрытии.

Чтобы установить автоматическое сжатие базы данных Access 2002:

  1. Откройте базу данных, которую нужно сжать.
  2. Выберите команду Сервис, Параметры (Tools, Options). В появившемся диалоговом окне Параметры (Options) раскройте вкладку Общие (General).
  3. Установите флажок Сжимать при закрытии (Compact on Close) и нажмите кнопку ОК.

Установка автоматического сжатия проекта Access 2002 выполняется аналогично.

Замечание

Автоматическое сжатие не происходит, если при этом размер базы данных (или проекта) не будет уменьшен, по крайней мере, на 256 Кбайт, а также, если эта база данных (или проект) в текущий момент открыта другим пользователем в сети.

Читайте также: