Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 уникальность rowid  [new]
legg
Member

Откуда: Москва
Сообщений: 6599
Здравстуйте.
расскажите, пожалуйста, как такое может быть? у разных строк выводится один и тот же rowid, и что показывает substr?

Oracle 9i


select rownum,rowid,substr(rowid,1,30) from tabl
2 /

ROWNUM ROWID SUBSTR(ROWID,1,30)
--------- ------------------ ------------------------------
1 AEAtWJI4DDCMyYMDQ0 *BALViY4DwjMmDDQ0MDAwMDAwMDUwN
2 AEAtWJI4DDCMyYMDQ0 *BALViY4DwjMmDDQ0MDAwMDAwMDUxM
3 AEAtWJI4DDCMyYMDQ0 *BALViY4DwjMmDDQ0MDAwMDAwMTM3O
4 AEAtWJI4DDCMyYPDU1 *BALViY4DwjMmDzU1OTk5OTk1NTUyN
5 AEAtWJI4DDCMyYPDU1 *BALViY4DwjMmDzU1OTk5OTk1NTU1M
6 AEAtWJI4DDCMyYMDYx *BALViY4DwjMmDDYxMDAwMDAwMDEyN
7 AEAtWJI4DDCNyQIE4z *BALViY4DwjckCE4zNzEzNTA0BVZPT
8 AEAtWJI4DDCNyQIE4z *BALViY4DwjckCE4zNzEzNjA0BVZPT
9 AEAtWJI4DDCNyQIE42 *BALViY4DwjckCE42ODEwODAxBVZPT
10 AEAtWJI4DDCQSMMDE1 *BALViY4DwkEjDDE1OTkwMTE1OTkwM
11 AEAtWJI4DDCQSMGDky *BALViY4DwkEjBjkyNDcwOAhNRVJDR
12 AEAtWJI4DDCTVAFDMw *BALViY4Dwk1QBTMwMzU5C1RIUkVFL
13 AEAtWJI4DDCTVAFDMy *BALViY4Dwk1QBTMyMzkyCE1FUkNFR
14 AEAtWJI4DDCXB8IDcx *BALViY4DwlwfCDcxODM5MjIzBVZPT
15 AEAtWJI4DDCXCoKDky *BALViY4DwlwqCjkyOTIwNTM1NjgLV



а
select rowidtochar(rowid) from tabl tt  
ругается ora-01410 (инвалидный rowid)
6 май 11, 17:55    [10618960]     Ответить | Цитировать Сообщить модератору
 Re: уникальность rowid  [new]
Петрушка
Member

Откуда:
Сообщений: 139
кластер?
6 май 11, 17:56    [10618969]     Ответить | Цитировать Сообщить модератору
 Re: уникальность rowid  [new]
_Nikotin
Member

Откуда: СПб
Сообщений: 2965
скорее IOT
6 май 11, 18:02    [10618984]     Ответить | Цитировать Сообщить модератору
 Re: уникальность rowid  [new]
legg
Member

Откуда: Москва
Сообщений: 6599
_Nikotin
Петрушка

нет)
_Nikotin
скорее IOT

угу. в этом и есть дело??? к такой записи можно обратиться по rowid?
6 май 11, 18:10    [10619026]     Ответить | Цитировать Сообщить модератору
 Re: уникальность rowid  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18339
legg
к такой записи можно обратиться по rowid?

Можно
6 май 11, 18:16    [10619062]     Ответить | Цитировать Сообщить модератору
 Re: уникальность rowid  [new]
legg
Member

Откуда: Москва
Сообщений: 6599
andrey_anonymous
legg
к такой записи можно обратиться по rowid?

Можно

спасибо )
6 май 11, 18:23    [10619093]     Ответить | Цитировать Сообщить модератору
 Re: уникальность rowid  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18339
legg
andrey_anonymous
пропущено...

Можно

спасибо )

SQL> create table ane_t (a primary key, b ) organization index as select rownum, 'a' from dual connect by level < 10;
 
Table created
 
SQL> select rowid from ane_t;
 
ROWID
--------------------------------------------------
*BASAmGQCwQL+
*BASAmGQCwQP+
*BASAmGQCwQT+
*BASAmGQCwQX+
*BASAmGQCwQb+
*BASAmGQCwQf+
*BASAmGQCwQj+
*BASAmGQCwQn+
*BASAmGQCwQr+
 
9 rows selected
 
SQL> select * from ane_t where rowid = '*BASAmGQCwQP+';
 
         A B
---------- -
         2 a
 
SQL> 
...вот только какой смысл...
6 май 11, 18:30    [10619121]     Ответить | Цитировать Сообщить модератору
 Re: уникальность rowid  [new]
legg
Member

Откуда: Москва
Сообщений: 6599
andrey_anonymous,

в Вашем примере rowid изначально идет в виде, в который у меня приходит после сабстра. это от версии оракла зависит?

а смысл - мне казалось удобным к строке по rowid иногда обращаться, если приходится возвращаться к ней многократно.
6 май 11, 18:35    [10619136]     Ответить | Цитировать Сообщить модератору
 Re: уникальность rowid  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18339
SQL> create table ane_t (a primary key, b ) organization index as select rpad(rownum,20,'x'), 'a' from dual connect by level < 10;
 
Table created
 
SQL> select rowid from ane_t;
 
ROWID
--------------------------------------------------
*BASAmGQUMXh4eHh4eHh4eHh4eHh4eHh4eHj+
*BASAmGQUMnh4eHh4eHh4eHh4eHh4eHh4eHj+
*BASAmGQUM3h4eHh4eHh4eHh4eHh4eHh4eHj+
*BASAmGQUNHh4eHh4eHh4eHh4eHh4eHh4eHj+
*BASAmGQUNXh4eHh4eHh4eHh4eHh4eHh4eHj+
*BASAmGQUNnh4eHh4eHh4eHh4eHh4eHh4eHj+
*BASAmGQUN3h4eHh4eHh4eHh4eHh4eHh4eHj+
*BASAmGQUOHh4eHh4eHh4eHh4eHh4eHh4eHj+
*BASAmGQUOXh4eHh4eHh4eHh4eHh4eHh4eHj+
 
9 rows selected
 
SQL> select * from ane_t where rowid = '*BASAmGQUMnh4eHh4eHh4eHh4eHh4eHh4eHj+';
 
A                                                            B
------------------------------------------------------------ -
2xxxxxxxxxxxxxxxxxxx                                         a
 
SQL> 

Что касается удобства обращения по rowid... И с heap-организованными не советую, а уж применительно к IOT - почитайте для начала что это такое.
6 май 11, 19:01    [10619180]     Ответить | Цитировать Сообщить модератору
 Re: уникальность rowid  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
andrey_anonymous,
Ваш тесткейс не имитирует ситуацию автора, у которого rowid для нескольких строк совпадают. По-моему это наиболее интересный момент.
andrey_anonymous
И с heap-организованными не советую
А оракл советует:
http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/datatype.htm#sthref3899
Physical rowids provide the fastest possible access to a row of a given table.
А по поводу ИОТ и логических rowid для них написано такое:
http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/datatype.htm#sthref3936
When a row's physical location changes, the logical rowid remains valid even if it contains a guess, although the guess could become stale and slow down access to the row.
Мне че-та казалось, что эти все межблочные миграции могут привести к таким rowid по которым будет более медленным доступ, но они по прежнему остаются уникальными. Разве нет?
6 май 11, 20:16    [10619322]     Ответить | Цитировать Сообщить модератору
 Re: уникальность rowid  [new]
-2-
Member

Откуда:
Сообщений: 15330
dbms_photoshop
Мне че-та казалось, что эти все межблочные миграции могут привести к таким rowid по которым будет более медленным доступ, но они по прежнему остаются уникальными. Разве нет?
Они у автора и есть уникальные, только rowid-часть у некоторых Urowid совпадает. Чтобы правильно обращаться, нужно сохранять значение в переменной правильного типа. С другой стороны, IOT для того и придуман, чтобы обращаться по нормальному ключу.
6 май 11, 21:47    [10619581]     Ответить | Цитировать Сообщить модератору
 Re: уникальность rowid  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18339
dbms_photoshop
andrey_anonymous,
Ваш тесткейс не имитирует ситуацию автора, у которого rowid для нескольких строк совпадают.

Ничего у него не совпадает.
Он полный rowid не видит, потому как rowid IOT - это не совсем rowid в привычном (heap-organized tables) понимании

dbms_photoshop
andrey_anonymous
И с heap-организованными не советую
А оракл советует:
http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/datatype.htm#sthref3899
Physical rowids provide the fastest possible access to a row of a given table.

Не советует. Констатирует.
Однако кроме времени доступа есть еще несколько аспектов, связанных с rowid. Например, rowid может... устареть. Это существенно ограничивает область применения такого пути доступа в приложении "в чистом виде". Вернее, практически исключает.
7 май 11, 03:13    [10620226]     Ответить | Цитировать Сообщить модератору
 Re: уникальность rowid  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54380
andrey_anonymous
Однако кроме времени доступа есть еще несколько аспектов, связанных с rowid. Например, rowid может... устареть. Это существенно ограничивает область применения такого пути доступа в приложении "в чистом виде". Вернее, практически исключает.
ДОА с блокировкой текущей строки по rowid перечитывает ее значение в БД и сравнивает с данными в датасете.
если что-то не совпадает - редактировать не даёт.
7 май 11, 08:33    [10620296]     Ответить | Цитировать Сообщить модератору
 Re: уникальность rowid  [new]
?
Guest
автор
Например, rowid может... устареть. Это существенно ограничивает область применения такого пути доступа в приложении "в чистом виде". Вернее, практически исключает.


Вы читали раритетную документацию по Oracle 5?
С тех пор термин "устареть" для rowid исчез...

Forms успешно пользуются доступом по rowid уже почти 25 лет

Если DBA не маньяк и не делает shrink в рабочие часы, все OK.

Есть конечно таблицы с активностью insert/delete где могут быть проблемы, но и они легко обходятся указанием в WHERE кроме ROWID и других полей.
А доступ остается по нашему замечательному Oracle rowid. Ни одна другая СУБД не имеет такого стабильного аналога
7 май 11, 09:43    [10620334]     Ответить | Цитировать Сообщить модератору
 Re: уникальность rowid  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18339
?
Вы читали раритетную документацию по Oracle 5?
С тех пор термин "устареть" для rowid исчез...

Если DBA не маньяк и не делает shrink в рабочие часы, все OK.


А мужики-то не знают...
SQL> select rowid, a from ane_t;
 
ROWID                       A
------------------ ----------
AAAaUMAAEAAAootAAA          1
 
SQL> update ane_t set a=15 where a=1;
 
1 row updated
 
SQL> select rowid, a from ane_t;
 
ROWID                       A
------------------ ----------
AAAaUNAAEAAAorFAAA         15
 
SQL> 
7 май 11, 13:32    [10620734]     Ответить | Цитировать Сообщить модератору
 Re: уникальность rowid  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51765

?
Ни одна другая СУБД не имеет такого стабильного аналога

Да неужели?.. Какая, например, не имеет?

Posted via ActualForum NNTP Server 1.4

7 май 11, 13:51    [10620785]     Ответить | Цитировать Сообщить модератору
 Re: уникальность rowid  [new]
bdsm_sql
Member

Откуда:
Сообщений: 948
andrey_anonymous
?
Вы читали раритетную документацию по Oracle 5?
С тех пор термин "устареть" для rowid исчез...

Если DBA не маньяк и не делает shrink в рабочие часы, все OK.


А мужики-то не знают...
SQL> select rowid, a from ane_t;
 
ROWID                       A
------------------ ----------
AAAaUMAAEAAAootAAA          1
 
SQL> update ane_t set a=15 where a=1;
 
1 row updated
 
SQL> select rowid, a from ane_t;
 
ROWID                       A
------------------ ----------
AAAaUNAAEAAAorFAAA         15
 
SQL> 

если ROW MOVEMENT, то на самом деле это DELETE+INSERT..
7 май 11, 13:55    [10620805]     Ответить | Цитировать Сообщить модератору
 Re: уникальность rowid  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18339
bdsm_sql
если ROW MOVEMENT, то на самом деле это DELETE+INSERT..

На самом деле это серия операций по iSCSI.
Или - определенная комбинация магнитных полей.
Насколько глубоко надо забраться в дебри, чтобы понять, что конечному приложению до этого дела никакого нет, если оно формулировало update?
7 май 11, 15:03    [10621100]     Ответить | Цитировать Сообщить модератору
 Re: уникальность rowid  [new]
Петрушка
Member

Откуда:
Сообщений: 139
ну мне кажется что это дело вкуса все-таки
в тех же текстовых индексах оракла ROWID и используется, и хранится в БД
10 май 11, 11:15    [10627952]     Ответить | Цитировать Сообщить модератору
 Re: уникальность rowid  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18339
Петрушка
ну мне кажется что это дело вкуса все-таки
в тех же текстовых индексах оракла ROWID и используется, и хранится в БД

При разработке пользовательского индекса реализуется интерфейс ODCIIndex, посредством которого СУБД "автомагически" актуализирует состояние индекса.
10 май 11, 14:26    [10629429]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить