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

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

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

http://www.dtcms.com/a/125485.html

相关文章:

  • APT攻击阶段划分,每个阶段分区方法
  • 文件IO5(JPEG图像原理与应用)
  • 【数学建模】(智能优化算法)鲸鱼优化算法(Whale Optimization Algorithm)详解与应用
  • Java实现安卓手机模拟操作
  • 深入解析SLAM中的状态估计问题:从理论到C++实现
  • 一些简单但常用的算法记录(python)
  • C++算法之代码随想录(链表)——基础知识
  • 解决opencv中文路径问题
  • 力扣热题100刷题day63|49.字母异位词分组
  • Windows 图形显示驱动开发-WDDM 1.2功能_WDDM 1.2 和 Windows 8
  • Uniapp Vue 实现当前日期到给定日期的倒计时组件开发
  • 8.4 容器2
  • 尼日利亚拉各斯云服务器和VPS的综合分析,涵盖其优势、价格、推荐服务商及选择建议
  • 大模型论文:Language Models are Unsupervised Multitask Learners(GPT2)
  • netstat 查看端口占用、杀死进程
  • JAVA实现在H5页面中点击链接直接进入微信小程序
  • 课堂总结。
  • edge 更新到135后,Clash 打开后,正常网页也会自动跳转
  • 微服务拆分的原则、时机、方法以及常见问题
  • C++中stack函数的用法示例
  • 大模型——Llama Stack快速入门 部署构建AI大模型指南
  • 探索 Vue 3 中 vue-router 的 router.resolve () API
  • Python编程快速上手 让繁琐工作自动化笔记
  • 身份证号实名认证接口:让身份核验变得简单与高效
  • VMware安装飞牛私有云fnOS并挂载小雅Alist实现异地远程访问
  • BUUCTF-web刷题篇(21)
  • 3.8/Q1,GBD数据库最新文章解读
  • CLAHE算法介绍
  • AIGC5——AIGC的伦理与法律挑战:数据隐私、真实性危机与版权治理
  • 异形遮罩之QML中的 `OpacityMask` 实战