База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Почему задача «Перестроение индекса» в MS SQL Server завершилась с ошибкой? › Ответ в теме: Почему задача «Перестроение индекса» в MS SQL Server завершилась с ошибкой?
Судя по сообщению, у вас в MS SQL Server при выполнении задачи «Перестроение индекса» (Rebuild Index) на таблицах с именами типа _AccumRgXXXX возникает ошибка, и выполнение прерывается с сообщением «Не удалось выполнить … Шаг завершился с ошибкой».
Причины и рекомендации:
1. Права пользователя
Задача выполняется от имени пользователя NT ServiceSQLSERVERAGENT.... Убедитесь, что у этого пользователя есть достаточные права на выполнение операций ALTER INDEX в базе kdl_spid. Обычно для перестроения индексов нужны права db_owner или ALTER на соответствующие таблицы.
2. Занятость таблиц/индексов
Если в момент перестроения индексов идут активные транзакции или блокировки на таблицах, операция может не выполниться. Проверьте наличие блокировок и активных транзакций, которые могут мешать перестроению.
3. Ресурсы сервера
Перестроение индексов — ресурсоёмкая операция. Проверьте, хватает ли памяти, CPU, дискового пространства для выполнения задачи. Особенно если база большая.
4. Версия и параметры SQL Server
Убедитесь, что версия SQL Server поддерживает онлайн перестроение индексов (если оно используется). В некоторых случаях стоит переключить режим перестроения на офлайн.
5. Логи ошибок SQL Server
Посмотрите подробные логи ошибок SQL Server в момент выполнения задачи. Там будет точная причина сбоя.
6. Проверка целостности базы
Выполните DBCC CHECKDB для базы kdl_spid, чтобы исключить повреждения данных, которые могут мешать перестроению индексов.
7. Настройка задачи перестроения индексов
Если задача настроена через SQL Server Agent, проверьте скрипты и параметры. Возможно, стоит разбить перестроение на части, перестраивать индексы поочерёдно, а не все сразу.
8. Проверка индексов
Возможно, некоторые индексы повреждены или имеют нестандартные параметры. Попробуйте перестроить проблемные индексы вручную через SSMS.
9. Проверка имени базы
В сообщении несколько раз встречается USE [kdl_spid]. Убедитесь, что база существует и доступна.
—
Практические шаги:
— В SSMS выполните:
|
1 2 3 4 |
USE [kdl_spid]; GO DBCC CHECKDB WITH NO_INFOMSGS, ALL_ERRORMSGS; GO |
— Попробуйте вручную перестроить один из индексов, например:
|
1 |
ALTER INDEX [_AccumRg4030_3] ON [dbo].[_AccumRg4030] REBUILD WITH (ONLINE = ON); |
— Проверьте права пользователя SQLSERVERAGENT:
|
1 2 3 4 |
SELECT dp.name, dp.type_desc, perm.permission_name, perm.state_desc FROM sys.database_principals dp LEFT JOIN sys.database_permissions perm ON perm.grantee_principal_id = dp.principal_id WHERE dp.name = 'NT ServiceSQLSERVERAGENT...'; |
— Посмотрите логи SQL Server на ошибки в момент запуска задачи.
—
Если ошибка не ясна, приложите полный текст ошибки из журнала SQL Server или из агента, чтобы точнее диагностировать проблему.
—
Рекомендую посмотреть здесь, где подробно описаны проблемы с перестроением индексов и их решение:
https://infostart.ru/public/2255283/
https://infostart.ru/1c/articles/administrirovanie_bd/instrumenty_administratora_bd/
И по ошибкам SQL Server:
https://infostart.ru/1c/articles/administrirovanie_bd/tehnicheskie_oshibki_i_ikh_reshenie/