Описание проблемы:
При обновлении платформы с версии 8.3.18 на 8.3.27 одной из задач было протестировать реструктуризацию.
В процессе тестового обновления конфигурации на 8.3.27 (база объемом ~6 ТБ) при запуске реструктуризации базы данных (как в режиме v1, так и v2) возникала ошибка:
Запись не найдена в менеджере имен баз данных
Стандартные рекомендации (очистка кэшей, перезапуск служб, поиск в интернете) не принесли результата.
Выполненные шаги по диагностике:
- Чтение bugboard
- Очистка кэшей, рестарт всего, что возможно
- Тестирование и исправление
- Воспроизведение проблемы на разных версиях платформы
- Изменение режима совместимости
- Удаление всех расширений
- Сбор ТЖ, событий EXCP, SDBL, MSSQL и анализ
- Сбор разных событий Extended events и поиск последнего запроса
Решение:
- Сбор полного технологического журнала с последующим длительным анализом
<config xmlns="http://v8.1c.ru/v8/tech-log">
<system level="trace"/>
<log location="C:\v8\logs" history="168">
<event>
<ne property="name" value=""/>
</event>
<property name="all">
</property>
</log>
</config>
Искали все подозрительное, пока по ключевому слову "ERROR" не нашли повторяющийся паттерн с запросом:
SELECT
T1._RestructData
FROM dbo._ExtensionsRestruct T1 WITH(NOLOCK)
WHERE (T1._ExtDataID IN (?)) AND T1._RestructDataType = ?
В логах был обнаружен постоянно повторяющийся паттерн ошибок, связанный с запросом к системной таблице dbo._ExtensionsRestruct
:
Несмотря на то, что все расширения были удалены, данная таблица не была пустой. Было принято решение очистить ее вручную.
После очистки ошибка ушла, обновление и реструктуризация стали проходить в штатном режиме.
На предыдущих итерация анализа этот запрос был, но не обращали на него внимание так как он был не последний.
Предполагаемая причина проблемы:
Вероятно, в ходе одной из предыдущих реструктуризаций (возможно, при аварийном завершении процесса) система не смогла корректно и транзакционно откатить изменения, связанные с расширениями. В результате в таблице _ExtensionsRestruct
остались "битые" записи. Изменения в алгоритмах работы механизма реструктуризации в более новых версиях платформы (например, в 8.3.27) стали учитывать эти записи, что привело к возникновению ошибки, которой не было на 8.3.18.
Заключение:
Данная проблема может проявляться при обновлении на версии платформы. Если вы столкнулись с ошибкой Запись не найдена в менеджере имен баз данных
при реструктуризации, очистка таблицы _ExtensionsRestruct
может быть решением. Всегда предварительно тестируйте это решение на копии вашей базы данных.
Вступайте в нашу телеграмм-группу Инфостарт