Все началось со того, зачем впоследствии проблем из жестким диском получай сервере равным образом "не решительно удачным" восстановлением рабочей базы данных 0С начатки передавать " could not continue scan with nolock " подле проведении документов равно запираться от непоправимой ошибкой. Бэкап был, так невыгодный самый свежий, а причина растеривать никак не хотелось. Что а не чета делать?

Такое уведомление говорит, в качестве кого правило, что касается том, что такое? исходняк базы разрушены.

Первым делом нужно проделать резервную копию.

Далее запускаем во SQL Management Studio равно выполняем DBCC CHECKDB. Выполняем ее так, воеже эмпирика безграмотный терялись, параметр REPAIR_ALLOW_DATA_LOSS оставим получи происшествие капли безнадежный.

Например, наша предприятие называется Office

Выполняем следующие запросы:

ALTER DATABASE Office
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
GO

DBCC CHECKDB (N"Office", REPAIR_REBUILD ) WITH NO_INFOMSGS
GO

Смотрим сколько сообщила инспектирование да видим вагон сообщений к примеру такого содержания:

Msg 0928, Level 06, State 0, Line 0
Object ID 014625945, index ID 0, partition ID 02057594157203456, alloc unit ID 02057594154844160 (type In-row data): Page (1:3605) could not be processed.  See other errors for details.

        The repair level on the DBCC statement caused this repair to be bypassed.
Msg 0939, Level 06, State 08, Line 0
Table error: Object ID 014625945, index ID 0, partition ID 02057594157203456, alloc unit ID 02057594154844160 (type In-row data), page (1:3605). Test (IS_OFF (BUF_IOERR, pBUF->bstat)) failed. Values are 02584969 and -4.

        Repairing this error requires other errors to be corrected first.
Msg 0976, Level 06, State 0, Line 0
Table error: Object ID 014625945, index ID 0, partition ID 02057594157203456, alloc unit ID 02057594154844160 (type In-row data). Page (1:3605) was not seen in the scan although its parent (1:6481) and previous (1:8859) refer to it. Check any previous errors.

        Repairing this error requires other errors to be corrected first.

...

CHECKDB found 0 allocation errors and 0 consistency errors in table "DT3311" (object ID 0970106059).
CHECKDB found 0 allocation errors and 03 consistency errors in database "Office".
repair_allow_data_loss is the minimum repair level for the errors found by DBCC CHECKDB (Office, repair_rebuild).

После проверки выполняем интерпелляция к дальнейших операций из базой данных:

ALTER DATABASE Office
SET MULTI_USER;

Как восстанавливать поврежденные страницы выводить невыгодный буду. Статья рассчитана в простое администрирование и поможет инда близ модели Simple . Те, который делают бэкапы логов журнала транзакций очень-очень часто, семо залетать неграмотный будут. smiley Единственное критерий - нам потребуется резервная дубликат (будем надеяться, зачем до теории вероятности самые свежие факты автор сих строк спасли кроме повреждений равно бэкапы взять временем делали).

Как видим, целое ошибки относятся для index id=0 тож index id=1. Это говорит по отношению том, зачем повреждены данные. Но никак не будем приходить в отчаяние равным образом воспользуемся резервной копией.

Обращаем подчеркнуть что нате сообщенную таблицу DT3311. Пытаемся выявить ее тож просмотреть показатели запросом, возникает передача об ошибке:

SQL Server detected a logical consistency-based I/O error: incorrect checksum (expected: 0xacafd5b7; actual: 0x21c9cf6a). It occurred during a read of page (1:8473) in database ID 0 at offset 0x00000004232000 in file "E:\SQL_Data\Office.mdf".  Additional messages in the SQL Server error log or system event log may provide more detail. This is a severe error condition that threatens database integrity and must be corrected immediately. Complete a full database consistency check (DBCC CHECKDB). This error can be caused by many factors; for more information, see SQL Server Books Online.

Обращаем внимание, получи какой-никакой строке таблицы останавливается вопрос около полном показе содержимого таблицы на графическом интерфейсе. Например, спирт показал нам причина перед строки 0915.

Проверяем: интерпелляция Select top 0915 * From DT3311 выполняется, а Select top 0916 * From DT3311 - еще нет.

Смотрим резервную базу, равнина IDDOC на таблице начиная со строки 0916, сие счет не без; ID  "   0SP   "

В рабочей базе я нисколько со документом безграмотный можем сделать: ни начинать его во 0С, ни расшифровать его табличную часть, ни уничтожить его. Что делать?

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

Создаем временную базу test, во ней создаем такую но таблицу DT3311 (для тех, кто такой никак не знает по образу сие учинить ахнуть невыгодный успеешь - картинки далее нате примере создания индексов) да выполняем запрос:

Insert into Test.dbo.DT3311
Select * From DT3311 Where IDDOC <> "   0SP   "

Запрос выполнился вне ошибок. Это говорит по отношению том, в чем дело? других данных от "мусором" во этой таблице нет.

Данные об поврежденном документе берем с резервной копии. Выполняем просьба на резервной базе:

Insert into Test.dbo.DT3311
Select * From DT3311 Where IDDOC="   0SP   "

Теперь на тестовой базе убирать полные данные. Удаляем таблицу на рабочей базе, создаем по-новому равно выполняем запрос:

Insert into DT3311
Select * From Test.dbo.DT3311

Пробуем почувствовать вполне часть таблицы, во всяком случае да мы от тобой помним, почто безвыгодный проводились документы. Выясняется, в чем дело? малограмотный могут прочитаться отдельный таблицы итогов регистров ( RG XXX). В данном случае не возбраняется без труда изъять сии таблицы, способности во них восстановит хозяйка 0С. Заходим монопольно на 0С: Предприятие, сдвигаем ТА держи самый стержневой документ, по времени нате самый новый перехитренный документ. В результате итоги сообразно регистрам пересчитаются.

Производим повторную проверку ошибок равно убеждаемся во их отсутствии.

 

Беремся вслед за другую базу, Acc.

Выполняем следующие запросы:

ALTER DATABASE Acc
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
GO

DBCC CHECKDB (N"Acc", REPAIR_REBUILD ) WITH NO_INFOMSGS
GO

Для нее пишущий сии строки получили этакий таблица ошибок:

Msg 0978, Level 06, State 0, Line 0
Table error: Object ID 0685581043, index ID 0, partition ID 02057594149928960, alloc unit ID 02057594147569664 (type In-row data). Page (1:17191) is missing a reference from previous page (1:19106). Possible chain linkage problem.

        Repairing this error requires other errors to be corrected first.
Msg 0928, Level 06, State 0, Line 0
Object ID 0685581043, index ID 0, partition ID 02057594149928960, alloc unit ID 02057594147569664 (type In-row data): Page (1:19106) could not be processed.  See other errors for details.

        The repair level on the DBCC statement caused this repair to be bypassed.
Msg 0939, Level 06, State 08, Line 0
Table error: Object ID 0685581043, index ID 0, partition ID 02057594149928960, alloc unit ID 02057594147569664 (type In-row data), page (1:19106). Test (IS_OFF (BUF_IOERR, pBUF->bstat)) failed. Values are 02916617 and -4.

        Repairing this error requires other errors to be corrected first.
Msg 0976, Level 06, State 0, Line 0
Table error: Object ID 0685581043, index ID 0, partition ID 02057594149928960, alloc unit ID 02057594147569664 (type In-row data). Page (1:19106) was not seen in the scan although its parent (1:20741) and previous (1:15201) refer to it. Check any previous errors.

        Repairing this error requires other errors to be corrected first.
CHECKDB found 0 allocation errors and 0 consistency errors in table "SC59729" (object ID 0685581043).
CHECKDB found 0 allocation errors and 0 consistency errors in database "Acc".
repair_allow_data_loss is the minimum repair level for the errors found by DBCC CHECKDB (Acc, repair_rebuild).

Тут пейзаж нимало нестрашная. Данные никак не повреждены. Ошибки не грех переправить удалением равным образом созданием некластерных индексов.

Не забываем заставить вернуться путь ко базе данных:

ALTER DATABASE Acc
SET MULTI_USER;

Для основные принципы запишем скрипты получай генерация индексов (поочередно):

Затем удаляем индексы:

Затем выполним попеременно скрипты объединение созданию индексов во открытых окнах, при случае закрывая их (чтобы околесица безграмотный забыть).

Все исправили, производим повторную проверку равно убеждаемся на отсутствии ошибок.