powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ошибка каталога 3853 и правка системной таблицы индексов
10 сообщений из 10, страница 1 из 1
Ошибка каталога 3853 и правка системной таблицы индексов
    #40102816
A0ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CHECKDB выводит сообщение:
Код: sql
1.
Проверьте сообщение каталога 3853, состояние 1: Атрибут (object_id=2086675623) строки (object_id=2086675623,index_id=0) в sys.indexes не имеет совпадающей строки (object_id=2086675623) в sys.objects.



Версия MS SQL - Standard 13.0.4001.0 (2016 sp1 вроде)

Явно похоже на имеющуюся запись об индексе типа HEAP с object_id=2086675623, которая отсутствует в каталоге sys.objects

НО
даже подключившись через DAC я НЕ нашел записи с таким id в таблице sys.sysindexes этой БД

И в других таблицах индексов не нашел такого объекта (sysindexkeys, sys.partitions или index_columns)

Код: sql
1.
DELETE FROM DWH.sys.sysindexes WHERE id = 2086675623


тоже не срабатывает даже под DAC - но просто пишет "Msg 259, Level 16, State 1, Line 19 Нерегламентированные обновления системных каталогов запрещены."

Вопросы:
1. Где можно найти эту запись об объекте 2086675623 и почему оно на него ругается, если я в упор не вижу такой записи?
2. Можно ли в версии 2016 вообще править системные таблицы? Вроде даже с включением "EXEC sp_configure 'allow updates' ,0;" всё равно писало "запрещено"
3. Как понять хотя бы, к какой таблице относится этот индекс, если я его не вижу?

CHECKDB с REPAIR_REBUILD делал - не помогло, UPDATE STATISTICS на всех таблицах тоже делал

Причина возникновения в целом - сисадмин перенес БД на другой диск, не остановив, и файлы БД похоже разъехались с логами, и вероятно, в момент переноса была создана какая-то временная таблица, которая потом была удалена, а запись об индексе на ней осталась =\
База при этом отлично работает, но бекап не даёт сделать.

Не хочется мучаться с переносом всех данных и объектов в другую БД, хотел просто удалить эту мусорную запись из каталога - но не пойму, как удалить то, чего не нашел
...
Рейтинг: 0 / 0
Ошибка каталога 3853 и правка системной таблицы индексов
    #40102819
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A0ff,

sys.sysindexes - это вьюха на три таблицы
если уж ковыряться, то в таблицах
смотри
Код: sql
1.
exec sp_helptext 'sys.sysindexes'




апдейтить можно - см ответ номер 2
https://dba.stackexchange.com/questions/192901/how-do-you-directly-modify-the-system-catalogs-in-sql-server-2017



Код: sql
1.
EXEC sp_configure 'allow updates' ,0


перестало работать с 2005, если память не изменяет
...
Рейтинг: 0 / 0
Ошибка каталога 3853 и правка системной таблицы индексов
    #40102828
A0ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komrad,

эм...
Нашел в sys.sysidxstats запись с таким id

А я был уверен, что sys.indexes это системная вьюшка, а sys.sysindexes - это системная таблица =\
...
Рейтинг: 0 / 0
Ошибка каталога 3853 и правка системной таблицы индексов
    #40102873
A0ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Воу-воу

Рестартанул весь сервис MS SQL с параметром -m из командной строки
Просто подключением DAC через admin:сервер не позволяло, все равно писало Msg 259

Через sqlcmd удалил запись из этой системной таблицы - и оно удалилось =Р

Рестартанул опять сервис - подключило

Иии... выдало:
Msg 8992, Level 16, State 1, Line 1
Проверьте сообщение каталога 3855, состояние 1: Атрибут (lob_data_space_id=1) существует без строки (object_id=2086675623,index_id=0) в sys.indexes.

Немного удивило, что при рестарте сервиса через в логе писало, что CHECKDB на этой базе "finished without errors"... но как-то очень быстро, вероятно, не проверяло целостность таки
...
Рейтинг: 0 / 0
Ошибка каталога 3853 и правка системной таблицы индексов
    #40102881
andy st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
A0ff,
Плавно приближаемся к REPAIR_ALLOW_DATA_LOSS
Только перед ним имеет смысл остановить сервис, слить копии файлов базы в сторонку, потом запустить сервис и сделать ололо.
Такой REPAIR чинит, но LOSS может быть недопустимым. Поэтому копии файлов баз пригодятся для того, чтобы закатывать солнце вручную пообъектным переносом с ручной проверкой целостности.
...
Рейтинг: 0 / 0
Ошибка каталога 3853 и правка системной таблицы индексов
    #40102906
A0ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
REPAIR_ALLOW_DATA_LOSS такое не починил =\
копию данных я уже сделал

Позже попробую опять DAC и найти эту запись в каких-то системных таблицах, чтобы удалить. Вероятно, опять в sysidxstats

Потому что обычных таблиц с lob_data_space_id=1 у меня нет в БД
...
Рейтинг: 0 / 0
Ошибка каталога 3853 и правка системной таблицы индексов
    #40102927
A0ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пока идей нет =\
Ненавижу MS SQL сервер, хотя и люблю. Надо же было так дебильно выводить сообщения об ошибках...

sys.sysindexes - оказывается, это "Системная таблица или функция", которая собирается из трех (четырех) объектов. Но я уже не уверен, что ошибка относится к sys.indexes, а не к чему-то другому.

Код: sql
1.
2.
3.
4.
FROM sys.sysidxstats i 
OUTER APPLY OpenRowset(TABLE INDEXPROP, i.id, i.indid, i.rowset) p  
LEFT JOIN sys.syssingleobjrefs d ON d.depid = i.id AND d.class = 7 AND d.depsubid = i.indid -- SRC_INDEXTODS   
INNER JOIN sys.sysschobjs obj ON obj.id = i.id



sys.sysidxstats
Объект с полями:
id
indid
name
status
intprop
fillfact
type
tinyprop
dataspace
lobds
rowset

sys.syssingleobjrefs
Объект с полями:
class
depid
depsubid
indepid
indepsubid
status

sys.sysschobjs
Объект с полями:
id
name
nsid
nsclass
status
type
pid
pclass
intprop
created
modified
status2

А "TABLE INDEXPROP" это пурга какая-то внутренняя для получения FirstIAM


В sys.internal_tables есть поле lob_data_space_id - берется как раз из sys.sysidxstats
Но в ней я тоже не нашел упоминания объекта с id=2086675623

В sys.tables есть поле lob_data_space_id
Аналогично, не найдено

В sys.pdw_nodes_tables это поле не заполняется

Хз пока, куда копать с этим
Код: sql
1.
2.
Msg 8992, Level 16, State 1, Line 1
Проверьте сообщение каталога 3855, состояние 1: Атрибут (lob_data_space_id=1) существует без строки (object_id=2086675623,index_id=0) в sys.indexes.
...
Рейтинг: 0 / 0
Ошибка каталога 3853 и правка системной таблицы индексов
    #40102928
andy st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
A0ff,
т.е. никаких мыслей по поводу того, как оно хорошо будет потом эксплуатировать базу данных с покорёженными метаданными не возникает? у Вас там полный контроль над этим?
...
Рейтинг: 0 / 0
Ошибка каталога 3853 и правка системной таблицы индексов
    #40103063
A0ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С этим 3855 БД уже успешно бекапится, так что основная проблема ушла

На копии БД тупо удалил вообще все таблицы, вьюшки и процедуры - БД стала размером 5 Мб, но CHECKDB как и раньше не проходит с этой ошибкой каталога
Если кто хочет поэкспериментировать с поиском решения - могу дать бекап ))

Копирование БД через детач-аттач ессно не убрало ошибку

Так что тут варианта два
- либо перенести данные вручную в новую БД, создав объекты и скопировав данные
- либо найти косяк в каталоге и через DAC как-то удалить его
...
Рейтинг: 0 / 0
Ошибка каталога 3853 и правка системной таблицы индексов
    #40103077
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A0ff,

база небольшая, лучше создать новую и переписать в нее все, что переписывается.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ошибка каталога 3853 и правка системной таблицы индексов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]