Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

0

积分

1

好友

48

主题
1#
发表于 2014-2-24 19:55:23 | 查看: 2339| 回复: 1
在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';
  1. Block header dump:  0x0541efdc
  2. Object id on Block? Y
  3. seg/obj: 0x127d4  csc: 0x0e.34006762  itc: 2  flg: E  typ: 1 - DATA
  4.      brn: 0  bdba: 0x541efd9 ver: 0x01 opc: 0
  5.      inc: 0  exflg: 0
复制代码
当select * from emp where rowid='AAASfUAAVAAAe/cAAA'的时候oracle怎么从这个block 的信息上知道是这个block上哪个表对用的是emp呢。 因为data block只记录了data object id,在同一个cluster里的表data object id都是一样的;如果这样怎么能找到对应的行呢

2#
发表于 2014-2-25 13:44:58
rowid 一样, 但是SELECT 语句的语义是完全不同的, ORACLE的执行层可以知道到底要返回那部分的数据,这对用户是透明的

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-12-21 06:00 , Processed in 0.045897 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569