Что может вызвать изменение Oracle ROWID? - PullRequest
14 голосов
/ 12 января 2009

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

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

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

Ответы [ 3 ]

31 голосов
/ 12 января 2009

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

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

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

8 голосов
/ 12 января 2009

Еще +1 к WW, но только для того, чтобы добавить немного больше ...

Если основной вопрос заключается в том, можете ли вы сохранить ROWID для дальнейшего использования, я бы сказал: «Не делайте этого».

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

8 голосов
/ 12 января 2009

+ 1 @ WW

В сторону:

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

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

...