1.物理存储结构
2.逻辑存储结构
将逻辑存储与物理存储分开是关系数据库范例的要求之一。 oracle 数据库的数据的处理发生在 instance(内存)中,但数据的存储发生在磁盘的 database上。 oracle 数据库逻辑存储结构可分为数据库、表空间、段、区、块几个层次。
3.表空间和数据文件
数据在物理上是存储在数据文件(data files)上,从逻辑上看数据存储在段(通常是表)中, 表空间是二者的抽象, 是一个逻辑的概念 表空间的使用解决了这个问题, 消除了段和数据文件之间多对多的关系, 一个表空间可能包含多个段(对象),并由多个数据文件组成,但一个数据文件只能对应一个表空间。 查看表空间信息 SYS@PROD>select tablespace_name,contents,status from dba_tablespaces; 查看表空间对应数据文件 SYS@PROD>select file_id,file_name,tablespace_name,bytes/1024/1024 m from dba_data_files;
2.段、区、块
段(segment): 段是表空间中存储数据的数据库对象。表是典型的段, 还有其他段类型比如索引段、 undo 段。 任何一个段可以仅存在于一个表空间中, 但表空间可以由多个数据文件组成。这样表的大小就不再受单个数据文件大小限制。 段是模式对象,由具体某一个用户(模式)限定。 注意: PL/SQL 过程、视图、序列不是段,它们不存储数据,存在于数据字典中。 SYS@PROD>select segment_name,segment_type,tablespace_name,bytes/1024 k,extents,blocks from dba_segments where owner='SCOTT'; 区(extent) 区是 oracle 空间分配的基本单元。 区是一组连续编号的 oracle 块。 这些区可能位于构成表空间的一个或多个数据文件中。 块(block)
oracle 块是数据库 I/O 的基本单位。 数据文件设置为连续编号的 oracle 块。一个块中可能有多个行, 但当会话需要某行数据时,是从磁盘将整个块读入到数据缓冲区。 同样,dbwr 写脏块时也是把整个块写入数据文件。对表空间来说,块大小是固定不变的。 11g 默认标准块大小是 8KB,在创建数据库时确定db_block_size 参数,不能修改。 从物理上讲,数据文件由操作系统块组成,操作系统块是文件系统 I/O 的基本单位。 通常 oracle块和操作系统块是一对多的关系,比如上图, oracle 块是 8KB,操作系统块大小是 1KB