ORACLE学习之三 ROWID的意义。

五.......ROWID的计算方法。
--64进制的数据

--实例
SQL> select rowid,id,name from t1;

ROWID                      ID NAME
------------------ ---------- --------------------
AAAMjiAAFAAAAAMAAA          1 a
AAAMjiAAFAAAAAMAAB          2 b

--A~Z 0~25
--a~z 26~51
--0~9 52~61
--+   62
--/   63

--AAAMji AAF AAAAAM AAA
前六位是该数据的段编号
AAAMji分别对应 0,0,0,12,35,34

SQL>select 12*64*64 + 35*64 + 34 as rowidvalue from dual  --结果可以得到是 51426

--查询该表的ID,也就是段ID(表和索引是段,有data_object_id的值),能得到一个数值(data_object_id的值)。这个

--数值和ROWID的前六位是相同的
SQL>select object_id ,data_object_id,object_name from dba_objects where object_name = 'T1'

 OBJECT_ID DATA_OBJECT_ID OBJECT_NAME
---------- -------------- ------------
     51426          51426 T1


AAF 代表 该数据所属于的数据文件编号;这里的值是5,即可以查出来文件名

SQL> select file_name from dba_data_files where file_id=5;

FILE_NAME
--------------------------------------------------------------------

D:\ORACLE\PRODUCT\10.2.0\OMF\ORCL\DATAFILE\O1_MF_XXX_76LB8FNJ_.DBF

AAAAAM 代表该行数据所属的第几个数据块。oralce默认每块8K字节。此数据在第12个数据块上。

AAA 代表该行数据是这个块上的第几条数据。这里可以看到,是第1条,序列号为0、

由上面的分析可以知道,第一个ROWID,是5号文件,块ID为12,这里的0号数据。

--从内存中选择该行所在对象在内存中的块编号的信息,,
-- 注意,这里是内存中的信息,重新启动后,不访问,则没有数据,因为使用的是data buffer。。
 SQL> select FILE#,BLOCK#,OBJD from v$bh where bjd =51426;

     FILE#     BLOCK#       OBJD
---------- ---------- ----------
         5         16      51426
         5         11      51426
         5         14      51426
         5          9      51426
         5         12      51426
         5         15      51426
         5         10      51426
         5         13      51426

可以看到该对象从 9开始,到16,一共占了8个块,这里是与以下查询吻合的。

SQL>select SEGMENT_NAME,FILE_ID,BLOCK_ID,BLOCKS from dba_extents where segment_name = 'T1'
SEGMENT_NAME FILE_ID    BLOCK_ID     BLOCKS
------------     ---------- ---------- ----------
T1                5          9            8
       
这时候,重新启动数据库之后,如果不使用slect * from t1,则v$bh中无此数据的块信息,除非访问过一次。
访问过,就留在databuffer中了。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21143887/viewspace-706933/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/21143887/viewspace-706933/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值