当前位置: 首页 > news >正文

【Oracle数据库指南】第21篇:Oracle表空间管理详解

上一篇【第20篇】命令行方式创建Oracle数据库——手动建库全流程详解
下一篇【第22篇】Oracle用户与权限管理详解


摘要

表空间(Tablespace)是Oracle数据库中用于存储数据库对象的逻辑存储容器,是数据库逻辑结构与物理结构之间的关键桥梁。本文详细讲解表空间的创建、修改、删除、监控与维护,涵盖数据文件管理、大文件表空间、表空间迁移等实用技能,帮助DBA掌握Oracle存储管理的核心。


一、表空间概述

1.1 什么是表空间

表空间是Oracle数据库中最高级别的逻辑存储结构,用于存储表、索引、视图等数据库对象。一个数据库可以包含多个表空间,每个表空间由一个或多个数据文件(Data File)组成。

数据库(Database) ├── SYSTEM 表空间(系统表空间) ├── SYSAUX 表空间(辅助系统表空间) ├── UNDOTBS1 表空间(撤销表空间) ├── TEMP 表空间(临时表空间) ├── USERS 表空间(用户数据表空间) └── INDEX_TS 表空间(索引表空间) ├── datafile01.dbf ├── datafile02.dbf └── datafile03.dbf

1.2 表空间的类型

表空间类型用途是否必需
SYSTEM存储数据字典、系统表、PL/SQL包必需
SYSAUX存储Oracle可选组件(AWR、EM等)必需(10g+)
UNDO存储撤销数据(回滚段)必需
TEMP存储临时数据(排序、哈希连接)必需
用户表空间存储用户数据必需(自定义)
只读表空间存储历史数据,只读访问可选
大文件表空间单个大文件(最大128TB)可选
撤销表空间UNDO数据管理必需

二、创建表空间

2.1 创建普通表空间

-- 基本语法CREATETABLESPACEtablespace_name DATAFILE'path/file_name.dbf'SIZE size[REUSE][AUTOEXTENDON[NEXTsize][MAXSIZE size|UNLIMITED]][EXTENT MANAGEMENTLOCAL[UNIFORM SIZE size|AUTOALLOCATE]][SEGMENT SPACE MANAGEMENT AUTO|MANUAL][BLOCKSIZE size][LOGGING|NOLOGGING][ONLINE|OFFLINE];-- 示例1:创建用户数据表空间CREATETABLESPACEusers_data DATAFILE'/u01/oradata/testdb/users01.dbf'SIZE500M AUTOEXTENDONNEXT100M MAXSIZE10G EXTENT MANAGEMENTLOCALSEGMENT SPACE MANAGEMENT AUTO LOGGING ONLINE;-- 示例2:创建索引表空间CREATETABLESPACEusers_index DATAFILE'/u01/oradata/testdb/users_idx01.dbf'SIZE300M AUTOEXTENDONNEXT50M MAXSIZE5G EXTENT MANAGEMENTLOCALUNIFORM SIZE1M SEGMENT SPACE MANAGEMENT AUTO;

2.2 参数详解

参数说明
DATAFILE指定数据文件路径和大小
AUTOEXTEND ON启用自动扩展
NEXT每次扩展的大小
MAXSIZE最大文件大小
EXTENT MANAGEMENT LOCAL本地管理的区(推荐)
UNIFORM SIZE统一区大小(性能稳定)
AUTOALLOCATE自动分配区大小(默认)
SEGMENT SPACE MANAGEMENT AUTO自动段空间管理(ASSM,推荐)
LOGGING记录重做日志(默认)
NOLOGGING不记录重做日志(提高性能)

三、修改表空间

3.1 添加数据文件

-- 为表空间添加新的数据文件ALTERTABLESPACEusers_dataADDDATAFILE'/u01/oradata/testdb/users02.dbf'SIZE500M AUTOEXTENDONNEXT100M MAXSIZE10G;-- 添加多个数据文件ALTERTABLESPACEusers_dataADDDATAFILE'/u02/oradata/testdb/users03.dbf'SIZE500M,'/u03/oradata/testdb/users04.dbf'SIZE500M;

3.2 调整数据文件大小

-- 手动调整数据文件大小ALTERDATABASEDATAFILE'/u01/oradata/testdb/users01.dbf'RESIZE800M;-- 启用自动扩展ALTERDATABASEDATAFILE'/u01/oradata/testdb/users01.dbf'AUTOEXTENDONNEXT100M MAXSIZE20G;-- 禁用自动扩展ALTERDATABASEDATAFILE'/u01/oradata/testdb/users01.dbf'AUTOEXTENDOFF;

3.3 修改表空间状态

-- 表空间脱机(维护时使用)ALTERTABLESPACEusers_data OFFLINE;-- 表空间联机ALTERTABLESPACEusers_data ONLINE;-- 表空间只读(用于历史数据)ALTERTABLESPACEusers_dataREADONLY;-- 表空间可读写ALTERTABLESPACEusers_dataREADWRITE;-- 重命名表空间ALTERTABLESPACEusers_dataRENAMETOuser_data_ts;

四、删除表空间

-- 删除空表空间(不包含数据文件)DROPTABLESPACEusers_data;-- 删除表空间及其数据文件DROPTABLESPACEusers_data INCLUDING CONTENTSANDDATAFILES;-- 删除表空间,保留数据文件DROPTABLESPACEusers_data INCLUDING CONTENTS;-- 删除表空间,同时删除关联约束DROPTABLESPACEusers_data INCLUDING CONTENTSANDDATAFILESCASCADECONSTRAINTS;

⚠️注意事项

  1. 不能删除SYSTEMSYSAUXTEMPUNDO表空间
  2. 删除前确保表空间中没有活跃对象
  3. 建议先备份再删除

五、数据文件管理

5.1 查询数据文件信息

-- 查看所有数据文件SELECTfile_name,tablespace_name,bytes/1024/1024ASsize_mb,autoextensible,maxbytes/1024/1024ASmax_mbFROMdba_data_filesORDERBYtablespace_name;-- 查看数据文件使用率SELECTd.tablespace_name,d.bytes/1024/1024AStotal_mb,(d.bytes-f.bytes)/1024/1024ASused_mb,f.bytes/1024/1024ASfree_mb,ROUND((d.bytes-f.bytes)/d.bytes*100,2)ASused_pctFROM(SELECTtablespace_name,SUM(bytes)ASbytesFROMdba_data_filesGROUPBYtablespace_name)d,(SELECTtablespace_name,SUM(bytes)ASbytesFROMdba_free_spaceGROUPBYtablespace_name)fWHEREd.tablespace_name=f.tablespace_name(+);-- 查看数据文件I/O统计SELECTfile_name,phyrds,phywrts,readtim,writetimFROMv$filestat s,dba_data_files fWHEREs.file# = f.file_id;

5.2 移动数据文件

-- 方法1:使用ALTER DATABASE(需要数据库MOUNT状态)-- 步骤1:关闭数据库SHUTDOWNIMMEDIATE;-- 步骤2:在操作系统中移动数据文件-- mv /u01/oradata/testdb/users01.dbf /u02/oradata/testdb/users01.dbf-- 步骤3:启动到MOUNT状态STARTUP MOUNT;-- 步骤4:重命名数据文件ALTERDATABASERENAMEFILE'/u01/oradata/testdb/users01.dbf'TO'/u02/oradata/testdb/users01.dbf';-- 步骤5:打开数据库ALTERDATABASEOPEN;-- 方法2:使用ALTER TABLESPACE(在线操作)-- 步骤1:表空间脱机ALTERTABLESPACEusers_data OFFLINE;-- 步骤2:在操作系统中移动数据文件-- mv /u01/oradata/testdb/users01.dbf /u02/oradata/testdb/users01.dbf-- 步骤3:重命名数据文件ALTERTABLESPACEusers_dataRENAMEDATAFILE'/u01/oradata/testdb/users01.dbf'TO'/u02/oradata/testdb/users01.dbf';-- 步骤4:表空间联机ALTERTABLESPACEusers_data ONLINE;

六、大文件表空间(Bigfile Tablespace)

6.1 大文件表空间概述

大文件表空间(Bigfile Tablespace)是Oracle 10g引入的特性,单个数据文件最大可达128TB(使用8KB块大小)。

优点

  • 减少数据文件数量
  • 简化存储管理
  • 提高检查点性能

缺点

  • 单个文件损坏影响整个表空间
  • 需要支持大文件的文件系统

6.2 创建大文件表空间

-- 创建大文件表空间CREATEBIGFILETABLESPACEbig_data DATAFILE'/u01/oradata/testdb/bigdata01.dbf'SIZE10G AUTOEXTENDONNEXT1G MAXSIZE UNLIMITED EXTENT MANAGEMENTLOCALSEGMENT SPACE MANAGEMENT AUTO;-- 查看大文件表空间SELECTtablespace_name,bigfileFROMdba_tablespacesWHEREbigfile='YES';

七、临时表空间管理

7.1 创建临时表空间

-- 创建临时表空间CREATETEMPORARYTABLESPACEtemp2 TEMPFILE'/u01/oradata/testdb/temp02.dbf'SIZE500M AUTOEXTENDONNEXT100M MAXSIZE5G EXTENT MANAGEMENTLOCALUNIFORM SIZE1M;-- 创建大文件临时表空间CREATEBIGFILETEMPORARYTABLESPACEtemp_big TEMPFILE'/u01/oradata/testdb/temp_big01.dbf'SIZE10G;

7.2 临时表空间组

-- 创建临时表空间组ALTERTABLESPACEtempTABLESPACEGROUPtemp_group1;ALTERTABLESPACEtemp2TABLESPACEGROUPtemp_group1;-- 查看临时表空间组SELECT*FROMdba_tablespace_groups;-- 将临时表空间从组中移除ALTERTABLESPACEtemp2TABLESPACEGROUP'';

7.3 管理临时文件

-- 添加临时文件ALTERTABLESPACEtempADDTEMPFILE'/u02/oradata/testdb/temp03.dbf'SIZE500M;-- 调整临时文件大小ALTERDATABASETEMPFILE'/u01/oradata/testdb/temp01.dbf'RESIZE800M;-- 删除临时文件ALTERDATABASETEMPFILE'/u01/oradata/testdb/temp01.dbf'DROPINCLUDING DATAFILES;

八、撤销表空间管理

8.1 创建撤销表空间

-- 创建撤销表空间CREATEUNDOTABLESPACEundotbs2 DATAFILE'/u01/oradata/testdb/undotbs02.dbf'SIZE500M AUTOEXTENDONNEXT100M MAXSIZE10G;-- 切换撤销表空间ALTERSYSTEMSETundo_tablespace=undotbs2 SCOPE=BOTH;

8.2 监控撤销表空间

-- 查看撤销表空间信息SELECTtablespace_name,status,contentsFROMdba_tablespacesWHEREcontents='UNDO';-- 查看撤销数据使用情况SELECTTO_CHAR(begin_time,'HH24:MI')AStime,undoblks,txncount,maxquerylenFROMv$undostatORDERBYbegin_timeDESC;-- 查看当前撤销表空间配置SHOWPARAMETER undo;

九、表空间监控与维护

9.1 空间使用率监控

-- 表空间空间使用率(详细版)SELECTa.tablespace_name,ROUND(a.total_bytes/1024/1024)AStotal_mb,ROUND(NVL(b.free_bytes,0)/1024/1024)ASfree_mb,ROUND((a.total_bytes-NVL(b.free_bytes,0))/1024/1024)ASused_mb,ROUND((a.total_bytes-NVL(b.free_bytes,0))/a.total_bytes*100,2)ASused_pctFROM(SELECTtablespace_name,SUM(bytes)AStotal_bytesFROMdba_data_filesGROUPBYtablespace_name)aLEFTJOIN(SELECTtablespace_name,SUM(bytes)ASfree_bytesFROMdba_free_spaceGROUPBYtablespace_name)bONa.tablespace_name=b.tablespace_nameORDERBYused_pctDESC;

9.2 表空间碎片化检查

-- 检查表空间碎片化SELECTtablespace_name,COUNT(*)ASfragments,MAX(bytes)/1024/1024ASlargest_chunk_mb,MIN(bytes)/1024ASsmallest_chunk_kbFROMdba_free_spaceGROUPBYtablespace_nameHAVINGCOUNT(*)>10ORDERBYfragmentsDESC;

9.3 表空间IO统计

-- 表空间I/O统计SELECTdf.tablespace_name,fs.phyrdsASreads,fs.phywrtsASwrites,ROUND(fs.readtim/DECODE(fs.phyrds,0,1,fs.phyrds),2)ASavg_read_time_ms,ROUND(fs.writetim/DECODE(fs.phywrts,0,1,fs.phywrts),2)ASavg_write_time_msFROMv$filestat fsJOINdba_data_files dfONfs.file# = df.file_idORDERBYfs.phyrds+fs.phywrtsDESC;

十、表空间迁移与传输

10.1 可传输表空间(Transportable Tablespace)

-- 步骤1:检查表空间是否自包含EXECDBMS_TTS.TRANSPORT_SET_CHECK('USERS_DATA',TRUE);SELECT*FROMtransport_set_violations;-- 步骤2:将表空间设为只读ALTERTABLESPACEusers_dataREADONLY;-- 步骤3:导出表空间元数据expdp system/password DIRECTORY=dpump_dirDUMPFILE=users_meta.dmp TRANSPORT_TABLESPACES=users_data-- 步骤4:复制数据文件到目标服务器-- 步骤5:在目标数据库导入impdp system/password DIRECTORY=dpump_dirDUMPFILE=users_meta.dmp TRANSPORT_DATAFILES='/u01/oradata/testdb/users01.dbf'

十一、最佳实践

11.1 表空间设计原则

  1. 分离不同类型数据:表数据、索引、LOB分别使用不同表空间
  2. 使用本地管理EXTENT MANAGEMENT LOCAL(默认)
  3. 使用ASSMSEGMENT SPACE MANAGEMENT AUTO
  4. 合理设置自动扩展:避免空间不足,但也要防止无限扩展
  5. 多数据文件:分散I/O,提高并行度

11.2 空间监控告警

-- 创建空间监控脚本-- 当表空间使用率超过90%时告警SELECTa.tablespace_name,ROUND((a.total_bytes-NVL(b.free_bytes,0))/a.total_bytes*100,2)ASused_pctFROM(SELECTtablespace_name,SUM(bytes)AStotal_bytesFROMdba_data_filesGROUPBYtablespace_name)aLEFTJOIN(SELECTtablespace_name,SUM(bytes)ASfree_bytesFROMdba_free_spaceGROUPBYtablespace_name)bONa.tablespace_name=b.tablespace_nameWHEREROUND((a.total_bytes-NVL(b.free_bytes,0))/a.total_bytes*100,2)>90;

11.3 定期维护任务

-- 1. 定期检查表空间使用率(每天)-- 2. 定期收缩数据文件(每周)ALTERDATABASEDATAFILE'/u01/oradata/testdb/users01.dbf'RESIZE800M;-- 3. 定期重建索引(减少碎片)ALTERINDEXidx_emp_name REBUILDTABLESPACEusers_index;-- 4. 定期收集统计信息EXECDBMS_STATS.GATHER_TABLE_STATS('SCOTT','EMP');

十二、总结

表空间管理的核心要点:

  1. 创建表空间:合理规划数据文件大小、自动扩展、区管理
  2. 修改表空间:添加数据文件、调整大小、修改状态
  3. 数据文件管理:移动、重命名、监控I/O
  4. 特殊表空间:大文件、临时、撤销表空间
  5. 监控维护:空间使用率、碎片化、I/O性能
  6. 最佳实践:分离数据、使用本地管理、定期监控

上一篇【第20篇】命令行方式创建Oracle数据库——手动建库全流程详解
下一篇【第22篇】Oracle用户与权限管理详解


参考资料

  • 《Oracle 11g数据库管理员指南》— 刘宪军著
  • Oracle官方文档:Database Administrator’s Guide - Managing Tablespaces
  • Oracle官方文档:Database Concepts - Tablespaces
http://www.jsqmd.com/news/806158/

相关文章:

  • DIC非接触式全场应变测量技术及应用案例
  • 零代码构建RAG智能体:对话式配置私有文档助手
  • NodeMCU固件烧录终极指南:告别命令行,5分钟完成ESP8266/ESP32刷机
  • 如何在Ubuntu上5分钟完成Ghidra逆向工程工具的专业安装
  • Angular 17 + Firebase 全栈开发实战:从架构设计到自动化部署
  • c sharp ,.Net Framework框架,.Net core
  • GitHub Star数≠质量?Perplexity多维评估模型首次公开(含Python评分工具包),3天内仅开放下载权限
  • KMS_VL_ALL_AIO终极指南:Windows和Office永久激活的简单免费解决方案
  • 【Oracle数据库指南】第22篇:Oracle用户与权限管理详解
  • MCO:一体化云原生监控平台实战,简化可观测性栈部署
  • 2026年包布热压机选型指南:转盘式高周波机、非标订做超声波清洗机、高周波熔接机、伺服超声波、单头高周波机、双头超声波机选择指南 - 优质品牌商家
  • 买小提琴前先看这篇!500-2000元小提琴深度横评,5款热门型号拆解
  • 科技早报晚报|2026年5月12日:GUI Agent、编程会话工作台与 npm 安装门禁,今晚更值得做的 3 个技术机会
  • Hutool 各类型标准判空大全
  • Ante语言:无GC系统编程新范式,精化类型与代数效应实践
  • feedclaw:基于AI与本地SQLite的智能RSS摘要工具实践指南
  • 基于NLP与知识图谱的医学对话智能解析系统构建实践
  • 基于 HarmonyOS 6.0 的在线考试页面实战开发:从页面构建到跨端 UI 设计解析
  • Testcontainers-Keycloak:容器化身份认证测试的终极解决方案
  • JSP核心技术要点梳理与实战开发案例详解
  • VCS/URG覆盖率合并实战:从模块到系统的映射与集成
  • 2026横流式冷却塔技术全解析:钢制冷却塔/闭式冷却塔/不锈钢冷却塔/冷却塔填料/凉水塔/圆形冷却塔/横流式冷却塔/选择指南 - 优质品牌商家
  • 2026环戊烷高压发泡机权威品牌名录及性能评测:聚氨酯内饰发泡机/聚氨酯发泡机/聚氨酯高压泡机/胶辊高温弹性体浇注机/选择指南 - 优质品牌商家
  • 【PyTorch实战】从零构建UNet网络:肺部CT影像语义分割全流程解析
  • macOS桌面歌词神器LyricsX:免费开源歌词同步工具完整指南
  • EverOS:为AI智能体构建长期记忆系统的完整指南
  • 在eNSP中简单组网及基础连通性测试
  • 量子噪声逆转技术:EQC在信号处理中的突破应用
  • Windows删除文件权限问题解决
  • 阿里云完全指南:从入门到精通,2026最新实战分享