php自动计算增长率,Oracle表空间增长率监控脚本

在数据主机上建立tbs_usage表反映数据中数据文件的使用量,其中tbs_timeid为该表主键,作为唯一标识当日数据库表空间的id构造tbs

由于最近业务量大增大,,导致表空间增长速度变得很快,客户也开始担忧表空间的增长率。因此也提出了每日监控表空间增长量的需求。笔者根据客户的需求,在这里写了个简单的脚本,主体思想是通过,将每日查询到的表空间增长率插入到自己建的表中,然后通过构造查询语句,反映出表空间的增长率,具体实施不走如下

在数据主机上建立tbs_usage表反映数据中数据文件的使用量,其中tbs_timeid为该表主键,作为唯一标识当日数据库表空间的id构造tbs_timeid为df.tablespace_name||"-"||(sysdate)

1、pansky用户作为日常管理,目前主要用户表空间数据量的监控

SQL> create user pansky identified by pansky default tablespace users quota 50M on users;

User created.

SQL> grant create session to pansky;

Grant succeeded.

SQL> grant create table to pansky;

Grant succeeded.

SQL> grant select on dba_data_files to pansky;

Grant succeeded.

SQL> grant select on dba_free_space to pansky;

Grant succeeded.

2、以pansky用户创建tbs_usage表

create table tbs_usage

as

SELECT df.tablespace_name||"-"||(sysdate) tbs_timeid ,df.tablespace_name||"-"||(sysdate-1) ys_tbs_timeid,df.tablespace_name,

COUNT(*) datafile_count,

ROUND(SUM(df.BYTES) / 1048576) size_mb,

ROUND(SUM(free.BYTES) / 1048576, 2) free_mb,

ROUND(SUM(df.BYTES) / 1048576 - SUM(free.BYTES) / 1048576, 2) used_mb,

ROUND(MAX(free.maxbytes) / 1048576, 2) maxfree,

100 - ROUND(100.0 * SUM(free.BYTES) / SUM(df.BYTES), 2) pct_used,

ROUND(100.0 * SUM(free.BYTES) / SUM(df.BYTES), 2) pct_free,(sysdate) time

FROM dba_data_files df,

(SELECT tablespace_name,

file_id,

SUM(BYTES) BYTES,

MAX(BYTES) maxbytes

FROM dba_free_space

GROUP BY tablespace_name, file_id) free

WHERE df.tablespace_name = free.tablespace_name(+)

AND df.file_id = free.file_id(+)

GROUP BY df.tablespace_name

ORDER BY 8;

3、创建主键约束

alter table tbs_usage add constraint tbs_usage_pk_tbs_timeid primary key(tbs_timeid);

4、在crontab中运行每日7点30分更新数据库表空间信息的脚本update_tbs_info.sh

30 07 * * * /Oracle10g/update_tbs_info.sh

其中 update_tbs_info.sh脚本内容如下

#!/bin/ksh

#FileName: update_tbs_info.sh

#CreateDate:2011-10-09

#Discription:take the basic information to insert into the table tbs_usage

PATH=/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/oracle/bin:/home/ oracle/bin:/oracle10g/app/oracle/product/10.2.0/db_1/bin;export PATH

ORACLE_SID=zgscdb1;export ORACLE_SID

ORACLE_BASE=/oracle10g/app/oracle;export ORACLE_BASE

ORACLE_HOME=/oracle10g/app/oracle/product/10.2.0/db_1;export ORACLE_HOME

PATH=$ORACLE_HOME/bin:$PATH;export PATH

date >> /oracle10g/log/update_tbs_info.log

sqlplus pansky/pansky <> /oracle10g/log/update_tbs_info.log 2>&1

insert into pansky.tbs_usage

SELECT df.tablespace_name||"-"||(sysdate) tb_timeid,df.tablespace_name||"-"||(sysdate-1) y s_tb_timeid,df.tablespace_name,

COUNT(*) datafile_count,

ROUND(SUM(df.BYTES) / 1048576) size_mb,

ROUND(SUM(free.BYTES) / 1048576, 2) free_mb,

ROUND(SUM(df.BYTES) / 1048576 - SUM(free.BYTES) / 1048576, 2) used_mb,

ROUND(MAX(free.maxbytes) / 1048576, 2) maxfree,

100 - ROUND(100.0 * SUM(free.BYTES) / SUM(df.BYTES), 2) pct_used,

ROUND(100.0 * SUM(free.BYTES) / SUM(df.BYTES), 2) pct_free,sysdate time

FROM dba_data_files df,

(SELECT tablespace_name,

file_id,

SUM(BYTES) BYTES,

MAX(BYTES) maxbytes

FROM dba_free_space

GROUP BY tablespace_name, file_id) free

WHERE df.tablespace_name = free.tablespace_name(+)

AND df.file_id = free.file_id(+)

GROUP BY df.tablespace_name

ORDER BY 8;

commit;

EOF

echo >> /oracle10g/log/update_tbs_info.log

4、查询数据库表空间使用情况的SQL,下例可查询出2011-10-08的表空间使用情况以及相较于2011-10-09日的表空间增长量(MB),并根据pct_used降序排列。

Set linesize 150

Col tablespace_name for a22

select a.tablespace_name,a.datafile_count,a.size_mb,a.free_mb,a.used_mb,a.maxfree,a.pct_used,a.pct_free,to_char(a.time,"yyyy-mm-dd hh24:mi") time,(a.USED_MB-b.USED_MB) increase_mb from pansky.tbs_usage a,pansky.tbs_usage b

where a.YS_TBs_TIMEid= b.TBs_TIMEid

and a.time>=to_date("2011-11-02","yyyy-mm-dd") and a.time< to_date("2011-11-03","yyyy-mm-dd") order by pct_used desc;

logo.gif

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值