On the road again

Как узнать сколько места занимает база данных Oracle, сколькр места свободно? Обэтом рассказывается ниже.

Место, которое занимает БД Oracle определяется с помощью трех составляющих: размером датафайлов, логов и временных файлов. Можно определить размер каждой из этих составляющих отдельно (в МБ):

select sum(bytes)/1024/1024 from dba_data_files;
select sum(bytes)/1024/1024 from v$log;
select sum(bytes)/1024/1024 from v$tempfile;

Однако более удобный способ - использовать скрипт, приведенный ниже:

col "Database Size" format a20
col "Free space" format a20
col "Used space" format a20
select    round(sum(used.bytes) / 1024 / 1024 / 1024 ) || ' GB' "Database Size"
,    round(sum(used.bytes) / 1024 / 1024 / 1024 ) -
round(free.p / 1024 / 1024 / 1024) || ' GB' "Used space"
,    round(free.p / 1024 / 1024 / 1024) || ' GB' "Free space"
from    (select    bytes
from    v$datafile
union    all
select    bytes
from     v$tempfile
union     all
select     bytes
from     v$log) used
,    (select sum(bytes) as p
from dba_free_space) free
group by free.p
/

 

Так же может оказаться полезным скрипт, выводящий список всех тейблспейсов, суммарный объем, занятое и свободное место:

set pages 999
col tablespace_name format a40
col "size MB" format 999,999,999
col "free MB" format 99,999,999
col "% Used" format 999
select     tsu.tablespace_name, ceil(tsu.used_mb) "size MB"
,    decode(ceil(tsf.free_mb), NULL,0,ceil(tsf.free_mb)) "free MB"
,    decode(100 - ceil(tsf.free_mb/tsu.used_mb*100), NULL, 100,
100 - ceil(tsf.free_mb/tsu.used_mb*100)) "% used"
from    (select tablespace_name, sum(bytes)/1024/1024 used_mb
from     dba_data_files group by tablespace_name union all
select     tablespace_name || '  **TEMP**'
,    sum(bytes)/1024/1024 used_mb
from     dba_temp_files group by tablespace_name) tsu
,    (select tablespace_name, sum(bytes)/1024/1024 free_mb
from     dba_free_space group by tablespace_name) tsf
where    tsu.tablespace_name = tsf.tablespace_name (+)
order    by 4
/



 

Add comment