监控数据库表空间增长量

Posted 侯志清-江西南昌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了监控数据库表空间增长量相关的知识,希望对你有一定的参考价值。

--创建基表EDBA_TABLESPACE_USAGE_METRICS
create table EDBA_TABLESPACE_USAGE_METRICS as 
SELECT TABLESPACE_NAME ,
ROUND(TABLESPACE_SIZE * 8 / 1024, 2) AS total_m,
ROUND(USED_SPACE * 8 / 1024 , 2) AS used_m,
ROUND(TABLESPACE_SIZE * 8 /  1024, 2) -
ROUND(USED_SPACE * 8 / 1024, 2) AS free_m,
sysdate AS sample_time
FROM DBA_TABLESPACE_USAGE_METRICS
ORDER BY USED_PERCENT desc;

再用存储过程插入每天的表空间使用情况

CREATE OR REPLACE PROCEDURE shot_tablespace_usage_metrics Authid CURRENT_USER IS
  --/************************************************************************************
  -- 程序名称:    shot_tablespace_usage_metrics
  -- 功能描述:    采集表空间使用情况
  -- 输入资源:
  -- 输出资源:
  -- 中间资源:    <用户名>.<中间表或视图等对象名>
  -- 创建人员:    HOUZHIQING
  -- 创建日期:    20170206
  -- 版本说明:    V1.0
  -- 公司名称:    shsnc
  --/************************************************************************************

  v_sql VARCHAR2(10000) DEFAULT \'\'; -- 动态SQL变量,注意SQL长度
BEGIN

  --插入当前表空间使用情况
  v_sql := \'insert into  EDBA_TABLESPACE_USAGE_METRICS  
SELECT TABLESPACE_NAME ,
ROUND(TABLESPACE_SIZE * 8 / 1024, 2) AS total_m,
ROUND(USED_SPACE * 8 / 1024 , 2) AS used_m,
ROUND(TABLESPACE_SIZE * 8 /  1024, 2) -
ROUND(USED_SPACE * 8 / 1024, 2) AS free_m,
sysdate AS sample_time
FROM DBA_TABLESPACE_USAGE_METRICS
ORDER BY USED_PERCENT desc\';
  EXECUTE IMMEDIATE v_sql;
  COMMIT;

  --删除2个月之前的数据
  v_sql := \'delete from EDBA_TABLESPACE_USAGE_METRICS where to_char(sample_time,\'\'
           YYYYMMDD \'\')<to_char(add_months(sysdate,-2),\'\' YYYYMMDD\'\')\';
  EXECUTE IMMEDIATE v_sql;
  COMMIT;
END;

 

创建一个JOB每天定时采集数据

--每天16:00定时运行采集表空间的JOB
declare
  job number;
begin
  dbms_job.submit(job, \'shot_tablespace_usage_metrics;\', sysdate, \'TRUNC(SYSDATE+1)+(16*60)/(24*60) \');
end;

查询日增长的方式

--查询日增长量
select now.tablespace_name,
       now.total_m,
       now.used_m,
       now.free_m,
       now.used_m - befor.used_m increa_m,
       case
         when befor.sample_time is null then
          \'NEW TABLESPACE\'
         when befor.sample_time is not null then
          befor.sample_time || \'_to_\' || now.sample_time
       end date_cycle
  from (select tablespace_name,
               total_m,
               used_m,
               free_m,
               to_char(sample_time, \'YYYYMMDDHH24MISS\') sample_time
          from EDBA_TABLESPACE_USAGE_METRICS
         where to_char(sample_time, \'YYYYMMDD\') =
               to_char(sysdate, \'YYYYMMDD\')) now,
       (select tablespace_name,
               total_m,
               used_m,
               free_m,
               to_char(sample_time, \'YYYYMMDDHH24MISS\') sample_time
          from EDBA_TABLESPACE_USAGE_METRICS
         where to_char(sample_time, \'YYYYMMDD\') =
               to_char(sysdate - 1, \'YYYYMMDD\')) befor
 where now.tablespace_name = befor.tablespace_name(+)
 order by increa_m desc;

 

以上是关于监控数据库表空间增长量的主要内容,如果未能解决你的问题,请参考以下文章

Oracle下表空间收缩

MS SQL 监控数据/日志文件增长

oracle数据库创建自动增长的表空间语句怎么写?

oracle数据库创建自动增长的表空间语句怎么写?

为啥设置表空间自增长老是报ORA-02142错误 ,语句如下:

Zabbix DB历史表由Innodb转换成Tokudb引擎总结