Что может привести к изменению 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 в таблице и считаете, что они будут в порядке для использования на более поздний срок.