Что может привести к изменению Oracle ROWID?

AFAIK ROWID в Oracle представляет физическое расположение записи в соответствующем файле данных. В каких случаях ROWID записи может измениться ?

известным мне является обновление секционированной таблицы, которая" перемещает " запись в другой раздел.

есть ли другие случаи ? Большинство наших DBs-Oracle 10.

3 ответов


Как вы сказали, это происходит в любое время, когда строка физически перемещается на диск, например:

  • экспорт/импорт таблицы
  • ИЗМЕНИТЬ ТАБЛИЦУ XXXX ПЕРЕМЕСТИТЬ
  • ALTER ТАБЛИЦА XXXX СОКРАЩЕНИЕ ПРОСТРАНСТВА
  • FLASHBACK ТАБЛИЦА XXXX
  • разделение раздела
  • обновление значения, чтобы оно перемещалось в новый раздел
  • объединение двух разделов

Если в индексной организованной таблице, то обновление первичный ключ также даст вам другой ROWID.


+1 @WW

кроме того:

ROWID для индексных организованных таблиц разные (они называются UROWID, я считаю), потому что физическое расположение строки может меняться во время обновлений таблицы (когда узлы дерева разделяются или соединяются).

чтобы сделать индексирование все еще возможным, UROWID включает "логический id" (первичный ключ) и "вероятный физический id" (обычный ROWID), последний из которых может быть истек.


еще один +1 к WW, но просто добавить немного больше...

Если вопрос вождения заключается в том, Можете ли вы хранить ROWIDs для последующего использования, я бы сказал: "Не делайте этого".

вы можете использовать ROWIDs в транзакции - например, собирая набор ROWIDs для выполнения последующих операций-но вы должны никогда храните ROWIDs в таблице и предположим, что они будут в порядке, чтобы использовать позже.