You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle 19c中DBA_SEGMENTS未显示新分区表,求查子分区大小

解决Oracle 19c分区表子分区大小查询无结果的问题

常见原因及对应解决方法

1. 查询权限不足

DBA_SEGMENTS需要SELECT ANY DICTIONARY权限或DBA角色才能访问。如果你是表的所有者,建议改用USER_SEGMENTS或USER_TAB_SUBPARTITIONS,无需额外权限即可查询自己的表信息。

2. 表名匹配问题

  • 你的查询中使用SEGMENT_NAME LIKE 'TABLENAME',若需精确匹配,应改用=;若需模糊匹配,需添加通配符%(如SEGMENT_NAME LIKE '%TABLENAME%')。
  • 如果创建表时使用双引号指定了区分大小写的表名(如"tablename"),查询时需保留双引号:SEGMENT_NAME = '"tablename"'。

3. 子分区未创建段

如果分区表是自动分区(如Interval分区),或子分区尚未插入任何数据,对应的段不会被创建,DBA_SEGMENTS中自然没有记录。此时可通过DBA_TAB_SUBPARTITIONS查看子分区的元数据及初始分配大小。

4. 查询语句未精准过滤子分区

原查询包含了多种段类型,建议直接过滤SEGMENT_TYPE = 'TABLE SUBPARTITION'以精准定位子分区。


实用查询语句

确认子分区是否存在

SELECT table_name, partition_name, subpartition_name, status
FROM DBA_TAB_SUBPARTITIONS
WHERE table_name = '你的真实表名'
ORDER BY partition_name, subpartition_name;

查询子分区大小(含未生成段的子分区)

SELECT 
    owner,
    table_name,
    partition_name,
    subpartition_name,
    ROUND(bytes/1024/1024/1024, 2) "GB",
    tablespace_name
FROM DBA_TAB_SUBPARTITIONS
WHERE table_name = '你的真实表名'
ORDER BY partition_name, subpartition_name;

查询已生成段的子分区大小(通过DBA_SEGMENTS)

SELECT 
    owner,
    segment_name,
    segment_type,
    partition_name,
    subpartition_name,
    ROUND(bytes/1024/1024/1024, 2) "GB",
    tablespace_name
FROM DBA_SEGMENTS
WHERE SEGMENT_TYPE = 'TABLE SUBPARTITION'
  AND SEGMENT_NAME = '你的真实表名'
ORDER BY bytes DESC;

内容的提问来源于stack exchange,提问作者vigneshwar reddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 05:52:56