Что означает код HRESULT 0xC8000517 (hrTableDuplicate)?

 
Предыдущий Следующий
hrTableLocked hrTableInUse

hrTableDuplicate

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

hrTableDuplicate (0xC8000517) — таблица уже существует.

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

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

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

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

  • Создание table использует имя, которое уже существует в этой ESE database.
  • Проверьте schema APIs `JetOpenTable`, `JetCreateTableColumnIndex`, `JetDeleteTable` и enumeration, чтобы увидеть фактический существующий object.
  • `hrTableInUse` означает, что open cursors/operations мешают exclusive change; это не duplicate-name condition.
  • `hrObjectDuplicate` шире и может относиться к другим object classes; здесь collision относится именно к table.
  • Сделайте schema migration idempotent: перед create сравните существующее определение table с ожидаемой schema, а не игнорируйте код вслепую.

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


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