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