Oracle 物理存储与逻辑管理

发布于:2025-05-25 ⋅ 阅读:(29) ⋅ 点赞:(0)

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用大块)。


网站公告

今日签到

点亮在社区的每一天
去签到