lory 发表于 2014-2-24 19:55:23

cluster table里的rowid

在cluster里的表,会出现rowid一样的情况
在oracle 10.2.0.5测试环境中:
emp和 dept都是一个index cluster的表,他们之间就有rowid相同的行。

select rowid from emp
intersect
select rowid from dept;
AAASfUAAVAAAe/cAAA
AAASfUAAVAAAe/cAAB
AAASfUAAVAAAe/cAAC
AAASfUAAVAAAe/cAAD

dump其中一个block,block header就只记录了data object id 。

select dbms_rowid.rowid_relative_fno(rowid) rfid, dbms_rowid.rowid_block_number(rowid) block_id from emp where rowid='AAASfUAAVAAAe/cAAA';Block header dump:  0x0541efdc
Object id on Block? Y
seg/obj: 0x127d4  csc: 0x0e.34006762  itc: 2  flg: E  typ: 1 - DATA
     brn: 0  bdba: 0x541efd9 ver: 0x01 opc: 0
     inc: 0  exflg: 0当select * from emp where rowid='AAASfUAAVAAAe/cAAA'的时候oracle怎么从这个block 的信息上知道是这个block上哪个表对用的是emp呢。 因为data block只记录了data object id,在同一个cluster里的表data object id都是一样的;如果这样怎么能找到对应的行呢

Maclean Liu(刘相兵 发表于 2014-2-25 13:44:58

rowid 一样, 但是SELECT 语句的语义是完全不同的, ORACLE的执行层可以知道到底要返回那部分的数据,这对用户是透明的
页: [1]
查看完整版本: cluster table里的rowid