Что означает код HRESULT 0xC800064B (hrerrDataHasChanged)?

 
Предыдущий Следующий
hrUpdateNotPrepared hrTooManySorts

hrerrDataHasChanged

Что означает hrerrDataHasChanged

hrerrDataHasChanged (0xC800064B) — операция отменена, поскольку данные изменились.

Что проверить

Зафиксируйте базу, таблицу или сессию ESE и первый API Jet/ESENT, который вернул hrerrDataHasChanged.

  • Проверьте состояние базы и журналов ESE, свободные ресурсы процесса и состояние активной транзакции именно в момент отказа.
  • Если ошибка возникла при восстановлении или работе с журналами, сопоставьте поколения журналов, контрольную точку и выбранный набор файлов; не подменяйте восстановление простым повтором операции.
  • Установите, какая операция первой перевела объект в конечное/отменённое состояние до hrerrDataHasChanged. Не продолжайте использовать старый дескриптор/контекст после завершения; новую попытку начинайте только после фиксации исхода предыдущей.

Практический смысл и диагностика

  • Optimistic cursor/update state больше не соответствует row version, на которой caller строил своё изменение.
  • Сопоставьте JetBeginSession/transaction boundaries и конкретный update API с row version, прочитанной до изменения.
  • hrTransTooDeep — другой transaction-state code про nesting depth savepoints; он не означает concurrent row modification.
  • Перечитайте row, заново проверьте business preconditions и повторяйте update только через idempotent transaction path.
  • Каждый retry обязан заново читать application preconditions, потому что visible row уже могла измениться; begin должен завершаться commit или rollback на той же session.

Технические ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.