Oracle Data storage - блоки

Если строка переносится (или цепочка), ее ROWID не изменяется, чтобы отразить новый блок. Почему может быть полезно сохранить старый rowid, даже если он указывает на блок, где строка больше не находится?

1 ответ

Том Кайт ответил на этот вопрос несколько лет назад.

Смотрите: https://asktom.oracle.com/pls/apex/asktom.search?tag=row-migration

Он описывает причины в два раза:

  • Оракул хочет сохранить rowid постоянный во всех возможных случаях, чтобы он не изменился неожиданно и не сломал инструменты, которые на него полагаются.

  • Иногда более эффективно тратить дополнительные операции ввода-вывода для отслеживания переадресации. rowid чем "обновить тонны данных индекса", когда происходит миграция.

Лично эта вторая причина никогда не имела смысла для меня. Не ясно, почему поддержание индекса потребует большего, чем удаление исходной записи (как это происходит в DELETE заявление) и добавление новой записи (как это произошло бы в INSERT) заявление. Да, это больше работы, но если вы не запросите данные достаточно, чтобы оправдать дополнительную работу, у вас не будет индекса в первую очередь.

Я верю первой причине, хотя. Oracle, кажется, пытается сохранить rowids неизменным, когда это возможно. Я не знаю, есть ли фундаментальная причина для этого или просто потому, что некоторые из их инструментов (например, Oracle Forms) полагаются на это.

Другие вопросы по тегам