История одного восстановления БД(MS SQL Server 2005). Часть 2
Продолжаю тему восстановления БД, начатую тут. Закончилось всё довольно таки успешно.
Итак…. Не помог мне
ALTER DATABASE ‘DatabaseName’SET SINGLE_USER
DBCC CHECKDB(‘DatabaseName’, REPAIR_REBUILD)
ALTER DATABASE ‘DatabaseName’ SET MULTI_USER
не помог и
DBCC CHECKDB(‘DatabaseName’, REPAIR_ALLOW_DATA_LOSS)
Так как удалось найти битую таблицу(в ней как раз наибольшее кол-во строк), принялся её реанимировать нестандартными способами. Попробовал сделать выборку данных- выкинуло в ошибку, но успело вернуть несколько миллионов записей. Попробовал сделать выборку, с ключом desc — таким образом вытащил ещё кусок данных с конца таблицы. Кстати, select стал выбирать больше записей после того как убил все индексы кроме Primary Key. Пошаманив ещё несколько часов и не получив желаемого результата, создал клон битой таблицы без данных и с помощью:
insert into tablename(fields) select top КОЛ-ВО_СТРОК1 * from tableoriginal order by fieldnamePK asc
insert into tablename(fields) select top КОЛ-ВО_СТРОК2 * from tableoriginal order by fieldnamePK desc
заполнил новую таблицу данными. Старую удалил, а эту переименовал так как нужно.
Должен сказать, что таким образом удалось восстановить почти все записи.
Для остальных БД выполнил DBCC CHECKDB() , откуда узнал какие из таблиц битые. Им помогла DBCC DBReidex(‘Tablename’) для битых таблиц.
На этом всё и закончилось.
Желаю вам надёжных хардов и меньше подобных проблем!