Восстановление поврежденной базы данных Access 2002 или более поздней и устранение неполадок в ее работе

Переводы статьи Переводы статьи
Код статьи: 283849 - Vizualiza?i produsele pentru care se aplic? acest articol.
Целевая аудитория — малоопытные пользователи. Материал, изложенный в этой статье, требует знания пользовательского интерфейса на компьютерах с одним пользователем.

Данная статья применима только к базам данных Microsoft Access (MDB).

Версия данной статьи для Microsoft Access 97:279334 (данная ссылка может указывать на содержимое полностью или частично на английском языке).
Версия данной статьи для Microsoft Access 2000:209137.
Развернуть все | Свернуть все

В этой статье

Аннотация

Повреждение файла базы данных может быть вызвано разными процессами, происходящими как в СУБД Access, так и вне ее. Симптомы повреждения базы данных варьируются от появления в полях некоторых записей значения #Deleted до невозможности открытия в Access одного из объектов базы данных или файла базы данных в целом. Полезным инструментом оптимизации и восстановления файлов баз данных Microsoft Access является средство сжатия и восстановления. В данной статье описывается это средство Access и предлагаются другие способы восстановления поврежденных баз данных. Кроме того, в статье приводятся сведения о возможных причинах повреждения баз данных.

Примечание. Microsoft Jet, ядро СУБД Microsoft Access, является системой с совместным доступом к файлам. Если Microsoft Jet работает в многопользовательской среде, операции чтения, записи и блокировки совместно используемой базы данных выполняются многими клиентскими процессами. Из-за возможности доступа многих клиентских процессов к одной базе данных, а также из-за того, что в Microsoft Jet не используется журнал транзакций (в отличие от СУБД более высокого класса, таких как SQL Server), надежно защитить базы данных от повреждения невозможно. Если СУБД должна работать в многопользовательской среде 24 часа в сутки 7 дней в неделю, корпорация Microsoft рекомендует использовать настоящую СУБД с архитектурой «клиент-сервер», поддерживающую длительные транзакции, такую как Microsoft SQL Server.

Дополнительная информация

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

Описание средства сжатия и восстановления

Сжатие базы данных

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

Ниже приведен список действий, выполняемых в ходе сжатия базы данных.
  • Реорганизация страниц таблицы с целью их размещения на смежных страницах базы данных. Это позволяет избежать фрагментации таблицы и тем самым повысить быстродействие базы данных.
  • Возврат неиспользуемого пространства, образующегося при удалении объектов и записей. При удалении объектов и записей базы данных пространство, которое они занимали, отмечается как доступное для добавления новых данных. Однако размер базы данных уменьшится только в том случае, если ее сжать. Сжатие следует часто выполнять для баз данных, в которых активно производится добавление, удаление или обновление объектов и записей.
  • Обновление наращиваемых полей счетчика таким образом, чтобы следующее присваиваемое значение на единицу превышало максимальное значение в оставшихся записях. Например, если все записи базы данных были удалены, после ее сжатия значение счетчика при добавлении следующей записи будет равно 1. Если максимальное значение счетчика равняется 50, после сжатия базы данных при добавлении следующей записи поле счетчика будет иметь значение 51. Это верно, даже если записи со значением поля счетчика, превышающим 50, ранее были добавлены в базу данных, но были удалены перед сжатием.
  • Регенерация статистики таблиц, использующейся при оптимизации запросов. Со временем такая статистика устаревает. Как правило, это происходит из-за отката транзакций или неправильного закрытия базы данных в результате перебоев с питанием или отключения компьютера до полного завершения работы программы, использующей Microsoft Jet.
  • Пометка всех запросов для их повторной компиляции при следующем выполнении запроса. Это важно, поскольку вследствие изменения статистики базы данных составленный ранее запрос может иметь неточный план запроса.
Восстановление базы данных

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

Что нужно проверить перед запуском средства сжатия и восстановления

Прежде чем запустить для базы данных средство сжатия и восстановления, выполните перечисленные ниже действия.
  • Убедитесь в том, что на жестком диске хватит места для хранения исходной и сжатой версий базы данных Access. Иначе говоря, объем свободного места на диске должен как минимум вдвое превышать размер базы данных Access. Если свободного места на диске не хватает, удалите с него какие-либо ненужные файлы или, если такое возможно, переместите базу данных Access на диск с большим объемом свободного места.
  • Убедитесь в наличии разрешений на открытие и выполнение, а также монопольный доступ к базе данных Access. Если вы являетесь владельцем базы данных, предоставьте эти разрешения. Если владельцем является другой пользователь, свяжитесь с ним, чтобы получить эти разрешения.
  • Убедитесь в том, что база данных Access не открыта другим пользователем.
  • Убедитесь в том, что база данных Access не располагается в общей сетевой папке с доступом только для чтения и что для ее файла не задан атрибут «только для чтения».

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

Ниже описан общий способ восстановления поврежденной базы данных.
  1. Создайте резервную копию поврежденного файла базы данных (MDB).
  2. Удалите файл с расширением LDB, если таковой имеется. Перед удалением этого файла необходимо закрыть соответствующий файл с расширением MDB.

    Файл с расширением LDB используется для идентификации заблокированных записей в совместно используемой базе данных, а также пользователя, который их заблокировал. Если база данных используется совместно, при создании файла LDB ему присваивается имя соответствующей базы данных (файла MDB). Например, при открытии (для совместного использования) базы данных Northwind.mdb, расположенной в папке C:\Msoffice\Access, в этой же папке автоматически создается файл с именем Northwind.ldb. Файл LDB автоматически удаляется после того, как с базой данных завершает работу последний пользователь. Исключения из этого правила представляют ситуации, когда последний пользователь не имеет разрешений на удаление для папки с файлом MDB и когда база данных повреждена. В файле LDB содержится список пользователей, работающих с базой данных в данный момент.
  3. Запустите средство сжатия и восстановления. Для этого выполните перечисленные ниже действия.
    1. Если база данных открыта, закройте ее.
    2. В меню Сервис выберите пункт Служебные программы, а затем — пункт Сжать и восстановить базу данных.
    3. В диалоговом окне База данных для сжатия выберите файл, который требуется сжать, и нажмите кнопку Сжать.
    4. В диалоговом окне Сжатие базы данных под именем введите новое имя файла и нажмите кнопку Сохранить.

      Если операция сжатия и восстановления не увенчается успехом, на экране появится соответствующее сообщение. Это означает, что повреждения базы данных настолько значительны, что ее невозможно восстановить.
  4. Если восстановить поврежденную базу данных с помощью описанных выше действий не удается, попробуйте создать новую базу данных и по очереди импортировать в нее объекты из старой базы данных. Затем воссоздайте связи. Данный способ позволяет устранить проблемы с поврежденными системными таблицами базы данных.

    Примечание. Импортировать страницы доступа к данным с помощью мастера импорта невозможно. Вместо этого необходимо открыть имеющуюся страницу доступа к данным в новой базе данных. Для этого выполните перечисленные ниже действия.
    1. В окне базы данных в группе Объекты выберите пункт Страницы.
    2. Нажмите кнопку Создать.
    3. В диалоговом окне Новая страница доступа к данным щелкните пункт Существующая веб-страница и нажмите кнопку ОК.
    4. В окне Поиск веб-страницы найдите место хранения страницы доступа к данным.
  5. Если повреждена таблица, и в результате выполнения предыдущих действий повреждение не было устранено, попробуйте применить следующий способ.
    1. В Microsoft Access экспортируйте таблицу в файл ASCII (текст с разделителями). Дополнительные сведения см. в разделе «Экспорт данных или объектов базы данных» справочной системы Microsoft Access.
    2. Удалите все связи, в которых задействована данная таблица, а затем удалите таблицу из базы данных.
    3. Выполните сжатие базы данных.
    4. Воссоздайте таблицу и все связи, в которых она была задействована.
    5. С помощью текстового редактора найдите в файле ASCII поврежденные или подозрительные данные и удалите соответствующие записи. Сохраните файл в текстовом формате ASCII.
    6. Импортируйте файл ASCII в созданную таблицу. Дополнительные сведения см. в разделе «Импорт и связывание данных и объектов базы данных» справочной системы Microsoft Access.
    7. Заново введите все записи, которые пришлось удалить.
  6. При повреждении формы или отчета поврежденными могут оказаться либо сама форма или отчет, либо один или несколько элементов управления формы или отчета. В этом случае можно удалить форму или отчет, а затем импортировать их из резервной копии базы данных либо воспользоваться одним из приведенных ниже способов.
    • Если повреждена сама форма или отчет, создайте новую форму или отчет и скопируйте элементы управления из исходной формы или отчета.
    • Если поврежден элемент управления формы или отчета, создайте новую форму или отчет, и воссоздайте элементы управления в новой форме или отчете. Лучше всего воссоздать все элементы управления, так как определить, какие из них повреждены, не представляется возможным.
  7. При повреждении макроса или модуля поврежденными могут оказаться сам макрос или модуль либо содержимое макроса или модуля. В этом случае можно удалить макрос или модуль, а затем импортировать их из резервной копии базы данных либо воспользоваться одним из приведенных ниже способов.
    • Если поврежден сам макрос или модуль, создайте новый макрос или модуль, а затем скопируйте в него содержимое исходного макроса или модуля.
    • Повреждения могут затрагивать внедренные в модуль знаки, которые не входят в набор ASCII. В этом случае сохраните модуль как текстовый файл, удалите все поврежденные и подозрительные данные, а затем заново загрузите текстовый файл в новый модуль.
    • Если повреждено содержимое макроса или модуля, необходимо создать новый макрос или модуль, а затем воссоздать содержимое исходного макроса или модуля.
Если в результате выполнения этих действий повреждение не было устранено, вероятно, база данных не подлежит восстановлению. В таком случае следует восстановить базу данных из последней резервной копии или воссоздать базу данных.

В крайнем случае можно обратиться за услугами по восстановлению баз данных Microsoft Access к консультантам. Поскольку подобные услуги являются достаточно специализированными, самый эффективный способ найти такого консультанта — опубликовать сообщение в группе новостей Интернета по Microsoft Access в разделе «Third Party and User Groups» («Группы сторонних компаний и пользователей») по следующему адресу:
microsoft.public.access.3rdpartyusrgrp
Дополнительные сведения о группах новостей Интернета по Microsoft Access см. в следующей статье базы знаний Майкрософт: Дополнительные сведения см. в следующей статье базы знаний Майкрософт:
287756 После сжатия базы данных поле счетчика имеет предыдущее значение (Эта ссылка может указывать на содержимое полностью или частично на английском языке)

Причины повреждения файлов MDB

Повреждение файла MDB чаще всего вызывается тремя указанными ниже причинами.
  • Прерывание операции записи
  • Сбой в работе сетевого оборудования
  • Открытие и сохранение файла MDB в другой программе

Прерывание операции записи

Программу Access всегда следует закрывать, выбирая в меню Файл пункт Выход или Закрыть. При неправильном завершении работы Access во время записи данных в открытую базу данных ядро СУБД Jet может отметить базу данных как подозрительную или поврежденную. Это может произойти из-за выключения компьютера вручную без выхода из системы Windows или в результате сбоя в энергоснабжении. В других ситуациях завершение работы Access может не производиться, однако при записи данных в файл базы данных на жестком диске все равно возникает ошибка. Это может произойти, например, из-за конфликта данных в сети или сбоя жесткого диска. При возникновении любой из этих ситуаций ядро СУБД Jet может отметить базу данных как потенциально поврежденную.

В начале операции записи ядро СУБД Jet устанавливает флаг, который снимается после завершения операции. В случае прерывания операции записи флаг остается установленным. При попытке повторного открытия базы данных Jet определяет, что флаг установлен, и сообщает о повреждении базы данных. В большинстве случаев база данных при этом не повреждена, однако установленный флаг оповещает Jet о ее возможном повреждении. В большинстве таких случаев проблему можно решить, сжав или восстановив базу данных (либо выполнив обе этих операции). К счастью, существуют способы, позволяющие идентифицировать пользователя и рабочую станцию, которые отметили файл как подозрительный. С помощью Microsoft Visual Basic для приложений в программе Access можно вывести список пользователей, подключившихся к определенной базе данных.
208449 Группа новостей по Access доступна в Интернете (Эта ссылка может указывать на содержимое полностью или частично на английском языке)
Дополнительные сведения о том, как это сделать, см. ниже, в разделе «Как узнать, какие пользователи или рабочие станции отметили файл как подозрительный».

Сбой в работе сетевого оборудования

Иногда причины повреждения базы данных не имеют отношения к ядру СУБД Jet. Например, повреждение может быть вызвано сбоем в работе сетевого оборудования, а именно неполадками в цепочке оборудования между компьютером, на котором расположена база данных, и компьютером, на котором она открыта. Неисправными могут оказаться сетевые адаптеры, сетевые кабели, маршрутизаторы, концентраторы и другое оборудование.

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

Открытие и сохранение файла MDB в другой программе

Восстановить файл MDB, который был открыт и сохранен в другой программе, нельзя. Например, файл MDB можно открыть и сохранить в программе Microsoft Word, но после этого его можно будет восстановить только из резервной копии. Если файл MDB был случайно открыт в другой программе, ни в коем случае не сохраняйте его. На самом деле открывать файлы MDB в других программах не имеет смысла, потому что в результате на экране можно будет увидеть только бессмысленный набор знаков.

Как узнать, какие пользователи или рабочие станции отметили файл как подозрительный

При выяснении причины повреждения базы данных иногда полезно узнать, кто с ней работает. С помощью Microsoft Visual Basic для приложений в программе Access 2002 или Access 2003 можно получить список пользователей, подключившихся к определенной базе данных.
Дополнительные сведения о том, как это сделать, см. в следующей статье базы знаний Майкрософт:
285822 Как узнать, кто работает с базой данных, с помощью средства Microsoft Jet UserRoster в Access 2002 или Access 2003 (Эта ссылка может указывать на содержимое полностью или частично на английском языке)

Меры по предотвращению повреждения баз данных

Чтобы предотвратить повреждение баз данных, соблюдайте приведенные ниже рекомендации.
  • Не допускайте отключения электропитания во время операций записи баз данных, поскольку из-за этого база данных может быть отмечена как подозрительная.
  • Не допускайте прерывания сетевых подключений.
  • Не допускайте некорректного завершения подключений Microsoft Jet из-за отключения электроэнергии, завершения работы программы вручную или с помощью диспетчера задач и т.д.
  • При программировании закрывайте все открытые объекты DAO и ADO, такие как Recordset, QueryDef, TableDef и Database.
  • Критические системные ошибки практически всегда приводят к некорректному завершению работы. Если такие ошибки возникают во время работы с базой данных, их необходимо устранять до того, как база данных будет повреждена настолько, что ее уже нельзя будет открыть или восстановить. Дополнительные сведения о том, как это сделать, и соответствующие образцы кода см. в следующей статье базы знаний Майкрософт:
    285822 Как узнать, кто работает с базой данных, с помощью средства Microsoft Jet UserRoster в Access 2002 (Эта ссылка может указывать на содержимое полностью или частично на английском языке)
    Дополнительные сведения о критических системных ошибках см. в следующей статье базы знаний Майкрософт:
    294301 ACC2002: Устранение критических системных ошибок в программе Access 2002, работающей под управлением системы Microsoft Windows 2000 (Эта ссылка может указывать на содержимое полностью или частично на английском языке)
  • Выполняйте сжатие базы данных часто.
  • Не используйте протокол IPX на сервере под управлением Microsoft Windows NT с подключенными по сети базами данных Jet и клиентскими компьютерами, работающими под управлением Microsoft Windows 95 с протоколами IPX/SPX. Вместо этого следует использовать протоколы TCP/IP на сервере под управлением Windows NT и двойной стек протоколов IPX и TCP/IP на клиентах Win95 (использование системы Windows NT с клиентами, работающими под управлением Windows NT с протоколами IPX/SPX, а также системы Novell с любыми клиентами не приводит к возникновению проблем).
  • Не выполняйте большое количество операций открытия и закрытия базы данных в цикле (после выполнения более 40 000 таких операций подряд возможно повреждение базы данных).

Специальное примечание о преобразованных базах данных

В версиях программы Access, предшествовавших версии Access 2002, при появлении ошибок в ходе обновления базы данных до текущей версии не было простого способа, позволяющего узнать, какие объекты из-за этого пострадали.

Если же подобные ошибки возникают в программе Microsoft Access 2002 или более поздней версии, сведения о них можно просмотреть, открыв таблицу «Ошибки преобразования» в новом файле Access. Эта таблица содержит перечисленные ниже столбцы.

Тип объекта. Тип объекта базы данных, в котором обнаружена ошибка, или «Database», если обнаружена ошибка, не специфичная для конкретного типа объектов.

Имя объекта. Имя объекта, в котором обнаружена ошибка. Если в ходе преобразования базы данных возникает ошибка компиляции, имя модуля, содержащего ошибку, не указывается.

Описание ошибки. Нажав клавиши SHIFT+F2, можно просмотреть полное описание ошибки.

Ссылки

Для получения дополнительных сведений о восстановлении баз данных выберите в меню Справка пункт Справка: Microsoft Office Access, введите в поле помощника Office или мастера ответов строку восстановление и нажмите кнопку Поиск. Дополнительные сведения об устранении неполадок с базами данных в ранних версиях Access см. в следующих статьях базы знаний Майкрософт:
209137 Восстановление поврежденной базы данных Jet 4.0 в Access 2000
279334 Восстановление поврежденной базы данных Jet 3.5 (Эта ссылка может указывать на содержимое полностью или частично на английском языке)
109953 Восстановление поврежденных баз данных Jet 3.0 и баз данных более ранних версий (Эта ссылка может указывать на содержимое полностью или частично на английском языке)
284152 Устранение критических системных ошибок в программе Access 2002, работающей под управлением системы Windows Millennium (Эта ссылка может указывать на содержимое полностью или частично на английском языке)

Свойства

Код статьи: 283849 - Последний отзыв: 9 февраля 2007 г. - Revision: 6.2
Информация в данной статье относится к следующим продуктам.
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
Ключевые слова: 
kbcorrupt kbtshoot kbhowto KB283849

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com