СУБД SQL Server 2005. Методики восстановления поврежденной базы данных

На сегодняшний день сложно представить какое-либо предприятие, которое для своих нужд не использует баз данных. Одно из достаточно эффективных решений это СУБД MS SQL Server 2005 и более новые версии, обладающая большими возможностями для работы с базами данных. При возникновении аварийной ситуации, например отказа дисковой подсистемы, где расположена база данных, СУБД MS SQL Server 2005 помечает страницы, к которым был затруднен доступ, как Restore Pending, после чего отказывается использовать их. Восстановление базы посредством стандартных средств СУБД SQL Server 2005 DBCC CheckDB (‘имя_базы’, REPAIR_ALLOW_DATA_LOSS) зачастую уничтожает немалое количество данных в базе. Во многих случаях такая методика восстановления работоспособности базы данных недопустима.

В тех случаях, когда по тем или иным причинам не подходят стандартные методы решения проблем с базами данных, стоит глубже ознакомиться с ее структурой. Основными единицами организации пространства в базе данных являются экстенты, их размер 64кБ или 8 страниц по 8192 байта. В свою очередь экстенты бывают однородные и со смешанным содержимым. Однородный экстент – это когда все страницы в нем принадлежат одному объекту базы. Смешанное содержимое – это когда в одном экстенте представлены страницы разных объектов. Организация страницы следующая: первые 64 байта – это служебный заголовок страницы, где содержится информация о номере страницы, номер страницы, с которой идет ссылка на текущую страницу, номер следующей страницы в базе данных, принадлежащей данному объекту, атрибуты ошибок, контрольная сумма и т.п., 32 байта зарезервированы. Остальные 8096 байт отводятся непосредственно для данных объекта.

Как показывает анализ, база данных, прочитанная с проблемного носителя информации, нередко содержит в себе некоторое количество страниц, где в атрибутах ошибок проставлен код ошибки Restore Pending. В этих случаях предварительно проводится поиск всех страниц в базе, содержащих данный код ошибки. Далее проводится анализ на предмет того, каким объектам базы принадлежат данные страницы. Проверяется корректность содержимого страниц, и, если содержимое корректно, то достаточно сбросить код ошибки Restore Pending и пересчитать контрольную сумму страницы. Если страница серьезно повреждена, то нужно оценить, насколько велики потери, оценить структуру объекта и внести соответствующие правки в поврежденные места, чтобы некорректные данные не приводили к аварийному завершению приложения, использующего базу данных, и пересчитать контрольную сумму страницы. Если содержимое страницы полностью повреждено, то необходимо отыскать продолжение объекта и прописать ссылки на предыдущую и следующую страницу, т.е. воссоздать служебный заголовок страницы, заполнить содержимое страницы данными, которые не вызовут аварийного завершения приложения, использующего базу данных, и сформировать контрольную сумму. Отдельно стоит отметить момент заполнения данными поврежденных участков. Здесь необходимо учитывать особенности объекта, использующего данную страницу, чтобы данные-заполнители были хорошим маркером, по которому их можно найти и уже откорректировать потери в приложении, использующем базу данных.

 

 

Павел Янчарский

 

Перепечатка материалов разрешена только с указанием активной ссылки на оригинал статьи

Поделиться
|