暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle数据库的“段类型”详解

DBA缓缓说 2019-11-20
3187

Oracle数据库的段类型详解

Oracle数据库中有多少类型的段,除了常见的TABLE、INDEX之外还有哪些?下面通过dba_segments视图来探讨Oracle的段类型。

查询有哪些段类型?


SQL> select distinct segment_type from dba_segments;




下面我们将对几种重点段类型进行简单的说明:


TABLE:这是最常见的段类型,普通表(即非CLUSTER),没有分区,则每个表有一个类型为TABLE的段。


INDEX:这是除了TABLE之外最常见的段类型,表的普通索引,没有分区,则每个索引有一个类型为INDEX的段。除了表上的普通索引之外,INDEX CLUSTER上的索引也是INDEX段,并且在INDEX CLUSTER上必须有一个索引(HASH CLUSTER不要求建索引)。注意IOT表的段类型为INDEX段,而不是TABLE段。


CLUSTER:每个CLUSTER有一个CLUSTER段。一个CLUSTER中可以存储一个或多个表。由于CLUSTER不能分区,所以没有CLUSTER PARTITION这样的段。


LOBINDEX:表的每个LOB字段,有一个LOBINDEX段。注意对于分区表的LOB字段,每个分区上的LOB字段均会有LOBINDEX段。


LOBSEGMENT、LOB PARTITION:表中的每个LOB字段,有LOBSEGMENT字段,如果表进行了分区,则在每个分区上相应有LOB PARTITION。


ROLLBACK:就是8i及以前的回滚段,在9i以及以后的版本中,即使用了自动撤销段管理,仍然会有一个SYSTEM回滚段。


TYPE2 UNDO:这就是9i及以后的“撤销段”,跟ROLLBACK段类似。我们仍然习惯于叫回滚段。


TEMPORARY:临时段。除了磁盘排序产生临时段之外,临时表也会有临时段。另外,在CTAS过程中,如果SQL还没有最终完成,这个时候的表对应的段为TEMPORARY表,只有在SQL执行的最后将TEMPORARY段改为TABLE段。


NESTED TABLE:除了主键之外,每个NESTED TABLE字段上还有一个索引(实际上是每个NESTED TABLE字段对应一具隐含字段,上面建有索引)。


Q:知道了这些,那么日常运维中做中,如果你需要准确查询某个表空间中的对象大小,sql也应该会写了吧?


1、查询某个表空间中,所有【表】的名称、大小:

    select OWNER,SEGMENT_NAME,SEGMENT_TYPE,TABLESPACE_NAME,BYTES/1024/1024 size_MB
    from dba_segments
    where segment_type='TABLE' and tablespace_name='&1'
    order by 5 desc;



    2.查询某个表空间中,所有【索引】的名称、大小:

      select OWNER,SEGMENT_NAME,SEGMENT_TYPE,TABLESPACE_NAME,BYTES/1024/1024 size_MB
      from dba_segments
      where segment_type='INDEX' and tablespace_name='&1'
      order by 5 desc;



      3.查询某个表空间中,所有【分区表】的名称、大小:select

        OWNER,SEGMENT_NAME,SEGMENT_TYPE,TABLESPACE_NAME,BYTES/1024/1024 size_MB
        from dba_segments
        where segment_type='TABLE PARTITION' and tablespace_name='&1'
        order by 5 desc;



        4.查询某个表空间中,所有【分区索引】的名称、大小:

          select OWNER,SEGMENT_NAME,SEGMENT_TYPE,TABLESPACE_NAME,BYTES/1024/1024 size_MB
          from dba_segments
          where segment_type='INDEX PARTITION' and tablespace_name='&1'
          order by 5 desc;



          5.查询某个表空间中,所有【LOB段】的名称、大小:

            select OWNER,SEGMENT_NAME,SEGMENT_TYPE,TABLESPACE_NAME,BYTES/1024/1024 size_MB
            from dba_segments
            where segment_type='LOBSEGMENT' and tablespace_name='&1'
            order by 5 desc;



            扫码关注,以示鼓励


            往期推荐


            1.升级 | 12cR2 PDB热插拔升级至19c

            2.ORACLE数据库19c补丁发布计划(2019.11更新)




            本文分享自微信公众号 - DBA缓缓说,如有侵权,请联系 service001@enmotech.com 删除。
            最后修改时间:2019-12-18 15:21:14
            文章转载自DBA缓缓说,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论