Oracle的逻辑结构包括表空间、数据段、分区、数据块;
1.数据块(block)
数据块是数据库中最基本的存储单位。
数据块的大小是由初始化参数DB_BLOCK_SIZE指定的,这个值通常是8K,也可以定义成2KB、4KB、16KB、32KB、64KB。
数据块大小设置后不能更改,但是可以创建不同块大小的表空间。
数据块结构
数据块头:记录数据块的身份信息,包括数据块地址、数据块类型、事务表
Row Directory:数据块内的记录相对于数据块头的偏移量,可以看成是内部指针。
Free Space:数据块的空闲空间;
Used Space:数据记录占用的空间。
2.分区(Extent)
连续的数据块组成了一个分区,意义在于简化空间管理的复杂性。
3.段(Segment)
段是由Extent组成的,但并不要求Extent必须连续。
4.表空间
表空间是醉高层的逻辑结构,每个表空间由若干个物理文件组成。
查看表空间的大小及其使用率:
SELECT Upper(F.TABLESPACE_NAME) "表空间名",
D.TOT_GROOTTE_MB "表空间大小(M)",
D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",
To_char(Round(( D.TOT_GROOTTE_MB - F.TOTAL_BYTES ) / D.TOT_GROOTTE_MB * 100, 2), '990.99')
|| '%' "使用比",
F.TOTAL_BYTES "空闲空间(M)",
F.MAX_BYTES "最大块(M)"
FROM (SELECT TABLESPACE_NAME,
Round(Sum(BYTES) / ( 1024 * 1024 ), 2) TOTAL_BYTES,
Round(Max(BYTES) / ( 1024 * 1024 ), 2) MAX_BYTES
FROM SYS.DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F,
(SELECT DD.TABLESPACE_NAME,
Round(Sum(DD.BYTES) / ( 1024 * 1024 ), 2) TOT_GROOTTE_MB
FROM SYS.DBA_DATA_FILES DD
GROUP BY DD.TABLESPACE_NAME) D
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
ORDER BY 1;