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

Oracle 物理存储与逻辑管理

1. 表空间(Tablespace)

 

定义
表空间是Oracle中最高级别的逻辑存储容器,由一个或多个物理数据文件(Datafile)组成。所有数据库对象(如表、索引)的逻辑存储均属于某个表空间。

类型与作用
类型功能
系统表空间- 包含数据字典(如SYSTEM表空间)和系统元数据。
SYSAUX是辅助系统表空间,存放非核心组件数据(如AWR报告)。
用户表空间- 存储用户创建的数据库对象(如表、索引)。
- 例如USERS表空间默认存储用户数据。
临时表空间- 用于排序、哈希连接等临时操作(如TEMP)。
- 数据在会话结束后自动清理。
撤销表空间(UNDO)- 存储事务回滚信息,支持事务一致性、读一致性和回滚操作。
大文件表空间- 仅包含一个超大文件(最大可达128TB),简化存储管理。

 

管理操作

创建表空间

CREATE TABLESPACE users_data
DATAFILE '/u01/oradata/users01.dbf' SIZE 100M
AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;

扩展表空间

 通过增加数据文件或扩展现有文件:

 ALTER TABLESPACE users_data ADD DATAFILE '/u01/oradata/users02.dbf' SIZE 200M;

2. 段(Segment)

定义
段是特定数据库对象(如表、索引)占用的存储空间的逻辑集合。每个段由一个或多个区(Extent)组成。

类型与示例
类型描述
数据段存储表或簇的数据(如TABLE)。
索引段存储索引数据(如INDEX)。
临时段临时操作(排序、临时表)使用的空间,由临时表空间管理。
回滚段存储撤销信息(旧版本数据),由撤销表空间统一管理(替代传统手动回滚段)。
查看段信息

SELECT segment_name, segment_type, tablespace_name 
FROM dba_segments 
WHERE owner = 'SCOTT';

3. 区(Extent)

定义
区是Oracle分配存储空间的最小逻辑单元,由一组连续的数据块组成。段在扩展时会分配新的区。

特点
  • 连续分配:区内的数据块物理连续,提高I/O效率。

  • 自动扩展:当段需要更多空间时,Oracle自动分配新区。

  • 管理方式

    • 字典管理表空间(已淘汰):通过数据字典表管理区分配。

    • 本地管理表空间(默认):通过位图(Bitmap)在数据文件头部管理区分配,更高效。

4. 数据块(Data Block)

定义
数据块是Oracle中最小的I/O单元,也是存储数据的物理基础。块大小由参数DB_BLOCK_SIZE定义(通常为8KB),可在创建数据库时指定。

块结构
组成部分描述
块头(Header)包含块元数据(如块地址、事务槽)。
表目录记录该块所属的表或索引。
行目录存储块内每行的位置信息。
空闲空间未使用的空间,用于插入新数据或更新现有数据。
行数据实际存储的数据行。
块管理优化
  • PCTFREE:指定块中保留的空闲空间比例(默认为10%),用于未来更新。

  • PCTUSED(仅适用于手动段管理):当块使用率低于此值时,块可重新插入数据(已废弃,ASSM自动管理)。

5. 存储层次关系

  • 表空间 → 段 → 区 → 数据块
    例如:

    1. 用户表EMP存储在USERS表空间中。

    2. EMP表对应一个数据段,该段由多个区组成。

    3. 每个区包含若干连续的数据块。

    4. 数据块实际存储表中的行数据。

6. 实际应用示例

创建表并指定表空间

CREATE TABLE scott.employee (
    emp_id NUMBER,
    name VARCHAR2(50)

TABLESPACE users_data;

监控存储分配

-- 查看表空间使用情况
SELECT tablespace_name, sum(bytes)/1024/1024 AS "Size(MB)"
FROM dba_data_files
GROUP BY tablespace_name;

-- 查看段的空间占用
SELECT segment_name, bytes/1024/1024 AS "Size(MB)"
FROM dba_segments
WHERE owner = 'SCOTT';

7. 常见问题与优化

表空间不足

扩展数据文件或添加新文件:

ALTER DATABASE DATAFILE '/u01/oradata/users01.dbf' RESIZE 500M;

段碎片化

  • 使用ALTER TABLE ... MOVE重建表或在线重定义(DBMS_REDEFINITION)。

数据块效率

  • 根据业务负载选择合适的块大小(OLTP用小块,OLAP用大块)。

http://www.lryc.cn/news/2384239.html

相关文章:

  • vscode优化使用体验篇(快捷键)
  • 如何在电脑上登录多个抖音账号?多开不同IP技巧分解
  • 【东枫科技】usrp rfnoc 开发环境搭建
  • 【JAVA资料,C#资料,人工智能资料,Python资料】全网最全编程学习文档合集,从入门到全栈,保姆级整理!
  • [IMX] 05.串口 - UART
  • 使用Tkinter写一个发送kafka消息的工具
  • MongoDB 与 EF Core 深度整合实战:打造结构清晰的 Web API 应用
  • JAVA|后端编码规范
  • 重写B站(网页、后端、小程序)
  • 文档债务拖累交付速度?5大优化策略文档自动化
  • 【数据结构与算法】LeetCode 每日三题
  • 基于深度学习的电力负荷预测研究
  • 篇章十 消息持久化(二)
  • 【IDEA】删除/替换文件中所有包含某个字符串的行
  • 基于深度学习的不良驾驶行为为识别检测
  • FD+Mysql的Insert时的字段赋值乱码问题
  • 第十周作业
  • Python操作PDF书签详解 - 添加、修改、提取和删除
  • One-shot和Zero-shot的区别以及使用场景
  • 微软 Build 2025:开启 AI 智能体时代的产业革命
  • 集星獭 | 重塑集成体验:新版编排重构仿真电商订单数据入库
  • 多模态大语言模型arxiv论文略读(八十八)
  • 创建Workforce
  • Cribl 中 Parser 扮演着重要的角色 + 例子
  • WebSocket 从入门到进阶实战
  • CSS:vertical-align用法以及布局小案例(较难)
  • Linux 正则表达式 扩展正则表达式 gawk
  • Java转Go日记(五十四):gin路由
  • 【解决】自己的域名任何端口都访问不到,公网地址正常访问,服务器报错500。
  • 探秘鸿蒙 HarmonyOS NEXT:Navigation 组件的全面解析