监控并记录Oracle数据库空间增长 |
您所在的位置:网站首页 › drops专业版无法恢复内购 › 监控并记录Oracle数据库空间增长 |
统计数据文件
避免权限问题,我们将表和存储过程以及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 desc5.查看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 |