cangos

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

1、select ROWID from TT WHERE ROWNUM=1 FOR UPDATE  获取到一个ROWID:'AAAOcTAAJAAAAASAAB'

2、ROWID 可以分为4段进行解析,使用64进制方式存储

     AAAOcT                   AAJ                   AAAAAS                   AAB

     段名称         相对文件编号       数据块编号                数据块上第几条记录

3、其中A-Z代表0-25,a-z代表26-51,0-9代表52-61,+代表62,/代表63

4、换算AAAOcT=14*64*64+28*64+19=59155   

          AAJ      =9

          AAAAAS=18

          AAB      =1

5、通过select  owner,object_name,object_id,data_object_id from dba_objects t where object_id = 59155

     可以看到: SYS     TT                59155     59155

     其中object_id和data_object_id在正常情况下是相等的,在truncate和move表后,data_object_id会发生变更

     其实object_id和data_object_id同样是表示数据库对象的一个唯一标志,但是object_id表示的是逻辑id,data_object_id表示的是物理id。

     如果一些object没有物理属性的话那它就不存在data_object_id,例如procedure,function,package,data type,db link,mv定义,view定义,临时表,分区表定义等等这些

     object都是没有对应着某个segment,因此它们的data_object_id都为空。

     例如:先创建一个表TTT:create table ttt as select * form tt where rownum<10

     然后select  owner,object_name,object_id,data_object_id from dba_objects t where object_NAME = 'TTT'可以看到如下结果:

                     SYS    TTT               59164     59164 

     执行truncate table TTT后再执行select  owner,object_name,object_id,data_object_id from dba_objects t where object_NAME = 'TTT'

                     SYS    TTT               59164     59165

     其中data_object_id发生了改变。

     使用alter table TTT move后再执行select  owner,object_name,object_id,data_object_id from dba_objects t where object_NAME = 'TTT'

                     SYS    TTT               59164     59168

     其中data_object_id也发生了改变。

6、使用SELECT FILE_ID,RELATIVE_FNO,TABLESPACE_NAME FROM DBA_DATA_FILES T WHERE T.file_id='9';

posted on 2012-02-08 11:50  cangos  阅读(592)  评论(0编辑  收藏  举报