下面咱们就具体了解一下Oracle的逻辑结构和物理结构:
一、Oracle逻辑结构
其他关系的逻辑结构,我感觉都是抽象的,但是,Oracle的逻辑结构不抽象,它是一种层次结构,主要由:表空间(Tablespace),段(segment),区(extents)和数据块(blocks)等概念组成,具体如下图所示:
1.1数据块
数据块是Oracle最小的存储单位,Oracle的数据放在数据块中,但是此”数据块“非操作系统的”系统块“,这两个要区分开,一般Oracle数据块的大小是操作系统系统块的整数倍。Oracle每次请求数据的时候,都是以数据块为单位,也就是说,每次请求的数据是块的整数倍,如果请求的数据量不到一块,那么Oracle也会读取整个数据块。
数据块大小是由初始化参数DB_BLOCK_SIZE指定的,符合标准的就是标准块,不符合标准的就是不标准块
SYS@ zxy>col name for a20
SYS@ zxy>col value for a10
SYS@ zxy>select name,value from v$parameter where name='db_block_size';
NAME VALUE
-------------------- ----------
db_block_size 8192
SYS@ zxy>
一般情况下:Oracle默认都是8192B,而操作系统的系统块是2048B,Oracle的数据块是由4个操作系统块构成。
数据块中存放数据、索引数据和簇数据等,无论存放那种数据,其结构都是一样的,都是由块头、表目录、行目录、空余空间(又叫做自由空间)、行数据等5部分组成,如下图所示:
数据块中各个组成部分介绍如下:
- 块头:存放数据块的基本信息,如块的物理地址、块所属的段的类型(索引段还是数据段)
- 表目录:存放表的信息,如果数据块中存放的是表数据,则表目录中存储有关的表信息
- 行目录:如果块中有行数据存在,则这些行的信息将被