« 数据块转储及RDBA的转换 | Blog首页 | 字符集问题的初步探讨(二)-数据库的字符集 »
Oracle HowTo:如何进行数据块转储及RDBA的转换
作者:eygle |【转载时请以超链接形式标明文章出处和作者信息及本声明】链接:http://www.eygle.com/archives/2004/08/how_to_convert_rdba.html
很多时候我们在进行进一步研究时需要转储(dump)Oracle的数据块,以研究其内容,Oracle提供了很好的方式,我们通过以下例子简单说明一下:
|
[oracle@jumper udump]$ sqlplus "/ as sysdba" SQL*Plus: Release 9.2.0.3.0 - Production on Tue Aug 31 17:01:27 2004 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
SQL> select rowid,deptno,dname,loc from scott.dept; ROWID DEPTNO DNAME LOC SQL> select file_id,block_id,blocks from dba_extents where segment_name='DEPT'; FILE_ID BLOCK_ID BLOCKS
System altered. SQL> ! *** 2004-08-31 17:04:27.820 |
很多人经常提出的一个问题是,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
-The End-
历史上的今天...
>> 2009-08-31文章:
>> 2007-08-31文章:
>> 2005-08-31文章:
------
这篇 【Oracle HowTo:如何进行数据块转储及RDBA的转换】来自 eygle.com | CSDN网摘| del.icio.us|Google订阅 | 鲜果订阅 | 抓虾订阅
By eygle on 2004-08-31 15:30 | Comments (1) | Posted to HowTo | Edit |
Listed below are links to weblogs that reference Oracle HowTo:如何进行数据块转储及RDBA的转换:
» Oracle HowTo:使用DBMS_UTILITY转换Block地址 from Friends Life and Oracle
很多时候,我们可以从Oracle的Trace文件中获得Block的DBA(Data Block Address),有时候需要对这个地址进行转换才能得到相应的Block地址。 [Read More]
Tracked on September 4, 2006 3:49 PM
留言 (1)
tab 0, row 1, @0x1f70
tl: 22 fb: --H-FL-- lb: 0x0 cc: 3
col 0: [ 2] c1 15
col 1: [ 8] 52 45 53 45 41 52 43 48
col 2: [ 6] 44 41 4c 4c 41 53
tab 0,
@0x1f70
tl: 22
分别表示什么意思?
Posted by: aa at August 10, 2008 9:20 PM
