1. Останавливаем службу SQL Server и копируем файлы базы данных (*.mdf и *.ldf) в другую папку, чтобы можно было восстановить их в случае неудачи
2. Делаем Detach database (отсоединить базу данных), удаляем журнал транзакций (файл с расширением ldf) и делаем Attach database (присоединить базу данных). В мастере выбираем наш mdf файл и жмем ОК
Если mdf файл не поврежден, то он успешно присоединится и мы увидим нашу базу в диспетчере объектов целую и невредимую. Радуемся успешному восстановлению (этот вариант сработает только если mdf файл не поврежден, поэтому срабатывает не всегда)
Присоединить один mdf файл без журнала транзакций, если у вас SQL 2005 и выше, можно командами
EXEC sp_attach_single_file_db @dbname='db_name', @physname='D:\Db\db_name.mdf'
или
CREATE DATABASE db_name ON (filename = 'd:\db\db_name.mdf') FOR ATTACH_REBUILD_LOG
Если не получилось, то создаем новую базу данных с таким же именем, останавливаем сервер. Подменяем файл mdf файлом от нашей базы, стартуем службу SQL Server и открываем Query analyzer(SQL 2000) или Management studio(SQL 2005/2008) в зависимости от нашей версии сервера
Пишем следующее:
ALTER DATABASE db_name SET EMERGENCY, SINGLE_USER GO
где вместо db_name пишем имя своей БД
Жмем F5
После этого наша БД должна быть видна в статусе EMERGENCY
Приступаем к восстановлению
DBCC CHECKDB('db_name', REPAIR_ALLOW_DATA_LOSS)
GO
В SQL 2005 и выше нет инструкции REBUILD_LOG, вместо этого выполняется CHECKDB с параметром REPAIR_ALLOW_DATA_LOSS. После того как сервер закончит выполнять запрос и вернет результат, меняем REPAIR_ALLOW_DATA_LOSS на REPAIR_REBUILD и выполняем запрос еще раз, это должно убрать оставшиеся ошибки в базе данных. После всего этого наша база становится в нормальное состояние и уже доступна для работы с ней, но только в однопользовательском режиме, поэтому завершаем наш процесс возвращением базы в многопользовательский режим
Пишем:
alter database db_name set ONLINE, MULTI_USER GO
Все. База онлайн и готова к работе. И не забываем делать бэкапы.

















