37人参与 • 2026-09-08 • Oracle
在 oracle 11g 中,表空间(tablespace) 是数据库存储架构的核心逻辑单元,其原理基于 逻辑存储与物理存储的分离,通过分层管理数据文件、段(segment)、区(extent)和数据块(data block)。
表空间是逻辑容器:
数据文件是物理实体:
.dbf)create tablespace users datafile '/u01/oradata/users01.dbf' size 100m;
数据库(database) → 表空间(tablespace) → 段(segment) → 区(extent) → 数据块(data block)
段(segment):
table)、索引段(index)、撤销段(undo)、临时段(temp)。区(extent):
数据块(data block):
区(extent)的分配与回收:
当段需要空间时,oracle 从表空间中分配一个或多个区。
删除对象时,区会被回收并标记为可用,但可能不会立即释放给操作系统(取决于存储参数)。
自动段空间管理(assm):
| 表空间类型 | 原理与用途 |
|---|---|
| 永久表空间 | 存储用户数据(如表、索引),如 users。 |
| 临时表空间 | 存储排序、哈希连接等临时数据,如 temp。 |
| 撤销表空间(undo) | 记录事务的撤销信息,支持回滚和一致性读,如 undotbs1。 |
| 大文件表空间 | 单个数据文件可支持超大容量(最大 32tb),简化存储管理。 |
一个表空间可以包含多个数据文件,数据文件分散在多个磁盘上以提高性能(如 raid 或 asm)。
数据文件支持自动扩展(autoextend on),避免因空间不足导致操作失败
字典管理表空间(过时):
sys.uet$ 和 sys.fet$)记录区的分配信息,本地管理表空间(默认):
每个数据块包含以下部分:
块头(header):块元数据(如事务信息、scn)。
表目录(table directory):记录块中存储的表信息。
行目录(row directory):指向块内各行数据的指针。
空闲空间(free space):未使用的空间,用于新数据或更新操作。
逻辑与物理分离:用户操作逻辑对象(如表),oracle 自动管理物理文件。
存储层次化:通过段、区、数据块实现精细的空间管理。
性能优化:
将高 i/o 的表空间(如索引、数据)分散到不同磁盘。
使用临时表空间减少对永久表空间的争用。
事务一致性:
-- 创建表空间 create tablespace app_data datafile '/u01/oradata/app01.dbf' size 500m autoextend on next 50m maxsize 2g; -- 将表分配到表空间 create table orders ( order_id number, customer_id number ) tablespace app_data; -- 查询表空间使用情况 select tablespace_name, file_name, bytes/1024/1024 as size_mb from dba_data_files;
空间不足:数据文件未自动扩展或达到 maxsize,导致 ora-01653 错误。
碎片化:频繁分配和释放区可能导致碎片,影响性能(本地管理表空间较少出现)。
备份与恢复:表空间级备份(tablespace)比全库备份更灵活,支持热备份。
select owner, table_name, tablespace_name from dba_tables where table_name = 'ai_tools' and owner = 'new_user';

select file_name from dba_data_files where tablespace_name = 'users';

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论