美甲师职业成长与技术突破实战指南
2026/8/10 15:03:39
本章系统讲解 Oracle 数据库中表空间(Tablespace)与数据文件(Datafile)的结构、关系及管理方法,涵盖永久表空间、撤销表空间、临时表空间的创建、维护与优化,是数据库存储架构设计和性能调优的核心内容。
/u01,/u02等挂载点)su- oracle sqlplus / as sysdba SQL>STARTUP;-- 若未启动| 概念 | 说明 |
|---|---|
| 表空间(Tablespace) | 逻辑存储单元,包含一个或多个数据文件 |
| 数据文件(Datafile) | 物理文件(.dbf),存储实际数据 |
| 关系 | 1 个表空间 → N 个数据文件 1 个数据文件 → 仅属于 1 个表空间 |
✅设计原则:
- 将不同应用的数据分离到不同表空间
- I/O 密集型表空间使用独立磁盘
作用:存储数据字典(如DBA_TABLES)、系统回滚段等
特点
:
-- 查看默认表空间SELECTproperty_name,property_valueFROMdatabase_propertiesWHEREproperty_nameLIKE'%DEFAULT%';输出示例:
PROPERTY_NAME PROPERTY_VALUE --------------------------- -------------- DEFAULT_PERMANENT_TABLESPACE USERS DEFAULT_TEMP_TABLESPACE TEMPCREATETABLESPACEtablespace_name DATAFILE'file_path'SIZE size[AUTOEXTENDONNEXTincrement MAXSIZE max_size][EXTENT MANAGEMENT {LOCAL|DICTIONARY }][SEGMENT SPACE MANAGEMENT { AUTO|MANUAL }];本地管理表空间(LMT):使用位图管理区(Extent),性能优于字典管理。
-- 创建本地管理表空间(默认)CREATETABLESPACEtbs_app DATAFILE'/u01/oradata/ORCL/tbs_app01.dbf'SIZE500M AUTOEXTENDONNEXT100M MAXSIZE2G EXTENT MANAGEMENTLOCAL;-- 显式指定(实际为默认)✅ 优势:避免递归 SQL,减少争用。
SEGMENT SPACE MANAGEMENT AUTO:使用位图管理段内空间(推荐)MANUAL:使用空闲列表(Freelist)(旧方式,不推荐)-- 创建自动段空间管理表空间(ASSM)CREATETABLESPACEtbs_user DATAFILE'/u01/oradata/ORCL/tbs_user01.dbf'SIZE1G EXTENT MANAGEMENTLOCALSEGMENT SPACE MANAGEMENT AUTO;-- 默认值💡 ASSM 自动处理并发插入,避免“缓冲区忙等待”。
Oracle 默认块大小由
DB_BLOCK_SIZE决定(通常 8KB)。
可创建2KB、16KB、32KB等非标准块表空间(需先设置DB_nK_CACHE_SIZE)。
-- 设置 16KB 缓存池(动态)ALTERSYSTEMSETdb_16k_cache_size=100M;CREATETABLESPACEtbs_large_block DATAFILE'/u01/oradata/ORCL/tbs_large01.dbf'SIZE500M BLOCKSIZE16K;-- 必须匹配已配置的缓存池📌 适用场景:数据仓库大行表、LOB 存储。
特点:
-- 创建大文件表空间CREATEBIGFILETABLESPACEtbs_big DATAFILE'/u02/oradata/ORCL/tbs_big.dbf'SIZE10G AUTOEXTENDONNEXT1G;⚠️ 注意:不能与小文件表空间混用;RMAN 备份策略需调整。
-- 设置数据库默认永久表空间ALTERDATABASEDEFAULTTABLESPACEtbs_user;-- 设置默认临时表空间ALTERDATABASEDEFAULTTEMPORARYTABLESPACEtemp_new;新建用户若未指定
DEFAULT TABLESPACE,将使用此默认值。
| 状态 | 作用 | 命令 |
|---|---|---|
| ONLINE | 正常访问 | ALTER TABLESPACE tbs_name ONLINE; |
| OFFLINE | 不可用(用于维护) | ALTER TABLESPACE tbs_name OFFLINE; |
| READ ONLY | 只读(用于备份) | ALTER TABLESPACE tbs_name READ ONLY; |
| READ WRITE | 恢复读写 | ALTER TABLESPACE tbs_name READ WRITE; |
-- 示例:将表空间设为只读进行备份ALTERTABLESPACEtbs_appREADONLY;-- ... 执行备份 ...ALTERTABLESPACEtbs_appREADWRITE;-- 重命名(Oracle 10g+ 支持)ALTERTABLESPACEtbs_oldRENAMETOtbs_new;✅ 优点:无需导出/导入数据。
-- 删除表空间及数据文件(谨慎!)DROPTABLESPACEtbs_test INCLUDING CONTENTSANDDATAFILES;⚠️
INCLUDING CONTENTS:删除所有对象
⚠️AND DATAFILES:同时删除操作系统文件
ALTERTABLESPACEtbs_appADDDATAFILE'/u02/oradata/ORCL/tbs_app02.dbf'SIZE500M AUTOEXTENDON;-- 手动扩容ALTERDATABASEDATAFILE'/u01/oradata/ORCL/tbs_app01.dbf'RESIZE1G;-- 开启自动扩展ALTERDATABASEDATAFILE'/u01/oradata/ORCL/tbs_app01.dbf'AUTOEXTENDONNEXT100M MAXSIZE UNLIMITED;-- 1. OFFLINE 表空间ALTERTABLESPACEtbs_app OFFLINE;-- 2. 操作系统级移动文件-- !mv /old/path/file.dbf /new/path/file.dbf-- 3. 更新控制文件ALTERDATABASERENAMEFILE'/old/path/file.dbf'TO'/new/path/file.dbf';-- 4. ONLINE 表空间ALTERTABLESPACEtbs_app ONLINE;| 参数 | 说明 |
|---|---|
UNDO_MANAGEMENT | AUTO(自动)或MANUAL(手动) |
UNDO_TABLESPACE | 指定当前撤销表空间 |
UNDO_RETENTION | 保留时间(秒,默认 900) |
-- 查看参数SHOWPARAMETER undo;CREATEUNDOTABLESPACEundotbs2 DATAFILE'/u01/oradata/ORCL/undotbs02.dbf'SIZE2G AUTOEXTENDON;-- 动态切换(无需重启)ALTERSYSTEMSETundo_tablespace=undotbs2;-- 确保未被使用DROPTABLESPACEundotbs1 INCLUDING CONTENTSANDDATAFILES;💡 监控撤销使用:
SELECTtablespace_name,status,sum(bytes)/1024/1024ASmbFROMdba_undo_extentsGROUPBYtablespace_name,status;
.tmp-- 创建临时表空间CREATETEMPORARYTABLESPACEtemp_new TEMPFILE'/u01/oradata/ORCL/temp_new01.dbf'SIZE500M AUTOEXTENDON;-- 设置为默认临时表空间ALTERDATABASEDEFAULTTEMPORARYTABLESPACEtemp_new;⚠️ 注意:使用
TEMPFILE而非DATAFILE
-- 临时表空间及文件SELECTtablespace_name,file_name,bytes/1024/1024ASsize_mbFROMdba_temp_files;-- 临时段使用情况SELECTs.username,u.tablespace,u.extents,u.blocksFROMv$sessions,v$tempseg_usage uWHEREs.saddr=u.session_addr;允许多个临时表空间组成组(Group),提高并发排序能力。
-- 创建时指定组CREATETEMPORARYTABLESPACEtemp1 TEMPFILE'/u01/oradata/ORCL/temp1.dbf'SIZE500MTABLESPACEGROUPtemp_group;CREATETEMPORARYTABLESPACEtemp2 TEMPFILE'/u01/oradata/ORCL/temp2.dbf'SIZE500MTABLESPACEGROUPtemp_group;-- 用户使用整个组ALTERUSERscottTEMPORARYTABLESPACEtemp_group;SELECT*FROMdba_tablespace_groups;需求:
-- 永久表空间CREATETABLESPACEtbs_oltp DATAFILE'/u01/oradata/ORCL/tbs_oltp01.dbf'SIZE2G AUTOEXTENDONNEXT200M MAXSIZE10G EXTENT MANAGEMENTLOCALSEGMENT SPACE MANAGEMENT AUTO;-- 添加第二数据文件(跨磁盘)ALTERTABLESPACEtbs_oltpADDDATAFILE'/u02/oradata/ORCL/tbs_oltp02.dbf'SIZE2G AUTOEXTENDON;CREATEUNDOTABLESPACEundotbs_oltp DATAFILE'/u01/oradata/ORCL/undotbs_oltp.dbf'SIZE3G AUTOEXTENDON;-- 切换并设置保留时间ALTERSYSTEMSETundo_tablespace=undotbs_oltp;ALTERSYSTEMSETundo_retention=1800;-- 30分钟CREATETEMPORARYTABLESPACEtemp_oltp1 TEMPFILE'/u01/oradata/ORCL/temp_oltp1.dbf'SIZE1G AUTOEXTENDONTABLESPACEGROUPtemp_oltp_group;CREATETEMPORARYTABLESPACEtemp_oltp2 TEMPFILE'/u02/oradata/ORCL/temp_oltp2.dbf'SIZE1G AUTOEXTENDONTABLESPACEGROUPtemp_oltp_group;-- 设置为默认ALTERDATABASEDEFAULTTEMPORARYTABLESPACEtemp_oltp_group;CREATEUSERapp_user IDENTIFIEDBYsecure_passwordDEFAULTTABLESPACEtbs_oltpTEMPORARYTABLESPACEtemp_oltp_group QUOTA UNLIMITEDONtbs_oltp;GRANTCONNECT,RESOURCETOapp_user;-- 表空间列表SELECTtablespace_name,contents,statusFROMdba_tablespaces;-- 数据文件分布SELECTtablespace_name,file_name,bytes/1024/1024ASsize_mbFROMdba_data_filesWHEREtablespace_nameLIKE'%OLTP%'UNIONALLSELECTtablespace_name,file_name,bytes/1024/1024FROMdba_temp_filesORDERBY1;-- 撤销表空间状态SHOWPARAMETER undo_tablespace;-- 以 app_user 登录CONNECTapp_user/secure_password-- 执行大排序(触发临时段)SELECT*FROM(SELECTobject_id,object_nameFROMall_objectsORDERBYobject_name)WHEREROWNUM<=10000;| 表空间类型 | 关键命令 | 最佳实践 |
|---|---|---|
| 永久表空间 | CREATE TABLESPACEADD DATAFILE | LMT + ASSM,多数据文件跨磁盘 |
| 撤销表空间 | CREATE UNDO TABLESPACEALTER SYSTEM SET undo_tablespace | 独立表空间,合理设置UNDO_RETENTION |
| 临时表空间 | CREATE TEMPORARY TABLESPACETABLESPACE GROUP | 使用组提升并发排序性能 |
💡黄金法则:
- 绝不使用 SYSTEM/SYSAUX 存放用户数据
- 所有表空间启用 AUTOEXTEND(设上限)
- 定期监控空间使用(
DBA_FREE_SPACE)
掌握本章内容,即可构建高性能、高可用的 Oracle 存储体系,为业务系统提供坚实基础。