前面几篇文章给大家介绍了数据的操作和事务管理等话题,作为基础篇的最后一篇文章,今天和大家聊聊Oracle数据是怎么存储的。
逻辑结构上的数据存储
为了数据管理上的方便,Oracle数据库从逻辑结构上看其数据存储可分为表空间、段、区和数据块几个层次。
表空间
Oracle数据库中的表空间是一个管理逻辑上的概念,其底层对应的是一个或多个物理的数据文件组成。按照功能划分,Oracle表空间可分为以下几类:
- SYSTEM表空间:Oracle数据库是一个完整的软件系统,自身包含大量的数据库系统表、数据字典及视图、存储过程等对象,用于提供数据库运行和管理功能,这些对象都包含在SYS模式下,只能由SYS用户或具有对应权限的其他管理用户才能访问;
- UNDO表空间:我们在《Oracle事务是怎么练成的》这篇文章中提到,DML操作修改数据块,会先将相关数据的“前镜像”保存到undo段中。Oracle会为每个数据库实例分配一个undo表空间,undo表空间的数据不需要永久保留,但是需要满足事务和查询语句构造一致性,以及异常崩溃后实例恢复的需求;
- SYSAUX表空间:随着数据库功能的不断增加,Oracle自身产生的管理数据也越来越多。尤其是10g之后引入了AWR(Automatic Workload Repository)组件,默认每个小时收集一次系统运行状态快照,这类辅助功能也会消耗较多的空间,因此Oracle新增了SYSAUX表空间专门存放这类数据;
- TEMP表空间:临时表空间的主要作用有两个,一是对于大的排序或创建索引等操作时,如果内存空间不够,数据会存放到临时表空间进行短暂的中转交换,虽然磁盘操作会比内存操作慢很多,但也不失为一个折中的解决方案;二是用于存放临时表等对象操作过程中的临时数据。临时表空间的数据不需要永久保留,会随着