Hi Jack,
That looks like a good tool. Personally, for about the last 5 years, I've been using
an adaptation of the command center database described in the Oracle 7(& later) DBA
Handbook using cron as my scheduler. The neatest implementation I did was several
jobs back where I also collected volume space information. Then, I created a web page
that displayed a graph of volume space, tablespace, and free space in living color --
this was in response to a PHB that kept asking for a database growth projection every
few weeks so that he could plan the following years hardware purchases. Once I gave
him the URL, he quit asking. He never got the purchases right, but that's what
happens when you project the future by looking in the rear view mirror.
On my last job, I told my PHB that I wanted to implement the CC database right out of
the gate. He told me we didn't need it. I implemented it anyway without telling him.
A few months later, he figured out why we needed it.
I can't imagine maintaining a database without having an ongoing growth history.
Kevin Kennedy
First Point Energy Corporation
-----Original Message-----
Sent: Wednesday, June 26, 2002 1:50 PM
To: Multiple recipients of list ORACLE-L
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).
--
Please see the official ORACLE-L FAQ: http://www.orafaq.com
--
Author: kkennedy
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).