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

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

Тот, кто известен мне, - это ОБНОВЛЕНИЕ на секционированной таблице, которая "перемещает" запись в другой раздел.

Есть ли еще случаи? Большинство наших БД - это Oracle 10.

Ответы

Ответ 1

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

  • Экспорт/импорт таблицы
  • ALTER TABLE XXXX MOVE
  • ALTER TABLE XXXX SHRINK SPACE
  • ТАБЛИЦА FLASHBACK XXXX
  • Разделение раздела
  • Обновление значения для перехода на новый раздел
  • Объединение двух разделов

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

Ответ 2

+1 @WW

В стороне:

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

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

Ответ 3

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

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

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