gifts2017

Исправление поврежденной базы SQL (Suspect Mode)

Опубликовал Александр Андрющенко (anderson) в раздел Администрирование - Системное

Что делать, если база данных под MS SQL ушла в Suspect Mode?

В своей работе столкнулся с ситуацией, когда рабочая база данных в конце дня ушла в режим "Suspect Mode". А архив был за много часов до этого. Перевести ее нормальный режим, пока не произведена починка базы, не получалось. DBCC checkdb тоже отказывалась запускаться, т.к. база в этом режиме. Замкнутый круг? Славо богу нашлась приведенная в этом посте статейка.

Для начала необходимо перевести базу данных в режим EMERGENCY:

EXEC sp_resetstatus 'yourDBname';
ALTER DATABASE yourDBname SET EMERGENCY

Потом выполнять тестирование базы:


DBCC checkdb('yourDBname')
ALTER DATABASE yourDBname SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DBCC CheckDB ('yourDBname', REPAIR_ALLOW_DATA_LOSS)
ALTER DATABASE yourDBname SET MULTI_USER

 

 PS: Этот пост можно считать продолжением http://www.infostart.ru/public/59390/

См. также

Вознаграждение за ответ
Сумма: 0 $m
Добавили:
Сергей Сухих (ssega) (0.65 $m)
Подписаться Добавить вознаграждение

Комментарии

1. Валерыч (Valerich) 26.10.09 17:04
2. Сергей Кобяков (Serjik78) 26.10.09 17:52
Плюсег, сам не сталкивался, но а вдруг? ;)
3. ninch (ninch) 28.10.09 05:36
Сталкивался. Есть такая неприятная весч. Теперь описание можно будет найти тут. Спасибо
4. Алексей Качко (WideSmile) 28.10.09 12:27
Столкнулся с такой ситуацией - после непредвиденного отключения электричества старые УПСники не успели корректно вырубить серваки.
Воспользовался похожим алгоритмом, база восстановилась, сверил все остатки - всё в порядке. Однако, до тех пор пока не выполнил тестирование и исправление средствами 1С, а также полную реиндексацию - преследовали мелкие глюки (проваливались джобы SQL, пользователей выбивало без сообщения об ошибке, частые зависания сеансов). Сейчас всё в порядке, уже месяца три прошло - всё работает адекватно.
MsDjuice; +1 Ответить
5. Алексей Качко (WideSmile) 28.10.09 12:28
з.ы. проверяйте лучше УПСники - нервов уйдёт меньше ;-)))
6. Валерий Дубовой (Valerich) 26.11.09 06:59
упала база msdb - перешла в этот веселый режим
бэкапы ее есть, но как из них восстановиться непонятно - suspend mode
при попытке перевести ее в режим EMERGENCY пишет
Msg 5058, Level 16, State 6, Line 2
Option 'EMERGENCY' cannot be set in database 'msdb'.

И как с этим бороться???
7. Александр Андрющенко (anderson) 26.11.09 08:01
(6) попробуйте запустить сервер в монопольном режиме sqlservr.exe -m -c. А дальше с помощью SQLCMD.

ЗЫ: сам не пробовал, рассказывали на курсах для восстановления базы master, может и для msdb подойдет
8. Александр Андрющенко (anderson) 26.11.09 08:04
9. motherf 18.10.11 20:07
Начал с DBCC. Помогло реально. Большое спасибо. А то не знал, с какой стороны подступиться, сплошной отлуп от SQL сервера.

База перешла в режим после отключения питания. Виноват был не УПС, а Пилот, как оказалось.
10. Павел Королев (Geqsogen) 25.10.11 20:42
Помогло после крушения рэйда и когда поздно заметили пропажу бэкапов. Но сначала надо было собрать еще инфы, чтобы восстановить базу на MSSQL 2005 SP4, которая помечена Suspend.
Пишу коротко по делу - только в такой последовательности удалось все сделать:

Use master
go
sp_configure 'allow updates', 1
go
---Execute---
reconfigure with override
---Execute---
select status from sysdatabases where name = 'DataBaseName'
---Execute---
EXEC sp_resetstatus 'DataBaseName';
ALTER DATABASE DataBaseName SET EMERGENCY
---Execute---
alter database DataBaseName set EMERGENCY, SINGLE_USER
---Execute---
dbcc checkdb ('DataBaseName', REPAIR_ALLOW_DATA_LOSS)
---Execute---
alter database DataBaseName set ONLINE, MULTI_USER
---Execute---
Use master
go
sp_configure 'allow updates', 0
go
---Execute---
reconfigure with override

ПыСы После "dbcc checkdb" ругнулся на то что не может создать лог файл - пришлось создать папку, которую он просил и повторить с этого пункта еще раз (база раньше стояла в другом месте)
Gruuush; insurgut; Zircool; IT-стратегия; K_A_O; +5 Ответить
11. Andrey Dyak (electronik) 19.04.12 15:37
Воспользовался похожим алгоритмом, база восстановилась, сверил все остатки - всё в порядке. Однако, до тех пор пока не выполнил тестирование и исправление средствами 1С, а также полную реиндексацию - преследовали мелкие глюки (проваливались джобы SQL, пользователей выбивало без сообщения об ошибке, частые зависания сеансов). Сейчас всё в порядке
12. Андрей - (Motor24) 06.08.13 16:14
Спасибо - вчера буквально столкнулся. Оказывается связка SQL 2005+1С 7.7 ещё весьма популярна

(11)"Однако, до тех пор пока не выполнил тестирование и исправление средствами 1С, а также полную реиндексацию - преследовали мелкие глюки"
Главное, что восстановилось основное, а тестирование после этого уже радостная мелочь. Вчера в suspect легла 12-гиговая база, было очень весело :)
13. Сергей Сухих (ssega) 06.08.14 09:23
(6) Valerich,

тоже было такое на SQL2000SP4 помогла следующая последовательность команд:

выключем СКЛ, удаляем лог, включеам СКЛ, затем:

1.
use master
go
sp_configure 'allow updates', 1
reconfigure with override
go


2.
upd ate sysdatabases set status=32768 where name = 'msdb'
go


3.
DBCC REBUILD_LOG('msdb', 'C:\Program Files (x86)\Microsoft SQL Server\MSSQL\Data\msdb.ldf')
go


4.
use msdb
go
alt er database msdb se t SINGLE_USER with rollback immediate
go
use msdb
go
DBCC CHECKDB('msdb', REPAIR_REBUILD)
go


5.
use master
go
sp_dboption 'msdb', 'single user', 'false'
go


6.
use master
go
sp_configure 'allow updates', 0
reconfigure with override
go
14. Дмитрий Жиляков (Zhilyakovdr) 23.12.15 21:10
15. Максим Арендаренко (Larkin) 07.04.16 20:57
Плюс в карму!!! Огромное спасибо!
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа