Что означает код HRESULT 0xC8000518 (hrTableInUse)?

 
Предыдущий Следующий
hrTableDuplicate hrObjectNotFound

hrTableInUse

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

hrTableInUse (0xC8000518) — не удалось заблокировать таблицу: она уже используется.

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

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

  • Проверьте состояние базы и журналов ESE, свободные ресурсы процесса и состояние активной транзакции именно в момент отказа.
  • Если ошибка возникла при восстановлении или работе с журналами, сопоставьте поколения журналов, контрольную точку и выбранный набор файлов; не подменяйте восстановление простым повтором операции.
  • Определите, кто владеет ресурсом в момент hrTableInUse, и ожидается ли это по контракту API. Закройте или завершите только конфликтующую операцию; принудительное снятие блокировки без понимания владельца может повредить состояние.

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

  • Открытые cursors/operations удерживают table и не позволяют выполнить требуемое exclusive schema/table change.
  • Проверьте JetOpenTable/JetCreateTableColumnIndex/JetDeleteTable и schema-enumeration calls, которые оставили JET_TABLEID active.
  • Закройте всех пользователей table и выполняйте schema changes в контролируемом exclusive window.
  • hrTableDuplicate — другой код: создание table повторно использовало уже существующее имя.
  • JET_TABLEID — cursor-like handle session, а не persistent table identifier; не считайте migration безопасной только потому, что object с таким именем существует.

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


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