gifts2017

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

Опубликовал Sergey Wind (qSerik) в раздел Администрирование - Системное

Если базу силой 1С не восстановить

Добрый день, коллеги. На днях столкнулся с поврежденной базой серверной (MS SQL 2005), которая работает со сбоем, и восстановить путем тестирования-исправления невозможно (вылетает ошибка контрольной суммы). При этом база не выгружается в файл - та же ошибка. Путем многих попыток - восстановить базу так и не удавалось, единственное что помогло - восстановить путем тестирования самого SQL. Вот команды:

DBCC CHECKDB ('database', REPAIR_FAST)

DBCC CHECKDB ('
database', REPAIR_REBUILD) 

Если предыдущие две не помогли, тогда уже можно применять третью, но она несет за собою возможную потерю данных, и желательно применять в безнадежном случае уже.

DBCC CHECKDB ('database', REPAIR_ALLOW_DATA_LOSS)

 

Если команда не выполняется из-за не однопользовательского режима, тогда перейти можно по команде

alter database db-name set SINGLE_USER

 

Ясно что перед любыми тестами нужно сделать резервную копию (средствами SQL, если выгрузка не делается.

Данную статью написал так как потратил очень много времени на поик данных комманд и соответственно за ваши плюсы, надеюсь кому-то она поможет в тяжелый момент.

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

1. Александр Андрющенко (anderson) 26.10.09 11:13
Если будет уместно, то в продолжение этой темы. Suspect Mode базы MS SQL
2. Александр Андрющенко (anderson) 26.10.09 11:14
3. Михаил Усков (MMF) 26.10.09 14:25
мощная статья. теперь еще нужна статья про то, как выполнить эти мега-команды, можно назвать "выполнение TSQL для чайников". И продолжить цикл статьей "Как запустить SQL Server Management Studio для полных идиотов"
German; sckif; +2 Ответить 3
4. Валерыч (Valerich) 26.10.09 17:28
(3) не стоит так резко. Ведь не все хорошо знакомы с SQL сервером на уровне именно таких команд. Кому-то может пару часов времени сэкономит на поиск лекарства от такой же проблемы.
nviharev; Motor24; +2 Ответить
5. halushka (halushka) 27.10.09 07:37
(3) зря. Хотя бы потому что не у всех стоит SQL SMS. Допустим ее нет ? Много уж чего-то админов клик-only развелось... Плюс однозначно. Проблема описана. Решение тоже.
6. ninch (ninch) 28.10.09 05:39
Все нормально, только как всегда голые команды. А описания нету. Тупо выполните и получите результат.
7. Максим Князев (mad_maksim) 28.10.09 09:51
Если уж браться за такой вопрос, то нужны готовые скрипты. За пять минут можно сделать, а людям приятно будет. Я в свое время команды нашел за 5 минут, а запускал их 30, так как не силен в SQL.
Да, перевод в режим single обязателен, это раз. Вывод из этого режима после работы также обязателен, это два.
8. Андроид (Андроид) 30.10.09 17:17
(3) Готов в продолжении этой статьи написать для "чайников" с картинками куда и как вставить эти функции....
9. Марат (Атеист33) 17.11.09 07:05
Скажу одно : " каждый когда - то начинает с азов и как правило ошибок делают более всего или начинающие (метод проб и ошибок) или же те кто уже "заматерел " - считая что они знают много" много знаний не бывает .

любая работа и поиск решения проблем - это положительный результат .

сам вот не зная в 1С как получить кол- во строк в текстовом файле стал писать код анализируя перевод строки - а мог бы всего - навсего использовать метод " КоличествоСтрок() "

хотя и то и другое оказалось полезным
10. Павел Королев (Geqsogen) 25.10.11 20:41
Помогло после крушения рэйда и когда поздно заметили пропажу бэкапов. Но сначала надо было собрать еще инфы, чтобы восстановить базу на 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" ругнулся на то что не может создать лог файл - пришлось создать папку, которую он просил и повторить с этого пункта еще раз (база раньше стояла в другом месте)
11. c (sergoqwe) 23.07.13 15:26
спасибо, помогло, вот только интересует еще одно. в другой статье рекомендуют запускать после этого этот же запрос с параметром REPAIR_REBUILD. На сколько данная рекомендация правильная?
12. Андрей - (Motor24) 06.08.13 16:11
Спасибо - вчера буквально столкнулся. Оказывается связка SQL 2005+1С 7.7 ещё весьма популярна
13. c (sergoqwe) 18.04.14 14:47
14. Alex z (kazann) 28.01.15 10:13
Интересно вследствие чего база переходит в такой режим?
15. c (sergoqwe) 21.07.15 10:13
(14) kazann, как пример очередное отключение питания, при запуске SQL после аварийного завершения
16. Сергей Племянников (Serge_ASB) 16.05.16 16:43
Добрый день.
С утра БД (УТ 10.3 на MS SQL 2008R2 под 1С 8.3.7.1845) выдало:
"Ошибка формата потока".
Тестирование SQL средствами показало 0 ошибок.
В конфигуратор 1С не заходит с той же ошибкой.
1С Предприятие тоже не запускается.
Остальные БД на том же SQL сервере не пострадали.
Какие есть еще варианты, чтобы понять, где копать / вытащить документы?

P.S. последний БэкАп был на предыдущий день. С него восстановились.
Хочется понять, что сделать, чтобы подобного не возникало впредь?

Накануне перепроводил массово документы в целях правильного ведения регистра Партий товаров на складах. В какой-то момент вышел - часть процесса не видел.
Возможно ли, что в процессе проведения случилось что-то, что могло внести ошибку в данные?
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа