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

StackOverflow https://stackoverflow.com/questions/435109

  •  10-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

  • Экспорт /импорт таблицы
  • ИЗМЕНИТЬ ТАБЛИЦУ XXXX ПЕРЕМЕСТИТЬ
  • ИЗМЕНИТЬ ТАБЛИЦУ XXXX УМЕНЬШИТЬ ПРОСТРАНСТВО
  • ТАБЛИЦА ВОСПОМИНАНИЙ XXXX
  • Разделение раздела
  • Обновление значения таким образом, чтобы оно перемещалось в новый раздел
  • Объединение двух разделов

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

Другие советы

+1 @WW

В сторону:

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top