With this script you can monitor tablespaces sizes in oracle database. This script returns next columns:
Tablespace - tablespace name
Size MB - currently allocated space of tablespace in megabytes
Free MB - free size from allocated space in tablespace in megabytes
Max MB - size of maximum space until tablespace will extend in megabytes
Maximum free space in MB - free space in tablespace until it will be full, this is real value for monitring because it is showing real free space in tablespace in megabytes
Used MB - what space is used frm allocated space by segments in tablespace in megabytes
Used % - percentage of used space in tablespace, this is also real monitoring value
Status - oracle offers best practice for tablespace used percentage values 85% - caution, 90% - alarm, 97% - critical, so this script is depend on this values.
( select df.tablespace_name "Tablespace", round(df.tablespace_size / 1024 / 1024, 2) "Size MB", round(nvl(fs.free_space, 0) / 1024 / 1024, 2) "Free MB", round(df.tablespace_maxsize / 1024 / 1024, 2) "Max MB", round((df.tablespace_maxsize - (df.tablespace_size - round(nvl(fs.free_space, 0), 2))) / 1024 / 1024,2) "Maximum free space in MB", round((df.tablespace_size / 1024 / 1024 - fs.free_space / 1024 / 1024),2) "Used MB", to_char(round((df.tablespace_size - round(nvl(fs.free_space, 0), 2)) / df.tablespace_maxsize * 100, 2), '990D99') || ' %' "Used %", case when round((df.tablespace_size - round(nvl(fs.free_space, 0), 2)) / df.tablespace_maxsize * 100, 2) > 95 then 'CRITICAL - 95%' when round((df.tablespace_size - round(nvl(fs.free_space, 0), 2)) / df.tablespace_maxsize * 100, 2) > 90 then 'ALARM - 90%' when round((df.tablespace_size - round(nvl(fs.free_space, 0), 2)) / df.tablespace_maxsize * 100, 2) > 85 then 'CAUTION - 85%' else 'OK < 85%' end "Status" from (select tablespace_name, sum(bytes) tablespace_size, sum(decode(maxbytes, 0, bytes, null, bytes, maxbytes)) tablespace_maxsize from dba_data_files group by tablespace_name) df, (select tablespace_name, sum(bytes) free_space from dba_free_space group by tablespace_name) fs where df.tablespace_name = fs.tablespace_name(+) ) UNION ( select ts.tablespace_name "Tablespace", round(ts.tablespace_size / 1024 / 1024, 2) "Size MB", round(nvl(tfs.free_space, 0) / 1024 / 1024, 2) "Free MB", round(ts.tablespace_maxsize / 1024 / 1024, 2) "Max MB", round((ts.tablespace_maxsize - (ts.tablespace_size - tfs.free_space)) / 1024 / 1024, 2) "Maximum free space in MB", round((ts.tablespace_size / 1024 / 1024 - tfs.free_space / 1024 / 1024),2) "Used MB", to_char(round((ts.tablespace_size - tfs.free_space) / ts.tablespace_maxsize * 100, 2), '990D99') || ' %' "Used %", case when round((ts.tablespace_size - tfs.free_space) / ts.tablespace_maxsize * 100, 2) > 95 then 'CRITICAL - 95%' when round((ts.tablespace_size - tfs.free_space) / ts.tablespace_maxsize * 100, 2) > 90 then 'ALARM - 90%' when round((ts.tablespace_size - tfs.free_space) / ts.tablespace_maxsize * 100, 2) > 85 then 'CAUTION - 85%' else 'OK < 85%' end "Status" from (select tablespace_name, sum(bytes) tablespace_size, sum(decode(maxbytes, 0, bytes, null, bytes, maxbytes)) tablespace_maxsize from dba_temp_files group by tablespace_name) ts, (select tablespace_name, free_space from dba_temp_free_space) tfs where ts.tablespace_name = tfs.tablespace_name ) order by 7 desc, 1 asc;
note :
If it'll work slow on your database, main reason for this is your recyclebin, if there is too many objects then dba_free_space view will work slow, solution for this is to purge dba_recyclebin
No comments:
Post a Comment