Welcome 微信登录

首页 / 数据库 / MySQL / 使用shell定制awr脚本

大家在做性能问题诊断的时候,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                 18 rows selected.脚本内容如下:sqlplus -s $DB_CONN_STR@$SH_DB_SID <<EOF
 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 得到了快照列表,得到awr报告就容易得多了。
 可以使用如下的脚本来得到awr text格式的报告,输入参数只需要两个快照号。如果要得到html的报告,linesize最好设置为1500,要不会有格式的问题。
set linesize 80print "
       WHENEVER SQLERROR EXIT 5
       SET FEEDBACK OFF
       SET HEAD OFF
       SET PAGES 0
       connect ${DB_CONN_STR}@${SH_DB_SID}
       select d.dbid||","||i.instance_number||","||$1||","||$2||",0" text
                       from v$database d,
              v$instance i ;
       " | sqlplus -s /nolog > awr_inputs.lstsqlplus -s ${DB_CONN_STR}@${SH_DB_SID} <<EOF
 spool awrrpt_$1_$2.lst
 select output from table(dbms_workload_repository.awr_report_text( `cat awr_inputs.lst`));
 spool off;EOF
比如我希望得到4点到8点的awr报告,就可以直接输入两个快照号即可。
 ksh genawrtext.sh 1264 1268
 >ls -lrt
 -rw-r--r-- 1 ora11g dba 258496 Oct 21 08:24 awrrpt_1264_1268.lstOracle AWR报告生成与查看 http://www.linuxidc.com/Linux/2011-04/34397.htm在CentOS 6.4下安装Oracle 11gR2(x64) http://www.linuxidc.com/Linux/2014-02/97374.htmOracle 11gR2 在VMWare虚拟机中安装步骤 http://www.linuxidc.com/Linux/2013-09/89579p2.htmDebian 下 安装 Oracle 11g XE R2 http://www.linuxidc.com/Linux/2014-03/98881.htmOracle AWR报告生成步骤 http://www.linuxidc.com/Linux/2014-06/102685.htm在CentOS 6.4下安装Oracle 11gR2(x64) http://www.linuxidc.com/Linux/2014-02/97374.htmOracle 11gR2 在VMWare虚拟机中安装步骤 http://www.linuxidc.com/Linux/2013-09/89579p2.htmDebian 下 安装 Oracle 11g XE R2 http://www.linuxidc.com/Linux/2014-03/98881.htm更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12本文永久更新链接地址