oracle 表空间(Tablespace)

在 Oracle 11g 中,表空间(Tablespace) 是数据库存储架构的核心逻辑单元,其原理基于 逻辑存储与物理存储的分离,通过分层管理数据文件、段(Segment)、区(Extent)和数据块(Data Block)。

1. 逻辑存储与物理存储的映射

  • 表空间是逻辑容器:用户创建的表、索引等对象存储在表空间中,但这些对象并不直接绑定到物理文件,而是通过表空间与数据文件(Data Files)关联。

  • 数据文件是物理实体 :每个表空间包含一个或多个物理数据文件(.dbf),数据实际存储在数据文件中。

CREATE TABLESPACE users

DATAFILE '/u01/oradata/users01.dbf' SIZE 100M;

2. 存储层次结构

数据库(Database) → 表空间(Tablespace) → 段(Segment) → 区(Extent) → 数据块(Data Block)

  • 段(Segment)

    表空间中存储的独立对象,如表段(TABLE)、索引段(INDEX)、撤销段(UNDO)、临时段(TEMP)。

  • 区(Extent)

    由连续的数据块组成的存储单元。当段需要更多空间时,Oracle 会分配新的区。

  • 数据块(Data Block)

    最小的 I/O 操作单位(默认大小 8KB),数据块大小由表空间定义。

3. 表空间的空间管理

  • 区(Extent)的分配与回收

    • 当段需要空间时,Oracle 从表空间中分配一个或多个区。

    • 删除对象时,区会被回收并标记为可用,但可能不会立即释放给操作系统(取决于存储参数)。

  • 自动段空间管理(ASSM)

    使用位图(Bitmap)管理区内的空闲空间,替代传统的手动自由列表(Free List),提高并发性能。

4. 表空间类型与用途

表空间类型 原理与用途
永久表空间 存储用户数据(如表、索引),如 USERS
临时表空间 存储排序、哈希连接等临时数据,如 TEMP
撤销表空间(UNDO) 记录事务的撤销信息,支持回滚和一致性读,如 UNDOTBS1
大文件表空间 单个数据文件可支持超大容量(最大 32TB),简化存储管理。

5. 数据文件与表空间的关系

  • 一个表空间可以包含多个数据文件,数据文件分散在多个磁盘上以提高性能(如 RAID 或 ASM)。

  • 数据文件支持自动扩展(AUTOEXTEND ON),避免因空间不足导致操作失败

6. 表空间的管理方式

  • 字典管理表空间(过时)

    使用数据字典表(如 SYS.UET$SYS.FET$)记录区的分配信息,存在性能瓶颈。

  • 本地管理表空间(默认)

    使用表空间头部存储的位图管理区的分配,效率更高,减少数据字典争用。

7. 数据块的结构

每个数据块包含以下部分:

  • 块头(Header):块元数据(如事务信息、SCN)。

  • 表目录(Table Directory):记录块中存储的表信息。

  • 行目录(Row Directory):指向块内各行数据的指针。

  • 空闲空间(Free Space):未使用的空间,用于新数据或更新操作。

8. 关键原理总结

  • 逻辑与物理分离:用户操作逻辑对象(如表),Oracle 自动管理物理文件。

  • 存储层次化:通过段、区、数据块实现精细的空间管理。

  • 性能优化

    • 将高 I/O 的表空间(如索引、数据)分散到不同磁盘。

    • 使用临时表空间减少对永久表空间的争用。

  • 事务一致性:UNDO 表空间支持多版本读一致性和事务回滚。

9. 示例:表空间操作

sql 复制代码
-- 创建表空间
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;

10. 常见问题与原理

  • 空间不足 :数据文件未自动扩展或达到 MAXSIZE,导致 ORA-01653 错误。

  • 碎片化:频繁分配和释放区可能导致碎片,影响性能(本地管理表空间较少出现)。

  • 备份与恢复 :表空间级备份(TABLESPACE)比全库备份更灵活,支持热备份。

11. 查询表所属的表空间

复制代码
SELECT owner, table_name, tablespace_name
FROM dba_tables
WHERE table_name = 'AI_TOOLS'
AND owner = 'NEW_USER';

12.查询表空间对应的数据文件路径

复制代码
SELECT file_name
FROM dba_data_files
WHERE tablespace_name = 'USERS';
相关推荐
oradh17 分钟前
Oracle XTTS实现跨版本迁移和升级(Oracle 11g单库升级至19C RAC集群)
数据库·oracle·11g升级19c·xtts跨版本迁移和升级
z123456789861 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
程序猿DD1 小时前
一个 API Key,统一调用大模型、生图和联网搜索
数据库·网关
TlSfoward2 小时前
抓包代理链路下的 TLS 指纹变化分析 TLSFOWARD抓包工具
数据库·爬虫·网络协议·搜索引擎·php
数智化管理手记2 小时前
账龄分析手工统计易遗漏?自动账龄分析工具怎么搭建
大数据·网络·数据库·人工智能·数据挖掘
LabVIEW开发3 小时前
NI Package Manager安装LabVIEW时InternalServerError错误
网络·数据库·labview·labview知识·labview功能·labview程序
SelectDB3 小时前
PostgreSQL 实时同步到 Apache Doris:一站式 CDC 解决方案
数据库
Database_Cool_3 小时前
AI Agent 长期记忆怎么存?阿里云 PolarDB-X 对接 Mem0 记忆框架实践
数据库·阿里云
会编程的土豆4 小时前
数据库范式
数据库·oracle
L1624764 小时前
MySQL 全环境生产快速安装 + 完整配置手册(整合国产银河麒麟适配 + 主从补充版)
数据库·mysql