Что может привести к изменению идентификатора строки Oracle?
Вопрос
AFAIK ROWID в Oracle представляет физическое местоположение записи в соответствующем файле данных.В каких случаях ROWID записи может измениться ?
Единственное, что мне известно, - это ОБНОВЛЕНИЕ секционированной таблицы, которое "перемещает" запись в другой раздел.
Есть ли другие случаи ?Большинство наших баз данных - Oracle 10.
Решение
Как вы уже сказали, это происходит всякий раз, когда строка физически перемещается на диск, например:
- Экспорт /импорт таблицы
- ИЗМЕНИТЬ ТАБЛИЦУ XXXX ПЕРЕМЕСТИТЬ
- ИЗМЕНИТЬ ТАБЛИЦУ XXXX УМЕНЬШИТЬ ПРОСТРАНСТВО
- ТАБЛИЦА ВОСПОМИНАНИЙ XXXX
- Разделение раздела
- Обновление значения таким образом, чтобы оно перемещалось в новый раздел
- Объединение двух разделов
Если находится в таблице, организованной по индексу, то обновление первичного ключа также даст вам другой ROWID.
Другие советы
+1 @WW
В сторону:
ROWID для таблиц, организованных по индексу, различаются (я считаю, что они называются UROWID), поскольку физическое расположение строки может изменяться во время обновления таблицы (когда узлы дерева разделяются или объединяются). Р>
Чтобы сделать индексацию все еще возможной, UROWID включает в себя «логический идентификатор»; (первичный ключ) и «вероятный физический идентификатор»; (обычный ROWID), последний из которых может быть истек.
Еще один +1 к WW, но только для того, чтобы добавить немного больше ...
Если основной вопрос заключается в том, можете ли вы сохранить ROWID для последующего использования, я бы сказал, "не делайте этого".
Вы можете использовать ROWID в транзакции, например, собирая набор ROWID для выполнения последующих операций, но вы должны никогда хранить ROWID в таблице и предполагать, что они ' будет в порядке, чтобы использовать позже.