Oracle笔记-查看表已使用空间&最大空间

目前以Oracle18c为例,主要是查这个表USER_SEGMENTS。

在 Oracle 18c 数据库中,USER_SEGMENTS 是一个系统表,用于存储当前用户(当前会话)拥有的所有段的信息。段是 Oracle 中分配存储空间的逻辑单位,用于存储表、索引、分区、簇等对象的数据。

USER_SEGMENTS 表包含以下列:

  • SEGMENT_NAME: 段的名称。
  • SEGMENT_TYPE: 段的类型,可以是表(TABLE)、索引(INDEX)、簇(CLUSTER)、分区(PARTITION)等。
  • TABLESPACE_NAME: 段所属的表空间名称。
  • BYTES: 段的大小(以字节为单位)。
  • BLOCKS: 段占用的数据块数。
  • EXTENTS: 段的扩展数。
  • INITIAL_EXTENT: 段的初始扩展大小(以字节为单位)。
  • NEXT_EXTENT: 段的下一个扩展大小(以字节为单位)。
  • MIN_EXTENTS: 段的最小扩展数。
  • MAX_EXTENTS: 段的最大扩展数。
  • INCREMENT_BY: 段按多少单位增加大小。
  • STATUS: 段的状态(有效、无效、上锁等)。

通过查询 USER_SEGMENTS 表,你可以获取当前用户所有段的信息,如表名、大小、扩展信息等。例如,可以使用以下 SQL 查询获取当前用户的所有表和索引的信息:

sql 复制代码
SELECT SEGMENT_NAME, SEGMENT_TYPE, BYTES, BLOCKS
FROM USER_SEGMENTS
WHERE SEGMENT_TYPE IN ('TABLE', 'INDEX');

这将返回当前用户拥有的所有表和索引的名称、类型、大小和占用的块数。

比如查表目前的空间大小和大小

sql 复制代码
select sum(BYTES) / 1024 / 1024 as SIZE_M, sum(MAX_SIZE) / 1024 / 1024 as MAX_SIZE_M from user_segments where segment_name = 'XXXX'

查看他的spaceName

sql 复制代码
select TABLESPACE_NAME from user_segments where segment_name = 'XXXX'

查看这个space_name是否能自增

sql 复制代码
select file_name,autoextensible,increment_by from dba_data_files where tablespace_name = 'USERS'; 

根据查询结果中的 AUTOEXTENSIBLE 列的值来判断是否允许自动增加段的大小:

  • 如果 AUTOEXTENSIBLE 的值为 'YES',表示允许自动扩展,当表的数据超过当前段大小时,数据库会自动增加段的大小。
  • 如果 AUTOEXTENSIBLE 的值为 'NO',表示不允许自动扩展,达到段的最大限制后将无法自动增加段的大小。
相关推荐
敲代码的小小酥4 分钟前
InfluxDB时序数据库(续)
数据库·时序数据库
智购科技自动贩卖机25 分钟前
自动售货机嵌入式系统Go语言开发实践:从资源受限设备到RTOS协程调度的工程化之路
大数据·linux·数据库·人工智能·yolo·架构·golang
SelectDB32 分钟前
2026 年 Apache Doris 和 StarRocks 怎么选?一篇更接近真实选型的对比
大数据·数据库·数据分析
祢真伟大35 分钟前
DM8 归档日志挖掘导致 TEMP 表空间不释放的问题排查
数据库
qq_4850152141 分钟前
MyBatis-Plus 3.x FieldStrategy 作用
java·数据库·mybatis
lhldsg44 分钟前
课程排课系统实战指南:从数据库设计到算法调优全流程解析
java·数据库·算法·小程序
sel_91 小时前
【多轮对话论文导读(七)】多轮对话论文阅读笔记:从数据生成、用户模拟到上下文重构与长期记忆
论文阅读·人工智能·笔记·深度学习·算法·语言模型·自然语言处理
丰锋ff1 小时前
数据库操作的一些相关命令
数据库
往事只能回味味道1 小时前
MySQL创建数据库并授权指导用户与IP
数据库·tcp/ip·mysql
prog_61031 小时前
【笔记】用cursor手搓cursor(九)
人工智能·笔记·大语言模型·agent