这个脚本可以监控tablespace 空间增长趋势,并且邮件通知到相关domain– 根据TOAD SPACE MANAGEMENT 修改

创建schema,tablespace,table:

create tablespace toad '+ARCH/data/tbs_tst01_00.dbf' size 50G autoextend off;

create user toad identified by toad account unlock;

create user TOAD
  default tablespace toad
  temporary tablespace TEMP
  profile DEFAULT
  quota unlimited on toad;
-- Grant/Revoke object privileges 
grant select on sys.DBA_DATA_FILES to TOAD;
grant select on sys.DBA_FREE_SPACE to TOAD;
grant select on sys.DBA_TABLESPACES to TOAD;
grant select on sys.V_$FILESTAT to TOAD;
-- Grant/Revoke role privileges 
grant connect to TOAD;
grant resource to TOAD;
-- Grant/Revoke system privileges 
grant create any synonym to TOAD;
grant create public synonym to TOAD;
grant create session to TOAD;
grant select any dictionary to TOAD;
grant select any table to TOAD;
grant unlimited tablespace to TOAD;




-- Create table
create table TOAD_TABLESPACES
(
  tablespace_name VARCHAR2(30) not null,
  mon_date        DATE not null
)
tablespace SYSTEM
  pctfree 5
  pctused 94
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );
-- Create/Recreate primary, unique and foreign key constraints 
alter table TOAD_TABLESPACES
  add constraint TOAD_TABLESPACES_PK primary key (TABLESPACE_NAME, MON_DATE)
  using index 
  tablespace SYSTEM
  pctfree 5
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );
-- Grant/Revoke object privileges 
grant select, insert, update, delete on TOAD_TABLESPACES to PUBLIC;


-- Create table
create table TOAD_DATA_FILES
(
  file_id         NUMBER not null,
  mon_date        DATE not null,
  tablespace_name VARCHAR2(30) not null,
  file_name       VARCHAR2(257) not null,
  bytes           NUMBER
)
tablespace SYSTEM
  pctfree 5
  pctused 94
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );
-- Create/Recreate primary, unique and foreign key constraints 
alter table TOAD_DATA_FILES
  add constraint TOAD_DATA_FILES_PK primary key (FILE_ID, MON_DATE)
  using index 
  tablespace SYSTEM
  pctfree 5
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );
alter table TOAD_DATA_FILES
  add constraint TOAD_DATA_FILES_FK foreign key (TABLESPACE_NAME, MON_DATE)
  references TOAD_TABLESPACES (TABLESPACE_NAME, MON_DATE) on delete cascade;
-- Create/Recreate indexes 
create unique index TOAD_DATA_FILES_UK on TOAD_DATA_FILES (TABLESPACE_NAME, FILE_NAME, MON_DATE)
  tablespace SYSTEM
  pctfree 5
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );
-- Grant/Revoke object privileges 
grant select, insert, update, delete on TOAD_DATA_FILES to PUBLIC;


-- Create table
create table TOAD_FILESTAT
(
  file_id   NUMBER not null,
  mon_date  DATE not null,
  phyrds    CHAR(18) not null,
  phywrts   CHAR(18) not null,
  phyblkrd  CHAR(18) not null,
  phyblkwrt CHAR(18) not null,
  readtim   CHAR(18) not null,
  writetim  CHAR(18) not null
)
tablespace SYSTEM
  pctfree 5
  pctused 94
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );
-- Create/Recreate primary, unique and foreign key constraints 
alter table TOAD_FILESTAT
  add constraint TOAD_FILESTAT_PK primary key (FILE_ID, MON_DATE)
  using index 
  tablespace SYSTEM
  pctfree 5
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );
alter table TOAD_FILESTAT
  add constraint TOAD_FILESTAT_FK foreign key (FILE_ID, MON_DATE)
  references TOAD_DATA_FILES (FILE_ID, MON_DATE) on delete cascade;
-- Grant/Revoke object privileges 
grant select, insert, update, delete on TOAD_FILESTAT to PUBLIC;

-- Create table
create table TOAD_FREE_SPACE
(
  file_id  NUMBER not null,
  mon_date DATE not null,
  bytes    NUMBER not null
)
tablespace SYSTEM
  pctfree 5
  pctused 94
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );
-- Create/Recreate primary, unique and foreign key constraints 
alter table TOAD_FREE_SPACE
  add constraint TOAD_FREE_SPACE_PK primary key (FILE_ID, MON_DATE)
  using index 
  tablespace SYSTEM
  pctfree 5
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );
alter table TOAD_FREE_SPACE
  add constraint TOAD_FREE_SPACE_FK foreign key (FILE_ID, MON_DATE)
  references TOAD_DATA_FILES (FILE_ID, MON_DATE) on delete cascade;
-- Grant/Revoke object privileges 
grant select, insert, update, delete on TOAD_FREE_SPACE to PUBLIC;


-- Create table
create table TOAD_REF
(
  name  VARCHAR2(30),
  value NUMBER
)
tablespace SYSTEM
  pctfree 10
  pctused 40
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );
-- Grant/Revoke object privileges 
grant select, insert, update, delete on TOAD_REF to PUBLIC;

创建PACKAGE BODY DBMS_JOB:

CREATE OR REPLACE PACKAGE TOAD_SPACEMAN IS
  PROCEDURE CAPTURE; 
  PROCEDURE RESET; 
END; 



CREATE OR REPLACE PACKAGE BODY TOAD_SPACEMAN IS
PROCEDURE RESET AS 
BEGIN 
  /* DELETE DATA FROM ALL TABLES */ 
  DELETE FROM TOAD.TOAD_TABLESPACES; 
  COMMIT; 

  /* LOAD REAL DATA FOR TODAY */ 
  TOAD.TOAD_SPACEMAN.CAPTURE; 

  /* LOAD DUMMY DATA FOR 60 DAYS */ 
  FOR I IN 1..60 LOOP 
    INSERT INTO TOAD.TOAD_TABLESPACES 
    SELECT TABLESPACE_NAME, TRUNC(MON_DATE-I) 
    FROM TOAD.TOAD_TABLESPACES WHERE MON_DATE = TRUNC(SYSDATE); 
    COMMIT; 

    INSERT INTO TOAD.TOAD_DATA_FILES 
    SELECT FILE_ID, TRUNC(MON_DATE-I), TABLESPACE_NAME, FILE_NAME, ROUND(BYTES*(1-I/100)) 
    FROM TOAD.TOAD_DATA_FILES WHERE MON_DATE = TRUNC(SYSDATE); 
    COMMIT; 

    INSERT INTO TOAD.TOAD_FREE_SPACE 
    SELECT FILE_ID, TRUNC(MON_DATE-I), ROUND(BYTES*(1+I/100)) 
    FROM TOAD.TOAD_FREE_SPACE WHERE MON_DATE = TRUNC(SYSDATE); 
    COMMIT; 

    INSERT INTO TOAD.TOAD_FILESTAT 
    SELECT FILE_ID, TRUNC(MON_DATE-I), PHYRDS, PHYWRTS, 
    PHYBLKRD, PHYBLKWRT, READTIM, WRITETIM 
    FROM TOAD.TOAD_FILESTAT WHERE MON_DATE = TRUNC(SYSDATE); 
    COMMIT; 

  END LOOP; 

END RESET; 

PROCEDURE CAPTURE AS 

  V_MON_DATE    DATE    := NULL; 
  V_ROW_SIZE    INTEGER := 100000; 
  NumDaysToRemove NUMBER; 
  CURSOR History_Cur IS 
    SELECT Value 
      FROM TOAD.TOAD_REF 
     WHERE Name = 'Space Manager History Limit'; 

BEGIN 
  /* SAVE TODAYS DATE */ 
  V_MON_DATE := TRUNC(SYSDATE); 
  /* RETRIEVE THE NUMBER OF DAYS TO REMOVE */ 
  OPEN History_Cur; 
  FETCH History_Cur INTO NumDaysToRemove; 

  /* DELETE DATA OLDER THAN USER SPECIFIED DAYS */ 
  DELETE FROM TOAD.TOAD_TABLESPACES WHERE MON_DATE < V_MON_DATE - NumDaysToRemove; 
  COMMIT; 

  /* DELETE PRE-EXISTING DATA FOR CURRENT DAY */ 
  DELETE FROM TOAD.TOAD_TABLESPACES WHERE MON_DATE = V_MON_DATE; 
  COMMIT; 
  /* DELETE DATA FOR NONEXISTENT TABLESPACES */ 
  DELETE FROM TOAD.TOAD_TABLESPACES X 
  WHERE NOT EXISTS (SELECT 1 FROM DBA_TABLESPACES D 
  WHERE X.TABLESPACE_NAME = D.TABLESPACE_NAME); 
  COMMIT; 

  --/* DELETE DATA FOR NONEXISTENT DATA FILES */ 
  --DELETE FROM TOAD_DATA_FILES X 
  -- WHERE NOT EXISTS (SELECT 1 FROM DBA_DATA_FILES D 
  --                    WHERE X.TABLESPACE_NAME = D.TABLESPACE_NAME 
  --                      AND X.FILE_NAME       = D.FILE_NAME); 
  --COMMIT; 

  /* INSERT NEW TABLESPACES FOUND */ 
  INSERT INTO TOAD.TOAD_TABLESPACES 
  SELECT TABLESPACE_NAME, V_MON_DATE 
    FROM DBA_TABLESPACES; 
  COMMIT; 

  /* INSERT NEW DATA FILES FOUND */ 
  INSERT INTO TOAD.TOAD_DATA_FILES 
  SELECT FILE_ID, V_MON_DATE, TABLESPACE_NAME, FILE_NAME, BYTES 
    FROM DBA_DATA_FILES; 
  COMMIT; 

  /* COLLECT CURRENT FREE SPACE DATA */ 
  INSERT INTO TOAD.TOAD_FREE_SPACE 
  SELECT FILE_ID, V_MON_DATE, SUM(BYTES) 
    FROM DBA_FREE_SPACE 
   GROUP BY FILE_ID, TRUNC(SYSDATE); 
  COMMIT; 

  /* COLLECT CURRENT IO RATE DATA */ 
  INSERT INTO TOAD.TOAD_FILESTAT 
  SELECT FILE#, V_MON_DATE, PHYRDS, PHYWRTS, 
         PHYBLKRD, PHYBLKWRT, READTIM, WRITETIM 
    FROM V$FILESTAT; 
  COMMIT; 

END CAPTURE; 
END TOAD_SPACEMAN; 


begin
  sys.dbms_job.submit(job => :job,
                      what => 'BEGIN 
  TOAD.TOAD_SPACEMAN.CAPTURE; 
END;',
                      next_date => to_date('11-01-2013', 'dd-mm-yyyy'),
                      interval => 'TRUNC(SYSDATE+1)');
  commit;
end;
/

修改监控脚本,监控tablespace趋势并MAIL

0 17 * * * sh /home/oracle/tools/tablespace.sh >> /home/oracle/tools/tablespace.log 2>&1


-bash-3.2$ more  /home/oracle/tools/tablespace.sh
#!/bin/bash
. /home/oracle/.profile

sqlplus / as sysdba <<eof
set head off;
set echo off;
set term off;
set pages 0;
set feed off;
SET SQLPROMPT --SQL
#set echo off pagesize 0 feedback off line 125
spool tablespace.csv
@/home/oracle/tools/tablespace.sql

spool off
exit

eof


(cat tablespace.csv| grep ,- |awk -F "," '$NF < 0 ' && uuencode tablespace.csv tablespace.csv )|mailx -s 'USER_space_10.0.1.4' lihang@xxx.com
(cat tablespace.csv| grep ,- |awk -F "," '$NF < 0 ' && uuencode tablespace.csv tablespace.csv )|mailx -s 'USER_space_10.0.1.4' dba@xxx.com

-bash-3.2$ 
-bash-3.2$ 
-bash-3.2$ more /home/oracle/tools/tablespace.sql
set head off;
set echo off;
set term off;
set pages 0;
set feed off;
SET SQLPROMPT --SQL
#set echo off pagesize 0 feedback off line 125

select 'TABLESPACE_NAME,MAX,MEGS_ALLOC,MEGS_USED,MEGS_FREE,MAX_MEGS_FREE,PCT_USED,PCT_FREE,LAST7DAYS_USED_MEGS,7DAYSLATER_REMAIN_MEGS' from dual union all
select  a.tablespace_name
        ||','|| round(maxbytes/1048576) --Max
        ||','|| round(a.bytes_alloc / 1024 / 1024) --megs_alloc
        ||','|| round((a.bytes_alloc - nvl(b.bytes_free, 0)) / 1024 / 1024) --megs_used
        ||','|| round(nvl(b.bytes_free, 0) / 1024 / 1024) --megs_free
        ||','|| (round(maxbytes/1048576)-(round((a.bytes_alloc - nvl(b.bytes_free, 0)) / 1024 / 1024))) --Max_megs_free
        ||','|| (100 - round((nvl(b.bytes_free, 0) / a.bytes_alloc) * 100)) --Pct_used
        ||','|| round((nvl(b.bytes_free, 0) / a.bytes_alloc) * 100) --Pct_Free
        ||','|| c.last7days_used_megs
        ||','|| (round(maxbytes/1048576)-(round((a.bytes_alloc - nvl(b.bytes_free, 0)) / 1024 / 1024))-c.last7days_used_megs) --"7DAYSLATER_REMAIN_MEGS"
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,
        (select x.tablespace_name,(x.Megs-y.Megs) last7days_used_megs
from
(
SELECT   tablespace_name, (SUM (a.bytes)-sum(b.bytes))/1024/1024  Megs
    FROM   toad_data_files a,toad_free_space b
   WHERE   a.mon_date = TRUNC (SYSDATE - 1)
     and a.file_id=b.file_id(+)
     and a.mon_date=b.mon_date(+)
GROUP BY   tablespace_name
)x,
(
SELECT   tablespace_name, (SUM (a.bytes)-sum(b.bytes))/1024/1024  Megs
    FROM   toad_data_files a,toad_free_space b
   WHERE   a.mon_date = TRUNC (SYSDATE - 8)
     and a.file_id=b.file_id(+)
     and a.mon_date=b.mon_date(+)
GROUP BY   tablespace_name
) y
where x.tablespace_name=y.tablespace_name
) c
where a.tablespace_name = b.tablespace_name (+)
  and a.tablespace_name = c.tablespace_name (+)
;

同理 可以使用 dba_hist_tbspc_space_usage 实现以上功能 不过貌似dba_hist_tbspc_space_usage要license.