Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Непонятно, делать с Suspect  [new]
SergMich
Guest

Всем привет. Может кто-то поможет. Ситуация следующая. В Enterprise Manager на базе выводится текст, что база (NameDatabaseSuspect). Кто нибудь реально пробовал подымать такую базу. У меня выдало сообщение после того, как случайно был затерт файл с транзакциями данной базы. Срочно нужно помощь. Пишите все кто с этим сталкивался.
18 июн 03, 08:46    [233101]     Ответить | Цитировать Сообщить модератору
 Re: Непонятно, делать с Suspect  [new]
Белов Владимир
Member

Откуда: Москва
Сообщений: 1718
1. Попробовать использовать sp_resetstatus, но скорее всего не поможет
2. Можно попробовать изменить поле status в таблице master..sysdatabases для данной БД.
3. В факеесть тема, касаемо того, что делать если Вы "потеряли" файл лога. Просто не хочется здесь повторяться.
18 июн 03, 09:13    [233124]     Ответить | Цитировать Сообщить модератору
 Re: Непонятно, делать с Suspect  [new]
KANDed
Member

Откуда: Сибирь-Матушка
Сообщений: 1716
Останови сервер, сохрани оставшийся файл и тогда можешь экспериментировать.
Скорее всего, все будет нормально, если в FAQ прочтешь, как присоединить базу без файла лога.
Если не получится, то вот еще стандартный совет:

База в состоянии «Suspect»


Чаще всего это происходит после потери сервером базы при удалении, переносе файлов базы или смене имени диска.
В SQL2K все нормализуется после возврата всех файлов на свое место (при остановленном сервере).
В 6.5 все хуже. Могут быть проблемы. Само-собой не рассосется.
BOL -> Index -> suspect status
Там описано, как выводить БД из suspect состояния

Есть доп. прцедура sp_resetstatus. Ее текст по моему приведен в BOL.
USE master
go
sp_configure 'allow updates', 1
GO
RECONFIGURE WITH OVERRIDE
GO
sp_resetstatus NNNNN
GO
sp_configure 'allow updates', 0
GO
RECONFIGURE WITH OVERRIDE
GO

Status bits, some of which can be set by the user with sp_dboption (read only, dbo use only, single user, and so on):
1 = autoclose; set with sp_dboption.
4 = select into/bulkcopy; set with sp_dboption.
8 = trunc. log on chkpt; set with sp_dboption.
16 = torn page detection, set with sp_dboption.
32 = loading.
64 = pre recovery.
128 = recovering.
256 = not recovered.
512 = offline; set with sp_dboption.
1024 = read only; set with sp_dboption.
2048 = dbo use only; set with sp_dboption.
4096 = single user; set with sp_dboption.
32768 = emergency mode.
4194304 = autoshrink.
1073741824 = cleanly shutdown.

После ручного вывода базы из состояния Suspect, я первым делом попытался бы перекачать данные в пустую базу аналогичной структуры.

Уловка, позволяющая обойти критическое (Emergency) состояние базы данных и особенности DUMP TRANSACTION WITH NO_LOG
https://www.sql.ru/subscribe/047.shtml

Как восстанавливать работоспособность SQL Server, если база данных Tempdb в состоянии Suspect
www.sql.ru/articles/mssql/01062801HowRecoverSQLServerAfterTempdbIsMarkedSuspect.shtml
18 июн 03, 09:16    [233131]     Ответить | Цитировать Сообщить модератору
 Re: Непонятно, делать с Suspect  [new]
SerfMich
Guest
пробовал я делать то что Bol. база становиться доступной. но я немогу создать другой tranzactional лог
18 июн 03, 09:40    [233167]     Ответить | Цитировать Сообщить модератору
 Re: Непонятно, делать с Suspect  [new]
SergMich
Guest
Спасибо Glory за то что раскопал такой рецепт. Все класно получилось.
"Рецепт" от Деда Маздая (мной проверено лишь на SQL2000)"
1. Создаем новую базу с таким же именем и такимиже по именам и расположению .mdf и .ldf файлами
2. Останавливаем сервер, подменяем файл .mdf
3. Стартуем сервер, не обращаем внимания на статус и базы
4. Из QA выполняем скрипт
Use master
go
sp_configure 'allow updates', 1
reconfigure wiyh override
go
4. Там же выполняем
select status from sysdatabases where name = '<db_name>'
и запоминаем/записываем значение на случай неудачи ребилда лога
5.Там же выполняем
update sysdatabases set status= 37268 where name = '<db_name>'
6. Перезапускаем SQL Server
7. В принципе база должна быть видна (в emergency mode). Можно, например, заскриптовать все объекты
8. Из QA выполняем
DBCC REBUILD_LOG('<db_name>', '<имя нового лога с указанием полного пути>'). SQL Server скажет - Warning: The log for database '<db_name>' has been rebuilt.
9. Если все нормально, то там же выполняем
USE '<db_name>'
GO
sp_dboption '<db_name>', 'single_user', 'true'
go
DBCC CHECKDB('<db_name>', REPAIR_ALLOW_DATA_LOSS)
go
10. Если все в порядке, то
sp_dboption '<db_name>', 'single_user', 'false'
go
Use master
go
sp_configure 'allow updates', 0
go

PS
11. Добавляем серверные задания по автоматическому архивированию баз данных, убеждаем начальство в необходимости приобретения необходимого оборудования
18 июн 03, 14:10    [233754]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Непонятно, делать с Suspect  [new]
DmitriyDP
Guest
SergMich,
Ошибка в пункте: >>>>>
5.Там же выполняем
update sysdatabases set status= 37268 where name = '<db_name>'
<<<<<
Правильно: STATUS = 32768
20 сен 11, 13:48    [11305147]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить