一、数据块的地址概念
1. dba(data block address):
表示定位特定一个块的一种方式,其前10位表示块所在的(绝对)文件号,后22位表示该文件上的第几号块,即块号。
例如,某个回滚块的地址0x00800615 , 则
下面把dba翻译一下
- sys@ORCL> select to_number('00800615','xxxxxxxx') from dual;
- TO_NUMBER('00800615','XXXXXXXX')
- --------------------------------
- 8390165
- sys@ORCL> select dbms_utility.data_block_address_file(8390165) from dual;
- DBMS_UTILITY.DATA_BLOCK_ADDRESS_FILE(8390165)
- ---------------------------------------------
- 2
- sys@ORCL> select dbms_utility.data_block_address_block(8390165) from dual;
- DBMS_UTILITY.DATA_BLOCK_ADDRESS_BLOCK(8390165)
- ----------------------------------------------
- 1557
2.uba(undo block address):
将uba(0x00800615.0105.14)分解一下:00800615,即DBA,表明第一号文件上的第1557个回滚块;14是irb信息(回滚的起点),即undo块上的一个undo记录对应的记录号;0105,表示undo记录号为14的undo记录已经被覆盖或说修改了261次。
3.RBA(redo block address)
RBA: 0x000605.00017b82.01a4由三部分组成:
0x000605:日志的序列号
00017b82: redo日志中块号
01a4:日志文件中块内部的偏移量
二、事务编号XID:
将xid(0x0009.01a.00000162)分解一下:0009表明该事务指向9号回滚段,01a表明该事务指向9号回滚段的段头上的26号事务槽,00000162表明该事务槽第354次被覆盖(因为回滚段是循环使用的)。
三、rowid
即表的每一行oracle都会自动加上一个rowid,rowid由该数据行的所在表的逻辑对象号+该表所在的相对文件号+该文件的第几个块号+该块上的第几个数据行号组成。
select rowid,dbms_rowid.rowid_object(rowid) object_id,dbms_rowid.rowid_relative_fno(rowid) as fno, dbms_rowid.rowid_block_number(rowid),dbms_rowid.rowid_row_number(rowid) num,rowidtochar(rowid) as blkno from ltb where id=1;
ROWID FNO BLKNO ------------------ ---------- ---------- AAAGA8AAIAAAADOAAA 8 206
注意:在未超出1023前,(绝对)文件号和相对文件号的值是一样的