【问题标题】:Check schemas tablespace usage in oracle在 oracle 中检查模式表空间的使用情况
【发布时间】:2018-12-17 21:19:35
【问题描述】:

我有多个非 dba 模式,每个模式都分配了各自的表空间。

有没有办法让架构用户在不访问 dba 表的情况下检查自己分配的表空间使用情况?

我希望架构用户能够仅检查他们自己的表空间使用情况。

我正在使用 Oracle 11g

【问题讨论】:

    标签: sql oracle oracle11g


    【解决方案1】:

    每个用户都可以访问user_segments,它存储了每个段(表、索引等)的大小信息

    要获取所有段的大小,请使用:

    select segment_name,
           segment_type,
           tablespace_name,
           sum(bytes) / 1024 / 1024 as total_bytes_mb
    from user_segments
    group by segment_name, segment_type, tablespace_name
    order by total_bytes_mb desc;
    

    上面将显示 LOB 段,例如SYS_LOB0005330538C00010$$

    要将 LOB 段与相应的列匹配,您可以使用:

    select case 
              when lb.column_name is not null then lb.table_name||'.'||lb.column_name||' ('||sg.segment_name||')' 
              else sg.segment_name 
            end as segment_name, 
            sg.tablespace_name,
            sg.segment_type,
            sum(sg.bytes) / 1024 / 1024 as total_bytes_mb
    from user_segments sg
      left join user_lobs lb on lb.segment_name = sg.segment_name
    group by sg.segment_name, sg.segment_type, lb.column_name, lb.table_name, sg.tablespace_name
    order by total_bytes_mb desc;
    

    【讨论】:

    • 感谢您的回复,有没有什么方法可以同时获取 CLOB 和 BLOB 列的大小?
    • @Umair:我有点不清楚。它将显示 lob 段,但以一种非常不可读的方式。查看我的编辑
    • 感谢您的回答,之前您评论说提供的查询不会考虑 CLOB 和 BLOB 列,我想使用查询来获得表空间以及每个对象的完整使用情况跨度>
    • @Umair:你执行了我的第二个声明吗?它恰恰表明了
    猜你喜欢
    • 2011-07-23
    • 2018-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 1970-01-01
    • 2017-11-18
    相关资源
    最近更新 更多