您好,欢迎访问一九零五行业门户网

使用shell定制awr脚本

大家在做性能问题诊断的时候,awr是不可或缺的工具,使用?/rdbms/admin/awrrpt.sql可能大家使用的多了,可能有时候感觉输入参数还
大家在做性能问题诊断的时候,awr是不可或缺的工具,使用?/rdbms/admin/awrrpt.sql可能大家使用的多了,可能有时候感觉输入参数还是有些太繁琐了。一边复制,一边得到一个快照列表查看,其实还是不太方便。
 比如我想查看某一天的8点到9点的快照,生成一个awr报告,那么可能得算一下大概需要多少天的快照,然后从一个冗长的快照列表中去一个一个复制,还是有些繁琐的。自己在生成awr的过程中总是感觉有些不太方便,今天下决心自己定制了一把。
 首先解决快照列表的问题。一般我们需要得到如下的一个列表。
instance    db name        snap id    snap started    level
 ------------ ------------ --------- ------------------ -----
 test01      test01            1274 19 oct 2014 22:00      1
                                1275 19 oct 2014 23:00      1
                                1276 20 oct 2014 00:00      1
                                1277 20 oct 2014 01:00      1
                                1278 20 oct 2014 02:00      1
我使用了如下的脚本做了定制,比如我需要两天以前的,那天是10月19号,需要得到3点到9点的快照,那么我就直接可以使用脚本得到一个快照的简单列表。
 输出的结果如下。前后各宽裕一个小时。这样我就简单就可以选择哪些快照是我需要的。随时查看。
current instance
 ~~~~~~~~~~~~~~~~
      dbid db_name    inst_num inst_name
 ---------- --------- ---------- ----------------
 3645037571 test01            1 test01
db_name      snap_id snapdat                          lvl
 --------- ---------- -------------------------- ----------
 test01          1262 19 oct 2014 02:00                  1
                1263 19 oct 2014 03:00                  1
                1264 19 oct 2014 04:00                  1
                1265 19 oct 2014 05:00                  1
                1266 19 oct 2014 06:00                  1
                1267 19 oct 2014 07:00                  1
                1268 19 oct 2014 08:00                  1
                1269 19 oct 2014 09:00                  1
8 rows selected.
脚本内容如下:
sqlplus -s $db_conn_str@$sh_db_sid  break on db_name
 set pages 50
 set linesize 100
 prompt
 prompt current instance
 prompt ~~~~~~~~~~~~~~~~
 select d.dbid            dbid
      , d.name            db_name
      , i.instance_number inst_num
      , i.instance_name  inst_name
  from v\$database d,
        v\$instance i;
select
      di.db_name                                        db_name
      , s.snap_id                                        snap_id
      , to_char(s.end_interval_time,'dd mon yyyy hh24:mi') snapdat
      , s.snap_level                                      lvl
  from dba_hist_snapshot s
      , dba_hist_database_instance di
  where
  ( di.dbid,di.instance_number) in
  (select d.dbid            dbid
      , i.instance_number inst_num
  from v\$database d,
        v\$instance i)
    and di.dbid            = s.dbid
    and di.instance_number  = s.instance_number
    and di.startup_time    = s.startup_time
    and to_char(end_interval_time,'yyyymmdd')='$1'
    and extract(hour from end_interval_time) between $2-1 and $3+1
  order by db_name, instance_name, snap_id; 
 eof
其它类似信息

推荐信息