Listers, Ever been asked how much free space you have in the tablespaces over time? I wrote a tool that tracks and reports on free space per tablespace over time and thought I would share it.
It consists of a simple stored procedure that stores values in a holding table and a report that will tell you how much each tablespace had over the past week (you can change the coverage of this report.) 1) Here is the stored procedure: CREATE OR REPLACE PROCEDURE tablespace_proc AS v_errmsg varchar2(100); v_errcode varchar2(100); BEGIN delete dbmon.dbmon_tablespace_stats where trunc(record_date) = trunc(sysdate); INSERT INTO dbmon.dbmon_tablespace_stats (tablespace_name, total_space, megs_free, max_extent, autoextend, record_date) SELECT fs.tablespace_name, round(df.total_bytes/1024/1024,0), round(fs.bytes_free/1024/1024,0), round(fs.max_bytes/1024/1024,0), decode(a.tablespace_name,null,'No','Yes'), sysdate FROM (SELECT tablespace_name, SUM(bytes) bytes_free, max(bytes) max_bytes FROM dba_free_space fs GROUP BY tablespace_name) fs, (SELECT tablespace_name, sum(bytes) total_bytes FROM dba_data_files GROUP BY tablespace_name) df, (SELECT DISTINCT tablespace_name FROM dba_data_files WHERE autoextensible = 'YES') a, (select tablespace_name from dba_tablespaces) ts WHERE df.tablespace_name = fs.tablespace_name(+) AND df.tablespace_name = a.tablespace_name(+) AND df.tablespace_name = ts.tablespace_name; commit; exception when others then v_errmsg := substr(SQLERRM,1,100); v_errcode := SQLCODE; insert into dbmon_activity_log (activity_date, activity_desc, procedure_name, error_code, error_msg, error_date) values (sysdate, 'tablespace_proc', 'tablespace_proc', v_errcode, v_errmsg, sysdate); commit; end; / 2) Here is the code to submit it to the job scheduler (every day at 5AM): variable jobno number exec sys.dbms_job.submit(job=>:jobno, what=>'begin dbmon.dbmon_tablespace_proc;end;', next_date=>trunc(sysdate+1)+5/24,interval=>'trunc(sysdate+1)+5/24'); 3) and here is the report: @save_sqlplus_settings set term off set head off spool temp.sql select 'col c'||rownum ||' for 999,999,990 head "'|| to_char(sysdate+1-rownum,'dd-mon')||'"' from dba_tablespaces where rownum<8; select 'compute sum of c'||rownum ||' on report' from dba_tablespaces where rownum<8; select 'break on report' from dual; spool off @temp.sql exec dbmon.dbmon_tablespace_proc; set term on set lines 135 prompt prompt Free space per tablespace: prompt select tablespace_name, sum(decode(old,7,value)) c7, sum(decode(old,6,value)) c6, sum(decode(old,5,value)) c5, sum(decode(old,4,value)) c4, sum(decode(old,3,value)) c3, sum(decode(old,2,value)) c2, sum(decode(old,1,value)) c1 from (select tablespace_name, megs_free value, decode (trunc(record_date), trunc(sysdate),1, trunc(sysdate)-1,2, trunc(sysdate)-2,3, trunc(sysdate)-3,4, trunc(sysdate)-4,5, trunc(sysdate)-5,6, trunc(sysdate)-6,7) old from dbmon.dbmon_tablespace_stats) group by tablespace_name order by 1 / good luck, Jack __________________________________________________ Do You Yahoo!? Yahoo! - Official partner of 2002 FIFA World Cup http://fifaworldcup.yahoo.com -- Please see the official ORACLE-L FAQ: http://www.orafaq.com -- Author: Jack Silvey INET: [EMAIL PROTECTED] Fat City Network Services -- (858) 538-5051 FAX: (858) 538-5051 San Diego, California -- Public Internet access / Mailing Lists -------------------------------------------------------------------- To REMOVE yourself from this mailing list, send an E-Mail message to: [EMAIL PROTECTED] (note EXACT spelling of 'ListGuru') and in the message BODY, include a line containing: UNSUB ORACLE-L (or the name of mailing list you want to be removed from). You may also send the HELP command for other information (like subscribing).