当前位置: 代码网 > it编程>数据库>Oracle > Oracle表空间管理怎么做?从原理到实操全解析

Oracle表空间管理怎么做?从原理到实操全解析

2026年09月08日 Oracle 我要评论
在 oracle 11g 中,表空间(tablespace)是数据库存储架构的核心逻辑单元,其原理基于逻辑存储与物理存储的分离,通过分层管理数据文件、段(segment)、区(extent)和数据块(

在 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.示例:表空间操作

-- 创建表空间
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';

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com