Тот же ROWID в кластеризованных таблицах Oracle - PullRequest
1 голос
/ 20 сентября 2011

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

Я понимаю, что строки в кластеризованных таблицах сохраняются в одном и том же блоке базы данных, но, поскольку ROWID включает номер строки, не должно ли это различать две строки в блоке базы данных?

Ответы [ 2 ]

1 голос
/ 20 сентября 2011

Прост. Поскольку «дружественные» строки кластеризованной таблицы хранятся вместе в блоке, это означает, что вы можете иметь один и тот же rowid.

На рисунке ниже (из frontiernet ) первая строка отдела имеет rownumber 1, а первая строка emp имеет rownumber 1. Это первый случай.

После этого у нас есть emp 2, emp 3 ... После всех emp в этом отделе, если есть достаточно места, у вас есть второй ряд для dept, но его rowid был обнаружен для emp 2 в предыдущем отделе.

и т. Д.

Это происходит потому, что номер строки из идентификатора строки относительно ее таблицы и текущего блока.

picture

0 голосов
/ 20 сентября 2011

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

checkout: http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/pseudocolumns008.htm

...