监控并记录Oracle数据库空间增长

您所在的位置:网站首页 drops专业版无法恢复内购 监控并记录Oracle数据库空间增长

监控并记录Oracle数据库空间增长

#监控并记录Oracle数据库空间增长| 来源: 网络整理| 查看: 265

统计数据文件

避免权限问题,我们将表和存储过程以及JOB都创建在sys账号的system表空间里面。每天凌晨1点将表空间使用情况插入db_space_hist表,以便查询统计。

 

1.在SYS账号下创建表DB_SPACE_HIST

-- Create the table for database size history create table db_space_hist ( timestamp date, tablespace_name VARCHAR2(100), file_name VARCHAR2(300), total_space number(8,2), used_space number(8,2), free_space number(8,2), used_percent number(5,2) );

 

2.创建一个存储过程,进行查询插入

-- Create the procedure db_space_history CREATE OR REPLACE PROCEDURE db_space_history AS BEGIN INSERT INTO db_space_hist SELECT SYSDATE, aa.tablespace_name, aa.file_name, aa.total_space, Round(aa.total_space-bb.free_space,2) used_space, Round(bb.free_space,2) free_space, ((aa.total_space - bb.free_space) / total_space)*100 used_percent FROM ( SELECT file_id,bytes/(1024*1024) total_space,tablespace_name,file_name FROM sys.DBA_DATA_FILES ) aa, ( SELECT file_id,SUM(bytes)/(1024*1024) free_space FROM sys.DBA_FREE_SPACE group by file_id ) bb where aa.file_id=bb.file_id ; COMMIT; END;

3.创建JOB,每天凌晨1点执行一次存储过程

-- Create the job that runs at 1:00 am every day DECLARE job_n NUMBER; BEGIN SYS.DBMS_JOB.SUBMIT(job_n,'SYS.DB_SPACE_HISTORY;',sysdate,'TRUNC(sysdate+1)+1/24'); commit; END;

4.SQL进行表大小增长量统计

select * from DB_SPACE_HIST order by timestamp,tablespace_name desc

5.查看Job

select * from dba_jobs;

提醒:其中需要删除job时,需要获取job字段

 

6.删除Job

用户只能删除自己名下的job(DBA也如此),示例如下:

begin dbms_job.remove(job_n); commit; end;

 

其中‘job_n’是在查询job中,查询到job字段。

拓展知识

 

declare job_n number; begin   dbms_job.submit(job_n ,'procedures_name;',sysdate,'TRUNC(sysdate+1)+22/24');   commit; end;

其中”procedures_name;“为需要执行的存储过程,其中”;“必须要存在;

'TRUNC(sysdate+1)+22/24'为执行时间间隔;

常见的时间间隔有:

1、每分钟执行 TRUNC(sysdate,'mi')+1/(24*60) 2、每天定时执行 例如: 每天凌晨0点执行 TRUNC(sysdate+1) 每天凌晨1点执行 TRUNC(sysdate+1)+1/24 每天早上8点30分执行 TRUNC(SYSDATE+1)+(8*60+30)/(24*60)   3、每周定时执行 例如: 每周一凌晨2点执行 TRUNC(next_day(sysdate,1))+2/24 TRUNC(next_day(sysdate,'星期一'))+2/24

每周二中午12点执行 TRUNC(next_day(sysdate,2))+12/24 TRUNC(next_day(sysdate,'星期二'))+12/24   4、每月定时执行 例如: 每月1日凌晨0点执行 TRUNC(LAST_DAY(SYSDATE)+1) 每月1日凌晨1点执行 TRUNC(LAST_DAY(SYSDATE)+1)+1/24   5、每季度定时执行 每季度的第一天凌晨0点执行 TRUNC(ADD_MONTHS(SYSDATE,3),'q') 每季度的第一天凌晨2点执行 TRUNC(ADD_MONTHS(SYSDATE,3),'q')+2/24 每季度的最后一天的晚上11点执行 TRUNC(ADD_MONTHS(SYSDATE+ 2/24,3),'q')-1/24   6、每半年定时执行 例如: 每年7月1日和1月1日凌晨1点执行 ADD_MONTHS(TRUNC(sysdate,'yyyy'),6)+1/24   7、每年定时执行 例如: 每年1月1日凌晨2点执行 ADD_MONTHS(TRUNC(sysdate,'yyyy'),12)+2/24  



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3