Можно ли прочитать данные, если есть ошибки, и залить их в другую БД?

После того, как посыпался жесткий диск, возникли проблемы с БД на SQL 2012. Программа Астрал (собственно ее БД), перестала запускаться. Подключаюсь SQL Managment Studio, делаю сканирование БД, получаю CHECKDB обнаружил 244 ошибок размещения и 1 ошибок согласованности в базе данных. REPAIR_REBUILD не принесли никаких результатов, но.. Имеется рабочая резервная копия БД, месяцем ранее (к сожалению раньше нет) и у меня возникает вопрос, можно ли как то попытаться выгрузить данные за последний месяц из "битой" БД и загрузить ее в рабочую, но неактуальную? Если, конечно, эти данные неповреждённые.
  • Вопрос задан
  • 733 просмотра
Пригласить эксперта
Ответы на вопрос 2
Mikhail_E
@Mikhail_E
1С, SQL
!Рекомендую сначала сделать физическую копию файлов БД (mdf,ldf)!
Как вариант определить битые таблицы по ID, и попробовать Checktable на конкретных таблицах сначала Repair_rebuild, если СУБД ответит что минимальный уровень - REPAIR_ALLOW_DATA_LOSS , значит сделать Checktable(<ПутьКТаблице>,REPAIR_ALLOW_DATA_LOSS ). Покоцанные страницы таблиц будут очищены, но те, что не покоцаны, должны стать доступны для работы (часть данных потеряется, но БД должна стать доступна для работы).
Если определить битые таблицы по ID - проблематично (по каким-то причинам) можно сразу на БД зарядить :
DBCC CheckDB (<ИМЯБД>, REPAIR_ALLOW_DATA_LOSS).
Т.е. скрипт примерно такой:
USE ИмяБД;
GO  
--(Далее выполнять поочереди)
EXEC sp_resetstatus 'ИмяБД'
GO

ALTER DATABASE 'ИмяБД' SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO

--Попробовать:
DBCC CHECKALLOC (ИмяБД, REPAIR_REBUILD) WITH NO_INFOMSGS
GO

--Если СУБД сообщит, что для исправления ошибок - минимальный уровень 
--REPAIR_ALLOW_DATA_LOSS тогда:
DBCC CheckDB (ИмяБД, REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS
GO

ALTER DATABASE ИмяБД SET MULTI_USER
GO
Ответ написан
tsklab
@tsklab Куратор тега SQL Server
Здесь отвечаю на вопросы.
Если вы смогли подключить актуальную базу данных, то удаляйте из неё всё, что есть в резервной копии. Потом сливайте всё в одну.
Ошибки исправляйте по мере поступления (может места с ошибками и не нужны будут).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы