天天看点

❤️Oracle 存储结构,图文并茂,超详细❤️

作者:IT邦德
中国DBA联盟(ACDU)成员,目前从事DBA及程序编程
(Web\java\Python)工作,主要服务于生产制造
现拥有 Oracle 11g  OCP/OCM、
Mysql、Oceanbase(OBCA)认证
分布式TBase\TDSQL数据库、国产达梦数据库以及红帽子认证
从业8年DBA工作,在数据库领域有丰富的经验


擅长Oracle数据库运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。      
❤️Oracle 存储结构,图文并茂,超详细❤️

1.物理存储结构

❤️Oracle 存储结构,图文并茂,超详细❤️

2.逻辑存储结构

❤️Oracle 存储结构,图文并茂,超详细❤️
将逻辑存储与物理存储分开是关系数据库范例的要求之一。
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';      
❤️Oracle 存储结构,图文并茂,超详细❤️
oracle 块是数据库 I/O 的基本单位。 数据文件设置为连续编号的 oracle 块。一个块中可能有多个行,
但当会话需要某行数据时,是从磁盘将整个块读入到数据缓冲区。
同样,dbwr 写脏块时也是把整个块写入数据文件。对表空间来说,块大小是固定不变的。 
11g 默认标准块大小是 8KB,在创建数据库时确定db_block_size 参数,不能修改。
从物理上讲,数据文件由操作系统块组成,操作系统块是文件系统 I/O 的基本单位。
通常 oracle块和操作系统块是一对多的关系,比如上图, oracle 块是 8KB,操作系统块大小是 1KB