您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

Oracle表空间增长率监控脚本

2024/3/16 6:51:04发布13次查看
在数据主机上建立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
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product