Пересоздать индексы MS SQL

1. ivlog 05.09.24 11:21 Сейчас в теме
У регистра накопления удалены индексы (кластерные и не кластерные) через
DR OP INDEX [_AccumR7934_ByPeriod_TRN] ON [dbo].[_AccumRg7934]

Удалены были из-за ошибки CHECKDB, он не смог исправить. Как вернуть эти индексы на место? Через скрипт или ТиИ пересоздаст? Подскажите, если знаете, спасибо.
По теме из базы знаний
Найденные решения
9. ivlog 05.09.24 16:13 Сейчас в теме
Помогло решение на Муркод, автор решения pkarklin (огромная благодарность), тема "Накрылась база 1с после выключения света - классика жанра.", не знаю, можно ли тут вставлять ссылки на сторонние ресурсы.

Может кому-нибудь пригодится, напишу кратко решение здесь:

1) Бекап.
2) На индексах, которые в ошибке checkDB правой кнопкой Script Table As->CREATE
3) Удаляем проблемные индексы через DROP (сначала не кластерные, потом кластерные)
4) Выбираем записи, которых больше 1 (смотрим на количество)
5) Создаем временную таблицу ИмяРегистра_temp переносим туда из таблицы регистра записи, которые больше 1
6) Создаем заново индексы из скриптов в (2) (сначала кластерные, потом не кластерные)
7) Переносим из ИмяРегистра_temp в регистр уникальные записи, их должно быть меньше в 2 раза чем в (4)

CheckDB прошел у меня без ошибок, после этого.

Прилагаю скрипты (нужно изменять название таблиц и столбцов)

Теме 10 лет, а помогла сберечь нервы, пользователи довольные, я в очередной раз пересматриваю ценность актуальных бекапов.
Прикрепленные файлы:
Скрипты авария индексов.rar
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. RustamZz 05.09.24 11:42 Сейчас в теме
(1) Можно поле с индексацией добавить и удалить в РН.
4. ivlog 05.09.24 12:10 Сейчас в теме
(2) Это через конфигуратор, имеете ввиду?
3. ivlog 05.09.24 12:05 Сейчас в теме
Млин, при добавлении индекса вернулся к ошибке с которой начал и с которой CHECKDB не справился.

Выполнение инструкции CREATE UNIQUE INDEX прервано, поскольку обнаружен повторяющийся ключ для объекта с именем "dbo._AccumRg7934" и индекса с именем "_AccumR7934_ByPeriod_TRN". Повторяющееся значение ключа: (май 23 4019 1:28PM, 0x000000d5, 0xbac4ac1f6b33d6b811e97c3ce49401a2, 1).
Сообщение 1505, уровень 16, состояние 1, строка 2
Выполнение инструкции CREATE UNIQUE INDEX прервано, поскольку обнаружен повторяющийся ключ для объекта с именем "dbo._AccumRg7934" и индекса с именем "_AccumR7934_ByRecorder_RN". Повторяющееся значение ключа: (0x00000077, 0xbac4ac1f6b33d6b811e97d0cdc0bd806, 1).
Сообщение 1505, уровень 16, состояние 1, строка 2
Выполнение инструкции CREATE UNIQUE INDEX прервано, поскольку обнаружен повторяющийся ключ для объекта с именем "dbo._AccumRg7934" и индекса с именем "_AccumR7934_ByDims7941_RTRN". Повторяющееся значение ключа: (0x07870080485b879b11e1b1f420445fc8, ноя 1 4019 11:59PM, 0x000000cc, 0xbadfac1f6b33d6b811ea6dba7c6f0ace, 130).

Получается я удалил просто индекс, а записи остались. Как тогда выйти из положения, только записи в регистре удалять? Это регистр накопления ТоварыНаСкладах (УТ 10.3). Если удалить записи, то остатки собьются. А если как сейчас, то при запросе к регистру зависает 1С из-за сбойных индексов.
5. paulwist 05.09.24 12:46 Сейчас в теме
(3)
Получается я удалил просто индекс, а записи остались.


Да, верно, индекс создаётся на основе записи.


(3)
Как тогда выйти из положения, только записи в регистре удалять?


Да, надо править записи в регистре, надо найти дубли и посмотреть на них, возможно там действительно дубль, тогда либо исправить документ, который даёт дубль, либо если явный косяк можно удалить. (конечно эксперименты делать на копии БД)
6. starik-2005 3080 05.09.24 13:17 Сейчас в теме
(3)
поскольку обнаружен повторяющийся ключ
Это ошибка данных в таблице. Найдите все повторяющиеся записи и грохните их.
7. truba 05.09.24 14:12 Сейчас в теме
(3) Какой релиз 1С, среди типовых такого наименования индексов нет. Что входит в состав Вашего индекса если он созданный в обход платформы?
Если создавали сами, то во все индексы рег накопления еще входит LineNo, в индексацию по Регистратору TRref и RRef
8. ivlog 05.09.24 15:51 Сейчас в теме
(7) Релиз древний 10.3.14.3, в хлам переписанный. Регистр типовой на тот момент, насколько знаю.
9. ivlog 05.09.24 16:13 Сейчас в теме
Помогло решение на Муркод, автор решения pkarklin (огромная благодарность), тема "Накрылась база 1с после выключения света - классика жанра.", не знаю, можно ли тут вставлять ссылки на сторонние ресурсы.

Может кому-нибудь пригодится, напишу кратко решение здесь:

1) Бекап.
2) На индексах, которые в ошибке checkDB правой кнопкой Script Table As->CREATE
3) Удаляем проблемные индексы через DROP (сначала не кластерные, потом кластерные)
4) Выбираем записи, которых больше 1 (смотрим на количество)
5) Создаем временную таблицу ИмяРегистра_temp переносим туда из таблицы регистра записи, которые больше 1
6) Создаем заново индексы из скриптов в (2) (сначала кластерные, потом не кластерные)
7) Переносим из ИмяРегистра_temp в регистр уникальные записи, их должно быть меньше в 2 раза чем в (4)

CheckDB прошел у меня без ошибок, после этого.

Прилагаю скрипты (нужно изменять название таблиц и столбцов)

Теме 10 лет, а помогла сберечь нервы, пользователи довольные, я в очередной раз пересматриваю ценность актуальных бекапов.
Прикрепленные файлы:
Скрипты авария индексов.rar
10. truba 05.09.24 17:41 Сейчас в теме
(9) У меня во всех базах индексы имеются платформой по типу:
_AccumRg24746_N
там по смыслу кластерный индекс + индексы по регистратору, дате и по измерениям.
Но наименований типа _ByRecorder_ там нет.
Какой релиз платфомы не скажите?
11. ivlog 06.09.24 05:12 Сейчас в теме
(10) Платформа 8.3.10.2772

Вроде регистры типовые
Прикрепленные файлы:
12. truba 06.09.24 08:41 Сейчас в теме
(11) проверил на новой базе, да, индексы именуются по вашей схеме. Возможно что то не так с тестовой базой.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот