Решение ошибки логической страницы и сбоя ALTER INDEX в 1С (Ошибка СУБД индексы)

2 июня, 2025 admin Comments Off

Задача: Исправить ошибку при попытке выборки логической страницы или сбой выполнения запроса “ALTER INDEX…

Идентификация ошибки

1) Так выглядит ошибка в конфигураторе 1С, проявлялась при выгрузке dt.

Ошибка СУБД:

Microsoft OLE DB Driver for SQL Server: Ошибка при попытке выборки логической страницы (1:14065176) в базе данных 8.

Она принадлежит единице распределения 72057598119313408, а не 72057598048534528.
HRESULT=80004005, SQLSrvr: SQLSTATE=HY000, state=3, Severity=15, native=605, line=1.

или

2)     Так выглядит ошибка в журнале событий

Сбой выполнения запроса “ALTER INDEX [_InfoRg94272_2X1] ON [dbo].[_InfoRg94272X1]” со следующей ошибкой:

Ошибка при попытке выборки логической страницы (1:14065176) в базе данных 8.
Она принадлежит единице распределения 72057599555010560, а не 72057598048534528.
Выполнение данной инструкции было прервано.

Возможные причины сбоя:

Проблемы с этим запросом, свойство “ResultSet” установлено неправильно, параметры установлены неправильно или соединение было установлено неправильно.

В первую очередь надо определить название базы данных для идентификатора 8, который фигурирует в ошибке:

SELECT database_id, name FROM sys.databases;

Этот запрос вернет список всех баз данных и их идентификаторов на текущем сервере.

Предварительно делаем полную резервную копию базы данных средствами SQL

В нашем случае, мы столкнулись с проблемой при попытке изменить индекс _InfoRg94272_2X1 в таблице [dbo].[_InfoRg94272X1]. Для диагностики проблемы мы использовали следующий запрос, который помог нам получить подробную информацию об индексе (предварительно выбираем нашу базу, в которой была выявлена ошибка:

SELECT
	     i.name AS IndexName,
	     t.name AS TableName,
	     c.name AS ColumnName,
	     ic.key_ordinal AS KeyOrder,
	     i.type_desc AS IndexType,
	     i.is_unique AS IsUnique
	 FROM
	     sys.indexes i
	 JOIN
	     sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id
	 JOIN
	     sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
	 JOIN
	     sys.tables t ON i.object_id = t.object_id
	 WHERE
	     i.name = '_InfoRg94272_2X1';

Результат запроса показал, что индекс существует, является кластерным и принадлежит таблице _InfoRg94272X1, при этом в запросе ALTER INDEX была указана таблица [dbo].[_InfoRg94272X1]

Решение проблемы

Необходимо удалить индекс:

	 DROP INDEX [_InfoRg94272_2X1] ON [dbo]._InfoRg94272X1;

После успешного удаления мы создадим его заново:

	 CREATE UNIQUE CLUSTERED INDEX [_InfoRg94272_2X1]
	 ON [dbo]._InfoRg94272X1 (
	     [_Fld94273RRef],
	     [_Fld94274],
	     [_Fld94275],
	     [_Fld94276],
	     [_Period]
	 );


Доверьте решение сложных технических проблем профессионалам Kamensky-lab. Мы обеспечим надежную диагностику и восстановление вашей базы данных 1С, минимизируя простои и повышая эффективность работы вашей системы. Наш опыт и индивидуальный подход гарантируют качественное обслуживание и поддержку вашего бизнеса.