Ошибка реорганизации индексов базы данных MS SQL «Невозможно реорганизовать индекс» на базах 1С Предприятие.
Начиная с платформы 1С 8.3.20.хххх, обратил внимание что не выполняется реиндексация баз данных относящихся к 1С, в логах значится ошибка — «Невозможно реорганизовать индекс «_Acc48_1» в таблице «_Acc48″, поскольку отключена блокировка на уровне страницы.»
Как оказалось что начиная с версии платформы 8.3.22 необходимо выполнять дефрагментацию индексов по следующему алгоритму:
- До дефрагментации индекса необходимо включить страничные блокировки. Пример команды: ALTER INDEX index_name ON table_name SET (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON);
- Выполнить дефрагментацию.
- Обратно выключить страничные блокировки. Пример команды: ALTER INDEX index_name ON table_name SET (ALLOW_PAGE_LOCKS = OFF, ALLOW_ROW_LOCKS = ON);
Пример
USE [baseName]
EXEC sp_MSforeachtable ‘ALTER INDEX ALL ON ? SET (ALLOW_PAGE_LOCKS = ON)’
EXEC sp_MSforeachtable ‘ALTER INDEX ALL ON ? SET (ALLOW_ROW_LOCKS= ON)’
GO
после реорганизации
USE [baseName]
EXEC sp_MSforeachtable ‘ALTER INDEX ALL ON ? SET (ALLOW_PAGE_LOCKS = OFF)’
EXEC sp_MSforeachtable ‘ALTER INDEX ALL ON ? SET (ALLOW_ROW_LOCKS= ON)’
GO
Должно работать
а если на севре 30 баз, сколько планов создавать?
18 Oct 2023 в 19:37 UTC Ответить