bigsloth

Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору OktoHaron Во-первых, посмотрите вот этот пост: http://habrahabr.ru/post/136979/. Возможно все ваши ошибки несерьёзные и полетели только некластерные индексы, тогда их можно будет пересоздать и всё будет окей. Во-вторых, если всё-таки ошибки серьёзные, тогда восстанавливайте из бэкапа. Восстановление возможно ТОЛЬКО в том случае, если у вас есть старый полный бэкап и ВСЕ, АБСОЛЮТНО ВСЕ, бэкапы журналов транзакций. Если все бэкапы есть, ваши действия такие: 1. Пишете в SSMS RESTORE DATABASE [имя вашей базы данных] FROM DISK = 'путь к вашему старому полному бэкапу' WITH REPLACE, NORECOVERY, STATS = 1 , MOVE 'логическое имя файла данных' TO 'путь к физическому месту хранения файла данных' , MOVE 'логическое имя файла журнала' TO 'путь к физическому месту хранения файла журнала' Запускаете выполняться. Опишу параметры: REPLACE - заменяет имеющуюся БД с указанным именем [имя вашей базы данных], если сомневаетесь, укажите имя отличное от имени поверждённой бд - сделаете копию базы, потом, если всё нормально, пересоздадите базу на сервере 1С NORECOVERY - этот параметр оставляет базу в состоянии "восстановления". Вы не сможете к ней подключиться, но сможете накатить на неё бэкапы журнала транзакций STATS = 1 - на вкладке MESSAGES будет отмечаться прогресс выполнения операции с шагом 1 процент, можете поставить 5, 10, сколько вам надо. Можете вообще убрать. MOVE'ы переносят файлы в указанную папку с указанными именами, т.е. их заполнять надо целиком, например MOVE 'myDb' TO 'D:\SQLBase\mydb_something.mdf' 2. После того как операция завершится, БД останется в состоянии restoring. Удаляете то что написано выше и пишете: RESTORE LOG [тоже самое имя бд, которое вы писали выше] FROM DISK = 'путь к самому СТАРОМУ бэкапа лога' WITH NORECOVERY, STATS = 10 RESTORE LOG [тоже самое имя бд, которое вы писали выше] FROM DISK = 'путь к следующему за самым старым бэкапа лога бэкапом' WITH NORECOVERY, STATS = 10 ... RESTORE LOG [тоже самое имя бд, которое вы писали выше] FROM DISK = 'путь к самому ПОСЛЕДНЕМУ (новому) бэкапу лога' WITH RECOVERY, STATS = 10 Обратите внимание, что во всех командах RESTORE LOG, кроме последней, вы пишете WITH NORECOVERY, а в последней RECOVERY. Если вы в последней команде тоже написали NORECOVERY, то вам надо будет выполнить следующую команду, чтобы перевести базу в нормальное состояние (чтобы с ней можно было работать): RESTORE DATABASE [тоже самое имя бд, которое вы писали выше] WITH RECOVERY В общем, ничего сложного в этом нет, но требуется аккуратность и внимательность. Успехов. Ещё раз напомню, что это возможно только при наличии ВСЕХ бэкапов лога, созданных после создания полной резервной копии! Так же, если вы переводили базу в режим simple, либо делали BACKUP LOG ... with truncate_only, ничего не выйдет, увы. Советую вам в любом случае, проверить восстановление на копии. Обратите внимание ещё вот на что. Если в повреждённой базе данных работают пользователи, у вас всё равно будет потеря данных за время от времени создания последней резервной копии журнала транзакций и до "текущего" момента времени. Чтобы этого не произошло, вам нужно будет сделать tail-log backup и именно его восстанавливать с параметром RECOVERY. В этом нет ничего сложного, но моё косноязычие не позволит это доступно объяснить. Прочитайте, если вам это актуально, статью на msdn. Добавлено: Oleg_Kurilin Цитата: После этого запустить DBCC CHECKDB с REPAIR_REBUILD. Если не поможет - два варианта: REPAIR_ALLOW_DATA_LOSS | очень, очень вредный совет. У человека вроде и бэкапы есть, и ошибки ещё непонятно какие, а вы уже рекомендуете ему данные свои похерить. | Всего записей: 239 | Зарегистр. 18-09-2009 | Отправлено: 08:14 18-01-2013 | Исправлено: bigsloth, 08:20 18-01-2013 |
|