Heim  >  Artikel  >  Datenbank  >  使用shell定制awr脚本

使用shell定制awr脚本

WBOY
WBOYOriginal
2016-06-07 16:45:08900Durchsuche

大家在做性能问题诊断的时候,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

 

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn