Oracle数据库中的表空间是数据库逻辑存储结构的核心组成部分,所有数据库对象的数据最终都存储在表空间对应的数据文件中。不同类型的表空间承担着不同的存储职责,理解它们的区别是做好数据库存储管理的基础。

Oracle常见表空间类型及区别
1. 系统表空间(SYSTEM)
系统表空间是Oracle数据库创建时自动生成的 mandatory 表空间,存储数据库的数据字典、系统存储过程、系统包等核心元数据,是数据库正常运行的基础。该表空间不建议用户存储自定义的业务数据,避免影响数据库核心功能的稳定性。
2. 辅助系统表空间(SYSAUX)
SYSAUX是Oracle 10g之后引入的辅助系统表空间,用来分担SYSTEM表空间的存储压力,存储像AWR报告数据、Oracle组件的运行数据等非核心但必要的系统数据。默认情况下该表空间会自动扩展,一般不需要手动干预。
3. 用户表空间(USER)
用户表空间是专门用来存储用户自定义业务数据的表空间,比如业务表、索引、视图等对象的数据都建议存放在这类表空间中。用户可以创建多个用户表空间,按照业务模块、数据冷热程度等维度进行划分,方便管理和维护。
4. 临时表空间(TEMP)
临时表空间用来存储数据库运行过程中的临时数据,比如排序操作、哈希连接、临时表数据等产生的临时文件。这类表空间的数据在数据库重启或者会话结束后会自动清空,不需要长期保存。
5. 撤销表空间(UNDO)
撤销表空间用来存储数据的旧版本,主要作用是支持事务回滚、读一致性、闪回操作等。当事务修改数据时,修改前的旧值会存放在撤销表空间中,如果事务回滚或者需要查询修改前的数据,就可以从这里获取。
不同表空间的选择原则
- 系统核心元数据必须存放在SYSTEM表空间,不要随意修改该表空间的对象。
- 业务数据按照模块拆分到不同的用户表空间,比如订单模块数据放在ORDER_TBS,用户模块数据放在USER_TBS。
- 临时数据操作统一使用TEMP表空间,避免占用业务表空间存储。
- 事务相关的撤销数据使用独立的UNDO表空间,不要和其他类型数据混合存储。
表空间常用操作示例
创建用户表空间
创建名为BUSINESS_TBS的用户表空间,初始大小100M,自动扩展,每次扩展50M,最大不超过2G:
-- 创建用户表空间 CREATE TABLESPACE BUSINESS_TBS DATAFILE '/u01/app/oracle/oradata/orcl/business_tbs01.dbf' SIZE 100M AUTOEXTEND ON NEXT 50M MAXSIZE 2G;
查询所有表空间信息
通过数据字典视图查询当前数据库所有表空间的名称、状态、类型等信息:
-- 查询表空间基本信息 SELECT TABLESPACE_NAME, STATUS, CONTENTS, LOGGING FROM DBA_TABLESPACES;
修改表空间大小
给已有的BUSINESS_TBS表空间新增一个数据文件,扩展存储空间:
-- 给表空间新增数据文件 ALTER TABLESPACE BUSINESS_TBS ADD DATAFILE '/u01/app/oracle/oradata/orcl/business_tbs02.dbf' SIZE 50M AUTOEXTEND ON NEXT 20M MAXSIZE 1G;
将用户对象迁移到指定表空间
将用户TEST下的ORDERS表迁移到BUSINESS_TBS表空间:
-- 迁移表到指定表空间 ALTER TABLE TEST.ORDERS MOVE TABLESPACE BUSINESS_TBS;
表空间管理注意事项
首先,不要随意删除系统表空间(SYSTEM、SYSAUX)和默认的UNDO、TEMP表空间,删除后会导致数据库无法正常运行。其次,定期监控表空间的使用率,避免出现表空间满导致业务写入失败的情况,可以通过查询DBA_FREE_SPACE视图获取剩余空间信息。最后,生产环境的表空间数据文件建议放在不同的磁盘上,提升IO性能,同时做好数据文件的备份,避免数据丢失。
Oracle表空间tablespace数据文件修改时间:2026-06-17 07:06:11