Find out free space on tablespace

后端 未结 10 1669
北荒
北荒 2020-12-12 12:21

Our application has failed a few times because an \'ORA-01536: space quota exceeded for tablespace\', and we would like to be able to prevent this by checking regularly the

10条回答
  •  夕颜
    夕颜 (楼主)
    2020-12-12 12:42

    Here is a query used by Oracle SQL Developer in its Tablespaces view

    select a.tablespace_name as "Tablespace Name",
           round(a.bytes_alloc / 1024 / 1024) "Allocated (MB)",
           round(nvl(b.bytes_free, 0) / 1024 / 1024) "Free (MB)",
           round((a.bytes_alloc - nvl(b.bytes_free, 0)) / 1024 / 1024) "Used (MB)",
           round((nvl(b.bytes_free, 0) / a.bytes_alloc) * 100) "% Free",
           100 - round((nvl(b.bytes_free, 0) / a.bytes_alloc) * 100) "% Used",
           round(maxbytes/1024 / 1024) "Max. Bytes (MB)"
    from  ( select  f.tablespace_name,
                   sum(f.bytes) bytes_alloc,
                   sum(decode(f.autoextensible, 'YES',f.maxbytes,'NO', f.bytes)) maxbytes
            from dba_data_files f
            group by tablespace_name) a,
          ( select  f.tablespace_name,
                   sum(f.bytes)  bytes_free
            from dba_free_space f
            group by tablespace_name) b
    where a.tablespace_name = b.tablespace_name (+)
    union all
    select 
           h.tablespace_name as tablespace_name,
           round(sum(h.bytes_free + h.bytes_used) / 1048576) megs_alloc,
           round(sum((h.bytes_free + h.bytes_used) - nvl(p.bytes_used, 0)) / 1048576) megs_free,
           round(sum(nvl(p.bytes_used, 0))/ 1048576) megs_used,
           round((sum((h.bytes_free + h.bytes_used) - nvl(p.bytes_used, 0)) / sum(h.bytes_used + h.bytes_free)) * 100) Pct_Free,
           100 - round((sum((h.bytes_free + h.bytes_used) - nvl(p.bytes_used, 0)) / sum(h.bytes_used + h.bytes_free)) * 100) pct_used,
           round(sum(f.maxbytes) / 1048576) max
    from   sys.v_$TEMP_SPACE_HEADER h, sys.v_$Temp_extent_pool p, dba_temp_files f
    where  p.file_id(+) = h.file_id
    and    p.tablespace_name(+) = h.tablespace_name
    and    f.file_id = h.file_id
    and    f.tablespace_name = h.tablespace_name
    group by h.tablespace_name
    ORDER BY 2;
    

提交回复
热议问题