| Предыдущий | Следующий |
| hrNoCurrentRecord | hrKeyDuplicate |
hrRecordClusteredChanged
Что означает hrRecordClusteredChanged
hrRecordClusteredChanged (0xC8000644) — кластеризованный ключ изменить нельзя.
Что проверить
Зафиксируйте базу, таблицу или сессию ESE и первый API Jet/ESENT, который вернул hrRecordClusteredChanged.
- Проверьте состояние базы и журналов ESE, свободные ресурсы процесса и состояние активной транзакции именно в момент отказа.
- Если ошибка возникла при восстановлении или работе с журналами, сопоставьте поколения журналов, контрольную точку и выбранный набор файлов; не подменяйте восстановление простым повтором операции.
Практический смысл и диагностика
- ESE update пытается изменить clustered key так, что engine не может применить изменение к текущей записи in-place.
- Сбой возникает в cursor/update workflow (`JetPrepareUpdate`/`JetUpdate` и связанные navigation APIs); сохраните table/index, bookmark и тип prepared update.
- Не повторяйте write вслепую: заново прочитайте текущую row и проверьте business preconditions, потому что cursor currency или row state могли измениться.
- Ключевой диагностический слой — cursor currency, bookmarks, prepared update state и row lifecycle, а не storage capacity.
- Prepared update создаёт состояние cursor, которое нужно явно завершить или cancel. Navigation, delete, rollback либо concurrent change могут сделать ранее выбранную clustered record непригодной для такого update.
Технические ссылки
Нужно найти другой код? Найти другой код состояния или ошибки.