数据块转储及RDBA的转换

数据块转储及RDBA的转换

原文链接:

http://www.eygle.com/internal/How_to_dump_datablock.htm

<!-- #BeginDate format:wfcIS1m -->Tuesday, 2004-08-31 17:51<!-- #EndDate --> Eygle

<!--DWLayoutEmptyCell-->

很多时候我们在进行进一步研究时需要转储(dump)Oracle的数据块,以研究其内容,Oracle提供了很好的方式,我们通过以下例子简单说明一下:




        

很多人经常提出的一个问题是,rdba是如何转换的?

rdba: 0x004062ba (1/25274)

我们通过这个例子介绍一下.

rdba从Oracle6->Oracle7->Oracle8发生了三次改变:

在Oracle6中,rdba由6位2进制数表示,也就是说数据块最多只能有2^6=64个数据文件(去掉全0和全1, 实际上最多只能代表62个文件)

在Oracle7中,rdba中的文件号增加为10位,为了向后兼容,从Block号的高位拿出4位作为文件号的高位.这样从6->7的Rowid无需发生变化.
而数据文件的个数理论上则扩展到了1022个(去掉全0和全1),在Oracle7中,rowid格式为:BBBBBBBB.RRRR.FFFF

在Oracle8中,文件号仍然用10位表示,只是不再需要置换,为了向后兼容,同时引入了相对文件号(rfile#),所以从Oracle7到Oracle8,Rowid仍然无需发生变化.
在Oracle8i中,Oracle引入了dataobj#,rowid的格式变为:OOOOOOFFFBBBBBBSSS,Oracle通过dataobj#进一步向上定为表空间等,从而使每个表空间的数据文件数量理论上可以达到1022个

举例说明如下:

在Oracle6中:
比如: file 8, block 56892
		26位block号==56892
      vv  vvvvvvvv  vvvvvvvv  vvvvvvvv
00100000  00000000  11011110  00111100 
^^^^^^
6位文件号==8


在Oracle7中:
比如:File 255, block 56892 

11111100 11000000  11011110  00111100
 F   C    C   0     D   E     3  C 
\_____/\___/\_______________________/ 
   |     |	     | 		
   |     |	Block = 0xDE3C = 56892    	
   \_____________	    		
         |  \ 		
         V   V    		      
        0011   111111 = 0xFF = 255 --注意这里高位和低位要置换才能得出正确的file#

在Oracle8中:
比如:File 255, block 56892 

11111100 11000000  11011110  00111100
 F   C    C   0     D   E     3  C 
\_____/\___/\_______________________/ 
   |     |	     | 		
   |     |	Block = 0xDE3C = 56892    	
   \_____________	    		
         |  \ 		
         V   V    		      
      0011 1111 0011 = 03F3 = 1011 --这就是相对文件号		
		

对于我们测试中的例子:

rdba: 0x004062ba (1/25274)

也就是:0000 0000 0100 0000 0110 0010 1011 1010

前10位为rfile#: 0000 0000 01 = 1

后22位为Block#:00 0000 0110 0010 1011 1010 = 25274

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值