这篇文章主要介绍HEAP表段空间管理。
崖山数据库段空间通过ASSM(自动段空间管理)来进行管理,主要由段头块、L2级块、L1级块、L0级块和heap data块(数据块)组成。
1.表类型简要介绍
表的类型,包括HEAP表、TAC表、LSC表和external表:
HEAP Table:行存表,采用段页式结构,主要适用于OLTP场景。
TAC Table (Transaction Analytics Columnar Table) :列存表,采用段页式结构,主要适用于实时分析场景。
LSC Table (Large-scale Storage Columnar Table):列存表,通过列存结构组织数据,主要适用于海量稳态数据的交互式分析场景。
- external Table: 外部表为一种表结构存储在数据库内,而数据存储在数据库外的特殊表类型。由于外部表的数据未存储在数据库内,因此基于行的所有DDL操作,如索引、行迁移、闪回等,均不适用于外部表
参数DEFAULT_TABLE_TYPE的值(HEAP/TAC/LSC)指定创建表类型,支持在线修改。同时,通过ORGANIZATION语法在创建表对象时将其指定为任意的表类型。
HEAP Table

TAC Table
可变列式存储区采用段页式管理(MCOL格式),每个列的数据集中存储,并实现in-place update。每个列的一批记录组成一个Batch,作为数据读取的基本单位。
记录TAC表的总体入口信息。
- Entry Block:入口Block,记录TAC表的相关统计信息、Slice的空闲位图及辅助信息。
- Segment Entry Block:记录表按列逻辑分割后的所有Segment信息。
- Column Entry Block:记录所有列的元数据信息。

LSC Table
可变列式存储区和稳态数据区的数据均按照表或分区进行组织,对应着Active Slices和Stable Slices两部分,其中Active Slices采用段页式存储(MCOL格式),Stable Slices采用对象存储( SCOL格式 )

2.段空间部分字段解析
这里仅介绍部分字段,其他同数据文件块类似的字段不做解释,具体可以参考:崖山数据库的数据文件分析与解读
实验通过创建一个heap表并插入数据,dump 相关数据文件,在线日志文件,以及undo文件进行分析。
2.1 位图块
默认三级位图块,分别L0、L1和L2,实现段空间的管理。
L0级位图块: 指向数据块的地址访问和L1级位图块
L1级位图块: 指向L0的地址范围和L2级位图块
L2级位图块: 指向L2的地址范围
0级位图块
block: 128
assm
head: id 0-128, type 32, instance id 0 lsn 41537, checksum: 0, change num 53, isEncrypted 0, isCompressed 0
dataOid: 2390, extent change number: 0 parent block: 0-129, slot: 0, freeness: 0, capacity: 1024, count: 16, level: 0
freeness[1]: count: 0:
freeness[2]: count: 0:
freeness[3]: count: 0:
freeness[4]: count: 0:
freeness[5]: count: 0:
freeness[6]: count: 0:
unformat: 0, lastActiveTime: 2024-05-01 09:48:49.228272, instanceId: 0 firstBlock: 4, firstFreeBlock: 0, nranges: 2,
range index: 0, range length: 8, start bid: 0-128
0. block: 0-128 freeness: 0, xo: -1 1. block: 0-129 freeness: 0, xo: -1 2. block: 0-130 freeness: 0, xo: -1 3. block: 0-131 freeness: 0, xo: -1
4. block: 0-132 freeness: 0, xo: -1 5. block: 0-133 freeness: 0, xo: -1 6. block: 0-134 freeness: 0, xo: -1 7. block: 0-135 freeness: 0, xo: -1
range index: 1, range length: 8, start bid: 0-136
0. block: 0-136 freeness: 0, xo: -1 1. block: 0-137 freeness: 0, xo: -1 2. block: 0-138 freeness: 0, xo: -1 3. block: 0-139 freeness: 0, xo: -1
4. block: 0-140 freeness: 0, xo: -1 5. block: 0-141 freeness: 0, xo: -1 6. block: 0-142 freeness: 0, xo: -1 7. block: 0-143 freeness: 0, xo: -1
xid count: 0, xid offset count: 0:
xid list:
0. NULL 1. NULL 2. NULL 3. NULL
4. NULL 5. NULL 6. NULL 7. NULL
8. NULL 9. NULL 10. NULL 11. NULL
12. NULL 13. NULL 14. NULL 15. NULL
16. NULL 17. NULL 18. NULL 19. NULL
20. NULL 21. NULL 22. NULL 23. NULL
24. NULL 25. NULL 26. NULL 27. NULL
28. NULL 29. NULL 30. NULL 31. NULL
32. NULL 33. NULL 34. NULL 35. NULL
36. NULL 37. NULL 38. NULL 39. NULL
40. NULL 41. NULL 42. NULL 43. NULL
44. NULL 45. NULL 46. NULL 47. NULL
48. NULL 49. NULL 50. NULL 51. NULL
52. NULL 53. NULL 54. NULL 55. NULL
56. NULL 57. NULL 58. NULL 59. NULL
60. NULL 61. NULL 62. NULL 63. NULL
tail: change num: 53
----------------------------------------------------------------------------------------------------------------------------------------------------
lsn 41537,日志序号(redo),逐渐递增,用来记录一组数据块的变化。
dataOid: 2390,对象ID(dba_Objects.object_id),不是数据对象ID(data_object_id)。
parent block: 0-129,上级块(父块)相对文件号0,块号129。
freeness: 0, 块可用空间的程度,0表示该块已分配且没有可用空间,5或者6表示块存在可用空间,255表示块未格式化。
capacity: 1024,容量大小1M,也即是1个L0级位图块,最大可以管理256个8K的数据块?
count: 16, 表示块数。
level: N,表示位图块级别
0,一级位图块
1,二级位图块
2,三级位图块
firstBlock: 4,表示第一个可用数据块(4. block: 0-132 )
nranges: 2,表示number range,管理的范围,这里管理2个range,分别是range 0和range 1,每个range管理8个blocks,(range index: 0, range length: 8 和 range index: 1, range length: 8)
1级位图块
block: 129
assm
head: id 0-129, type 32, instance id 0 lsn 41778, checksum: 0, change num 126, isEncrypted 0, isCompressed 0
dataOid: 2390, extent change number: 0 parent block: 0-130, slot: 0, freeness: 6, capacity: 1010, count: 20, level: 1
freeness[1]: count: 2:
freeness[2]: count: 2:
freeness[3]: count: 2:
freeness[4]: count: 2:
freeness[5]: count: 2:
freeness[6]: count: 2:
0. block: 0-128 freeness: 0, instance id: 0 1. block: 0-144 freeness: 0, instance id: 0 2. block: 0-160 freeness: 0, instance id: 0 3. block: 0-176 freeness: 0, instance id: 0
4. block: 0-192 freeness: 0, instance id: 0 5. block: 0-208 freeness: 0, instance id: 0 6. block: 0-224 freeness: 0, instance id: 0 7. block: 0-240 freeness: 0, instance id: 0
8. block: 0-256 freeness: 0, instance id: 0 9. block: 0-257 freeness: 0, instance id: 0 10. block: 0-384 freeness: 0, instance id: 0 11. block: 0-385 freeness: 0, instance id: 0
12. block: 0-512 freeness: 0, instance id: 0 13. block: 0-513 freeness: 0, instance id: 0 14. block: 0-640 freeness: 0, instance id: 0 15. block: 0-641 freeness: 0, instance id: 0
16. block: 0-768 freeness: 0, instance id: 0 17. block: 0-769 freeness: 0, instance id: 0 18. block: 0-896 freeness: 6, instance id: 0 19. block: 0-897 freeness: 6, instance id: 0
tail: change num: 126
----------------------------------------------------------------------------------------------------------------------------------------------------
2级位图块
block: 130
assm
head: id 0-130, type 32, instance id 0 lsn 41778, checksum: 0, change num 106, isEncrypted 0, isCompressed 0
dataOid: 2390, extent change number: 0 parent block: 63-67108863, slot: 65535, freeness: 6, capacity: 1024, count: 1, level: 2
freeness[1]: count: 1:
freeness[2]: count: 1:
freeness[3]: count: 1:
freeness[4]: count: 1:
freeness[5]: count: 1:
freeness[6]: count: 1:
0. block: 0-129 freeness: 6
tail: change num: 106
----------------------------------------------------------------------------------------------------------------------------------------------------
parent block: 63-67108863, 63表示相对文件号,也就是最后一个,说明二级位图块后不存在L3级位图块。这里也可以推算出,崖山数据库一个表空间最多可以容纳64个文件,相对文件号0-63;67108863表示最大块号,同理,崖山数据库支持block 大小为8K,16K和32K, 可以计算出单个数据文件最大分别为512GB、1TB和2TB。
2.2 段头块
段头块包括extents lhwm/extents hwm/extent ctrl/extents map等信息,其中map nodes,实际上指向数据块的地址,所以可以跳过段头块和L0/L1/L2位图块, 通过ROWID直接访问map nodes里面的地址来进行全表扫描获取数据,具体操作参考ROWID解析
block: 131
segment
head: id 0-131, type 33, instance id 0 lsn 41778, checksum: 0, change num 66, isEncrypted 0, isCompressed 0
segType: heap
dataOid: 2390
ssm tree: search entry: 0-129, level: 1
level[0]: ssm block count: 20, current block: 0-897
level[1]: ssm block count: 1, current block: 0-129
level[2]: ssm block count: 1, current block: 0-130
hwm L1: 0-897
hwm L1 node: 63
extents lhwm: block id: 0-132, extent idx: 0, map block: 63-67108863, offset: 0, blkIdx: 4, used block count: 4. lhwmL1: 0-128
extent ctrl: extent count: 22, block count: 896, map count: 0 , extent map offset: 380
last map block: 63-67108863, offset: 21, extents change number: 0
extents hwm: block id: 0-1024, extent idx: 21, offset: 21, unformatted block count: 0, used block count: 896, map block: 63-67108863
extents map: extent count: 22, capacity: 487, next map: 63-67108863, map nodes:
id: 0-128 size: 8
id: 0-136 size: 8
id: 0-144 size: 8
id: 0-152 size: 8
id: 0-160 size: 8
id: 0-168 size: 8
id: 0-176 size: 8
id: 0-184 size: 8
id: 0-192 size: 8
id: 0-200 size: 8
id: 0-208 size: 8
id: 0-216 size: 8
id: 0-224 size: 8
id: 0-232 size: 8
id: 0-240 size: 8
id: 0-248 size: 8
id: 0-256 size: 128
id: 0-384 size: 128
id: 0-512 size: 128
id: 0-640 size: 128
id: 0-768 size: 128
id: 0-896 size: 128
0. L1 block id: 0-128 data block id: 0-132
1. L1 block id: 0-128 data block id: 0-136
2. L1 block id: 0-144 data block id: 0-145
3. L1 block id: 0-144 data block id: 0-152
4. L1 block id: 0-160 data block id: 0-161
5. L1 block id: 0-160 data block id: 0-168
6. L1 block id: 0-176 data block id: 0-177
7. L1 block id: 0-176 data block id: 0-184
8. L1 block id: 0-192 data block id: 0-193
9. L1 block id: 0-192 data block id: 0-200
10. L1 block id: 0-208 data block id: 0-209
11. L1 block id: 0-208 data block id: 0-216
12. L1 block id: 0-224 data block id: 0-225
13. L1 block id: 0-224 data block id: 0-232
14. L1 block id: 0-240 data block id: 0-241
15. L1 block id: 0-240 data block id: 0-248
16. L1 block id: 0-256 data block id: 0-258
17. L1 block id: 0-384 data block id: 0-386
18. L1 block id: 0-512 data block id: 0-514
19. L1 block id: 0-640 data block id: 0-642
20. L1 block id: 0-768 data block id: 0-770
21. L1 block id: 0-896 data block id: 0-898
tail: change num: 66
ssm tree: search entry: 0-129, level: 1 , 自动段空间搜索入口L1 0-129,也即是二级位图块
level[0]: ssm block count: 20, current block: 0-897 ,自动段空间L0级块数量,共计20个,当前L0级块为0-897
level[1]: ssm block count: 1, current block: 0-129 ,自动段空间L1级块数量,共计1个,当前L1级块为0-129
level[2]: ssm block count: 1, current block: 0-130 ,自动段空间L2级块数量,共计1个,当前L1级块为0-130
hwm L1: 0-897 ,L1级位图块的高水位块,也就是当前分配L1级位图块管理的最后一个L0级块
extents lhwm: ????
extent ctrl: 扩展控制信息
extent count: 22, 扩展数,共计22个extents
block count: 896, 扩展管理的块数,共计896个blocks
extents hwm: 扩展高水位
block id: 0-1024, 高水位的块号
extent idx: 21,高水位扩展号(extent)
offset: 21, 扩展号的偏移值
unformatted block count: 0, 高水位线上未格式化的快数
used block count: 896,当前使用的块数
extents map: 扩展映射信息
extent count: 22, 扩展数量,共计22个extents
capacity: 487,
next map: 63-67108863, 下一个map信息,该值表示最大,没有下一个map
map nodes: 扩展map详细信息
2.3 数据块
block: 132
heap data
head: id 0-132, type 4, instance id 0 lsn 41793, checksum: 0, change num 133, isEncrypted 0, isCompressed 0
dataOid: 2390, extent change number: 0
block scn: 560005650895253504, map block: 0-128, slot: 4, freeness: 0
rows: 127, dirs: 127, xslots: 2, si xslots: 0, free size: 730, free begin: 7156, free end: 7886 free dir: 4095
row[0]: size: 52 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[1]: size: 52 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[2]: size: 52 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[3]: size: 52 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[4]: size: 52 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[5]: size: 52 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[6]: size: 52 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[7]: size: 52 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[8]: size: 52 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[9]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[10]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[11]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[12]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[13]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[14]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[15]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[16]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[17]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[18]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[19]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[20]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[21]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[22]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[23]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[24]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[25]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[26]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[27]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[28]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[29]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[30]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[31]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[32]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[33]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[34]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[35]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[36]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[37]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[38]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[39]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[40]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[41]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[42]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[43]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[44]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[45]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[46]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[47]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[48]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[49]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[50]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[51]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[52]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[53]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[54]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[55]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[56]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[57]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[58]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[59]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[60]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[61]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[62]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[63]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[64]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[65]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[66]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[67]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[68]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[69]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[70]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[71]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[72]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[73]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[74]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[75]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[76]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[77]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[78]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[79]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[80]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[81]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[82]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[83]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[84]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[85]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[86]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[87]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[88]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[89]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[90]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[91]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[92]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[93]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[94]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[95]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[96]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[97]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[98]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[99]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[100]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[101]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[102]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[103]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[104]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[105]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[106]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[107]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[108]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[109]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[110]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[111]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[112]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[113]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[114]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[115]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[116]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[117]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[118]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[119]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[120]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[121]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[122]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[123]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[124]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[125]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
row[126]: size: 56 xslot id: 0 columns: 4 format/link/migr/deleted/compact:1/0/0/0/0
xslot[0]: xid: 47-2328-5 active: 0 owscn: 0 fastcommit: 1 ura: block: 0-24735, ver: 0, dir: 152 ssn: 634564608 fsc: 35372 mfb: 1989 scn: 560005650895253504
xslot[1]: xid: 0-0-0 active: 0 owscn: 0 fastcommit: 0 ura: block: 0-0, ver: 0, dir: 0 ssn: 0 fsc: 0 mfb: 0 scn: 0
tail: change num: 133
----------------------------------------------------------------------------------------------------------------------------------------------------
block scn: 560005650895253504, 块SCN号,每个块有唯一的SCN
map block: 0-128, 映射的位图块,也即是管理该数据块的位图块
rows: 127,块存储的数据行数
dirs: 127,块里面的槽数
xslots: 2,事务槽数
free size: 730, free begin: 7156, free end: 7886, 块空间使用情况
format/link/migr/deleted/compact:1/0/0/0/0, 标识符号,数字0或者1表示
3.ROWID解析
ROWID,根据每一行数据所在物理地址信息生成一个全局唯一记录,定义格式如下:
ROWID的数据格式为dataoid:spaceid:fileid:blockid:dir。
dataoid:data object id,行所在的Segment的ID(DBA_OBJECTS.DATA_OBJECT_ID)
spaceid:space id,行所在的表空间的ID(V$TABLESPACE.ID)
fileid:file id,行所在数据文件在对应表空间中的绝对数据文件ID(V$DATAFILE.ID)
blockid:block id,行所在数据块在对应文件中的块ID
dir:行在数据块上的槽位
DBMS_ROWID包提供了一组内置的函数,共计3个ROWID_BLOCK_NUMBER, ROWID_RELATIVE_FNO, ROWID_ROW_NUMBER
,用于获取ROWID的数据块号blockId、相对文件号fileId和行号dir信息(目前不支持DBA_OBJECTS查询包相关信息)。
比如使用函数dbms_rowid.ROWID_BLOCK_NUMBER查询数据块0-132的数据:
SQL> SELECT rowid,* FROM leo01 WHERE dbms_rowid.ROWID_BLOCK_NUMBER(rowid)=132;
ROWID NUM RNUM XCHAR RDATE
-------------------------------------------- --------------------- ----------------------------- --------------------- ------------------------------------------------
2480:6:0:132:0 1 Row : 1 XXXXXXXXXXXXXXXXXXXX 2024-05-21
2480:6:0:132:1 2 Row : 2 XXXXXXXXXXXXXXXXXXXX 2024-05-22
2480:6:0:132:2 3 Row : 3 XXXXXXXXXXXXXXXXXXXX 2024-05-23
2480:6:0:132:3 4 Row : 4 XXXXXXXXXXXXXXXXXXXX 2024-05-24
2480:6:0:132:4 5 Row : 5 XXXXXXXXXXXXXXXXXXXX 2024-05-25
2480:6:0:132:5 6 Row : 6 XXXXXXXXXXXXXXXXXXXX 2024-05-26
2480:6:0:132:6 7 Row : 7 XXXXXXXXXXXXXXXXXXXX 2024-05-27
2480:6:0:132:7 8 Row : 8 XXXXXXXXXXXXXXXXXXXX 2024-05-28
2480:6:0:132:8 9 Row : 9 XXXXXXXXXXXXXXXXXXXX 2024-05-29
2480:6:0:132:9 10 Row : 10 XXXXXXXXXXXXXXXXXXXX 2024-05-30
2480:6:0:132:10 11 Row : 11 XXXXXXXXXXXXXXXXXXXX 2024-05-31
2480:6:0:132:11 12 Row : 12 XXXXXXXXXXXXXXXXXXXX 2024-06-01
2480:6:0:132:12 13 Row : 13 XXXXXXXXXXXXXXXXXXXX 2024-06-02
2480:6:0:132:13 14 Row : 14 XXXXXXXXXXXXXXXXXXXX 2024-06-03
2480:6:0:132:14 15 Row : 15 XXXXXXXXXXXXXXXXXXXX 2024-06-04
......
构建rowid的值来查询,比如查询0-132块的内容:
SQL> SELECT * FROM leo01 WHERE rowid>='2480:6:0:132:0' AND rowid<='2480:6:0:132:130';
NUM RNUM XCHAR RDATE
--------------------- ----------------------------- --------------------- ------------------------------------------------
1 Row : 1 XXXXXXXXXXXXXXXXXXXX 2024-05-21
2 Row : 2 XXXXXXXXXXXXXXXXXXXX 2024-05-22
3 Row : 3 XXXXXXXXXXXXXXXXXXXX 2024-05-23
4 Row : 4 XXXXXXXXXXXXXXXXXXXX 2024-05-24
5 Row : 5 XXXXXXXXXXXXXXXXXXXX 2024-05-25
6 Row : 6 XXXXXXXXXXXXXXXXXXXX 2024-05-26
7 Row : 7 XXXXXXXXXXXXXXXXXXXX 2024-05-27
8 Row : 8 XXXXXXXXXXXXXXXXXXXX 2024-05-28
.......
关于延迟段创建
通过segment creation deferred|immediate,指定创建表对象时,segment的创建方式是立即创建或延迟创建,临时表不支持该语法。
IMMEDIATE指立即创建,DEFERRED指延迟创建,若省略,默认为延迟创建。
如果表被truncate后,空间会被回收重用,dba_segments视图和v$segments视图也无法查询到段的信息。
SQL> col owner for a10
SQL> col table_name for a15
SQL> select owner,table_name,segment_deferred from dba_tables where table_name='LEO01';
OWNER TABLE_NAME SEGMENT_DEFERRED
---------- --------------- ----------------
SYS LEO01 Y
1 row fetched.
SQL> SELECT owner,segment_name,HEADER_FILE ,HEADER_BLOCK,blocks FROM dba_segments WHERE segment_name='LEO01';
OWNER SEGMENT_NAME HEADER_FILE HEADER_BLOCK BLOCKS
---------- ---------------------------------------------------------------- --------------------- ------------ ---------------------
SYS LEO01 0 131 51200
1 row fetched.
SQL> truncate table leo01;
Succeed.
SQL> SELECT owner,segment_name,HEADER_FILE ,HEADER_BLOCK,blocks FROM dba_segments WHERE segment_name='LEO01';
OWNER SEGMENT_NAME HEADER_FILE HEADER_BLOCK BLOCKS
---------- ---------------------------------------------------------------- --------------------- ------------ ---------------------
0 rows fetched.
SQL>




