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

Откуда:
Сообщений: 5
Здравствуйте
Сделал ежедневный план обслуживания базы 1с с первым шагом по реорганизации индекса. Спустя 15 минут после запуска получаю ошибку:

Сбой выполнения запроса "ALTER INDEX [_AccRgE1396_ByRecorder_RNN] ON [dbo]....
+
Сбой выполнения запроса "ALTER INDEX [_AccRgE1396_ByRecorder_RNN] ON [dbo]...." со следующей ошибкой: "Операционная система возвратила ошибку 21(Устройство не готово.) в SQL Server при прочитать в смещении 0x000000063f2000 файла "F:\\SQLData\\upp_udmsib.mdf". Дополнительные сведения см. в журнале ошибок SQL Server и журнале системных событий. Это серьезная ошибка системного уровня, которая угрожает целостности базы данных, поэтому она должна быть немедленно исправлена. Выполните полную проверку базы данных на согласованность (DBCC CHECKDB). Эта ошибка может быть вызвана многими причинами; дополнительные сведения см. в электронной документации по SQL Server.". Возможные причины сбоя: проблемы с этим запросом, свойство "ResultSet" установлено неправильно, параметры установлены неправильно или соединение было установлено неправильно.


Естественно, первым делом делаю DBCC CHECKDB сначала возможностями платформы, а потом и средствами SQL. В обоих случаях никаких ошибок. Запускаю заново свой план. 15 минут и снова ошибка:
Сбой выполнения запроса "ALTER INDEX [_Accum25402_ByDims_TRRRRRRLRLN] ON [d..."
+
Сбой выполнения запроса "ALTER INDEX [_Accum25402_ByDims_TRRRRRRLRLN] ON [d..." со следующей ошибкой: "Операционная система возвратила ошибку 1167(Устройство не подключено.) в SQL Server при прочитать в смещении 0x00000647332000 файла "F:\\SQLData\\upp_udmsib.mdf". Дополнительные сведения см. в журнале ошибок SQL Server и журнале системных событий. Это серьезная ошибка системного уровня, которая угрожает целостности базы данных, поэтому она должна быть немедленно исправлена. Выполните полную проверку базы данных на согласованность (DBCC CHECKDB). Эта ошибка может быть вызвана многими причинами; дополнительные сведения см. в электронной документации по SQL Server.". Возможные причины сбоя: проблемы с этим запросом, свойство "ResultSet" установлено неправильно, параметры установлены неправильно или соединение было установлено неправильно.


После и первой, и второй ошибки получаю недоступную базу для пользователей пока не перезапущу службы SQL и 1С Сервер.
19 мар 19, 20:33    [21837758]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при реорганизации индекса базы  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 31770
Блог
eduard rogov,

снимите свежую копию базы,
попробуйте удалить и создать индекс
19 мар 19, 20:49    [21837772]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при реорганизации индекса базы  [new]
eduard rogov
Member

Откуда:
Сообщений: 5
Критик
eduard rogov,

снимите свежую копию базы,
попробуйте удалить и создать индекс


Не особый умелец в работе с sql, но все же нашел, что удалить все индексы на копии базы могу запросом:

+
USE AdventureWorks2012;
GO
-- delete the IX_ProductVendor_BusinessEntityID index
-- from the Purchasing.ProductVendor table
DROP INDEX IX_ProductVendor_BusinessEntityID
ON Purchasing.ProductVendor;
GO


так?
а как потом создать индекс? И вообще как это повлияет на работу пользователей и самой базы?
19 мар 19, 21:11    [21837782]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при реорганизации индекса базы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 28736
eduard rogov
так?
Да.

eduard rogov
а как потом создать индекс?
Сделайте сначала скрипт инедкса, сохраните.

Потом запустите этот скрипт, после удаления инедкса.

eduard rogov
И вообще как это повлияет на работу пользователей и самой базы?
На время отсутствия индекса запросы могут выполняться медленнее.
Кроме того, кесли индекс уникальный, то на время отсутствия индекса не будет выполняться проверка уникальности.
19 мар 19, 21:48    [21837796]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при реорганизации индекса базы  [new]
eduard rogov
Member

Откуда:
Сообщений: 5
alexeyvg,

Правильно ли я понял вас? Мне необходимо на КОПИИ проблемной базы сделать:
1. "Сервис/Параметры/Браузер объектов SQL Server/Скрипты/Внести в скрипт индексы" ставлю в "Истинный", значения остальных вносимых данных в скрипт оставляю по умолчанию.
2. На копии базы Создать скрипт для базы данных/Используя CREATE/Файл... Выгружаю в файл.
3. С помощью запроса выше на копии удаляю индексы.
4. На копии запускаю созданный в п.2 скрипт
5. На копии пробую сделать реорганизацию индекса?

Поправьте, пожалуйста, если что-то не так сказал.
19 мар 19, 22:13    [21837825]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при реорганизации индекса базы  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2263
eduard rogov,

How to troubleshoot a Msg 823 error in SQL Server
19 мар 19, 22:26    [21837843]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при реорганизации индекса базы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 28736
eduard rogov
alexeyvg,

Правильно ли я понял вас? Мне необходимо на КОПИИ проблемной базы сделать:
1. "Сервис/Параметры/Браузер объектов SQL Server/Скрипты/Внести в скрипт индексы" ставлю в "Истинный", значения остальных вносимых данных в скрипт оставляю по умолчанию.
2. На копии базы Создать скрипт для базы данных/Используя CREATE/Файл... Выгружаю в файл.
3. С помощью запроса выше на копии удаляю индексы.
4. На копии запускаю созданный в п.2 скрипт
5. На копии пробую сделать реорганизацию индекса?

Поправьте, пожалуйста, если что-то не так сказал.
Насчёт копии - как я понял, Критик просто напомнил о необходимости иметь свежий бакап.
А так вообще никакой копии не нужно.

Так что всё проще:
1. Находите в дереве объектов SSMS своюб таблицу, раскрываете, ищете индексы, ищите свой индекс.
2. ПКМ на индексе, выбираете "Script Index as". Т,о. вы сохранили скрипт инедкса для будущего создания.
3. Выполняете скрипт удаления индекса
4. Выполняете скрипт создания индекса, созданный в п. 2

Реорганизицию делать не надо, индекс же свежий.
20 мар 19, 02:15    [21837935]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при реорганизации индекса базы  [new]
aleks222
Member

Откуда:
Сообщений: 695
Боюсь показаться банальным, но "при прочитать в смещении 0x000000063f2000 файла "F:\\SQLData\\upp_udmsib.mdf"" доктор должен советовать не промывание желудка, а клизму.

Причем тут "пересоздание индексов и DBCC"? Когда вам толсто намекают на проблему чтения из файла.

chkdsk /F/R f:

вот правильная таблетка.
20 мар 19, 05:59    [21837977]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при реорганизации индекса базы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 28736
aleks222
Боюсь показаться банальным, но "при прочитать в смещении 0x000000063f2000 файла "F:\\SQLData\\upp_udmsib.mdf"" доктор должен советовать не промывание желудка, а клизму.

Причем тут "пересоздание индексов и DBCC"? Когда вам толсто намекают на проблему чтения из файла.

chkdsk /F/R f:
Да, что то текст ошибки я и не прочитал, отвечал на вопрос "как пересоздать индекс" :-(
20 мар 19, 09:36    [21838058]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при реорганизации индекса базы  [new]
eduard rogov
Member

Откуда:
Сообщений: 5
chkdsk /F/R f: никаких ошибок проблемного диска не выявил. все-таки делать процедуру создания скрипта на индексы и удалять-загружать их снова? описанный метод
+
1. Находите в дереве объектов SSMS своюб таблицу, раскрываете, ищете индексы, ищите свой индекс.
2. ПКМ на индексе, выбираете "Script Index as". Т,о. вы сохранили скрипт инедкса для будущего создания.
3. Выполняете скрипт удаления индекса
4. Выполняете скрипт создания индекса, созданный в п. 2

не совсем мне понятен. ибо таблиц в базе 1с по раскрытию соответствующего списка много, индексов в каждой таблице тоже не мало. по одному индексу доставать я бесконечно долго буду...Может быть правда что-то не понимаю...
20 мар 19, 14:51    [21838567]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при реорганизации индекса базы  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2263
eduard rogov,

Я бы посоветовал сначала убедиться, что если база завтра окончательно умрет, то вы сможете ее восстановить. Для начала поднимете последний бэкап при возможности на другом сервер и дисковой системе. Потом DBCC CHECKDB, а потом пробуйте пересоздать там индекс.
20 мар 19, 19:41    [21838920]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при реорганизации индекса базы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 28736
eduard rogov
описанный метод
+
1. Находите в дереве объектов SSMS своюб таблицу, раскрываете, ищете индексы, ищите свой индекс.
2. ПКМ на индексе, выбираете "Script Index as". Т,о. вы сохранили скрипт инедкса для будущего создания.
3. Выполняете скрипт удаления индекса
4. Выполняете скрипт создания индекса, созданный в п. 2

не совсем мне понятен. ибо таблиц в базе 1с по раскрытию соответствующего списка много, индексов в каждой таблице тоже не мало. по одному индексу доставать я бесконечно долго буду...
Ну. надо смотреть, сколько таких мест.
Озвучено пока 2, может, больше нет?

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

Можно, как уже советовали, восстановить базу из бакапов, и проверить её - но не факт, что в бакапах не лежит та же испорченная база.

Вообще говоря, можно считать, что у вас есть бакап, когда он не только успешно сделан, но и восстановлен, на тестовом сервере, а востсановленная база проверена checkdb.

Так что хорошо, что у вас есть бакап, селанный средствами 1С.
eduard rogov
chkdsk /F/R f: никаких ошибок проблемного диска не выявил
Возможно, это был разовый сбой подсистемы IO. Возможно, перенос уже испорченной базы с другого сервера.
20 мар 19, 20:18    [21838932]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при реорганизации индекса базы  [new]
eduard rogov
Member

Откуда:
Сообщений: 5
alexeyvg,
спасибо за ответы. проблема решилась.

Дело в том, что .ldf и .mdf лежали на разных ФИЗИЧЕСКИХ дисках. Как раз на том, где лежал .ldf по смарту диска у видел в C5:

[C5] Current Pending Sector Count: 200/Always OK, Worst: 200 (Data = 3,0)

Предупреждение. Сделал полный бэкап базы и восстановил .ldf файл на физический диск к .mdf файлу. Теперь реорганизация проходит корректно, проверка на целостность тоже.
Вовремя получается заметил как начал сыпаться винт, пока предупреждение было лишь в C5.
21 мар 19, 09:08    [21839131]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить