监控数据库表空间增长量

--创建基表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;

时间: 2024-10-11 05:56:15

监控数据库表空间增长量的相关文章

zabbix监控数据库表空间大小

1.通过脚本生成日志文件 2.添加自定义脚本 oracle_discovery.sh 通过该脚本取出表空间名,并进行JSON格式化输出(因为zabbix的自动发现功能获取的数据类型是JSON格式的) #!/bin/bash TABLESPACE=`cat /home/patrol/tablespace.log |awk '{print$2}'|awk 'NR>3{print}'` COUNT=`echo "$TABLESPACE" |wc -l` INDEX=0 echo '{&

如何测试数据库表空间不足场景

1.select * from DBA_DATA_FILES; 这个命令主要是了解数据库实例中各个模块数据库表空间的大小,是否支持自动扩展(AUTOEXTENSIBLE),MAX扩展(MAXBYTES),以及各个表空间的路径(\oracle\oradata\i2kdb\omscm.dbf) 查看AUTOEXTENSIBLE字段是否支持自动扩展,如果对应表空间的该字段为YES,表示支持自动扩展 2.alter database datafile '\oracle\oradata\i2kdb\oms

基于Cordys C3版平台应用系统维护经验一则——Oracle数据库表空间满了

某日中午,有用户陆续反映系统问题,说流程送出异常.待办不消失.待办打不开等等.维护工程师开始分析问题,后台较为清晰的现象是流转日志记录插入数据失败,人工测试表插入成功,其它现象五花八门,没有规律,经过多位维护工程师的努力,终于由Oracle数据库管理工程师在16:01排除故障,系统基本恢复"正常". 故障原因是"应用系统Oracle数据库中Cordys用户所对应的表空间"满了,导致应用无法正常向数据库写入数据,造成业务数据不完整. 第二日,维护人员根据用户反馈,逐个

MySQL数据库表空间及索引的查看

本文我们介绍MySQL数据库表空间和索引的查看方法,并详细地给出了其代码,接下来我们一一介绍. 1.查看索引 (1)单位是GB SELECT CONCAT(ROUND(SUM(index_length)/(1024*1024*1024), 2), ' GB') AS 'Total Index Size' +------------------+ | Total Index Size | +------------------+ | 1.70 GB | +------------------+ (

如何查看Oracle数据库表空间大小(空闲、已使用),是否要增加表空间的数据文件

要查看Oracle数据库表空间大小,是否需要增加表空间的数据文件,在数据库管理中,磁盘空间不足是DBA都会遇到的问题,问题比较常见. --1.查看表空间已经使用的百分比 Sql代码 select   a.tablespace_name,a.bytes/1024/1024 "Sum MB",(a.bytes-b.bytes)/1024/1024   "used MB",b.bytes/1024/1024 "free MB",round(((a.by

创建oracle数据库表空间并分配用户

我们在本地的oracle上或者virtualbox的oracle上 创建新的数据库表空间操作:通过system账号来创建并授权/*--创建表空间create tablespace YUJKDATAdatafile 'c:\yujkdata200.dbf' --指定表空间对应的datafile文件的具体的路径size 100mautoextend onnext 10m*/ /*--创建用户create user yujkdev identified by yujkdevdefault tables

数据库-表空间、数据库备份(实施)

近来第一次写了实施文档,也有一些收获,及时记录下来,以备后用. 数据库表空间 ORACLE数据库被划分成称作为表空间的逻辑区域--形成ORACLE数据库的逻辑结构. 一个ORACLE数据库能够有一个或多个表空间, 而一个表空间则对应着一个或多个物理的数据库文件. 表空间是ORACLE数据库恢复的最小单位,容纳着许多数据库实体,如表.视图.索引.聚簇.回退段和临时段等. 每个ORACLE数据库均有SYSTEM表空间,这是数据库创建时自动创建的. SYSTEM表空间必须总要保持联机,因为其包含着数据

Nagios监控Oracle表空间出现Cannot determine ORACLE_HOME报错

在使用Nagios监控软件时,监控Oracle表空间使用率,遇到了如下错误: 表名监控状态是:UNKNOWN错误信息是:Cannot determine ORACLE_HOME for sid dbnms 由于我是使用root用户启动的nagios,也是用root执行的check_oracle插件的命令.所以首先分析的是环境变量的问题,然后我修改了root目录下的.bash_profile文件中的环境变量,如下: 但是还是出现了上面的错误. 然后我就直接more了下check_oracle插件的

达梦数据库表空间管理

表空间 数据库的物理结构:文件系统-数据文件数据库的逻辑结构:数据库-表空间(多个数据文件构成)-段-簇-页(一) 达梦默认有哪些表空间及其作用1.查看表空间[语句]SQL>select tablespace name from dba tablespaces:(1) SYSTEM:系统表空间,存放数据字典信息(2) ROLL:回滚表空间,存放回滚数据,对一个数据进行更新操作,存放的是更新前的版本信息,可以支持MVCC(事务多版本机制)(3) TEMP:临时表空间,存放临时数据,可不做备份(4)