使用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



得到了快照列表,得到awr报告就容易得多了。
可以使用如下的脚本来得到awr text格式的报告,输入参数只需要两个快照号。如果要得到html的报告,linesize最好设置为1500,要不会有格式的问题。
set linesize 80

print "
        WHENEVER SQLERROR EXIT 5
        SET FEEDBACK OFF
        SET HEAD OFF
        SET PAGES 0
        connect ${DB_CONN_STR}@${SH_DB_SID}\n
        select d.dbid||','||i.instance_number||','||$1||','||$2||',0' text
                        from v\$database d,
             v\$instance i ;
        " | sqlplus -s /nolog > awr_inputs.lst

sqlplus -s ${DB_CONN_STR}@${SH_DB_SID} 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.lst

目录
相关文章
|
6月前
|
关系型数据库 MySQL Shell
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
一款自动化 MySQL 备份 Shell 脚本,支持本地存储、远程服务器同步(SSH+rsync)、阿里云 OSS 备份,并自动清理过期备份。适用于数据库管理员和开发者,帮助确保数据安全。
|
4月前
|
存储 Unix Shell
确定Shell脚本在操作系统中的具体位置方法。
这对于掌握Linux的文件系统组织结构和路径方面的理解很有帮助,是我们日常工作和学习中都可能使用到的知识。以上讲解详细清晰,应用简便,是每一个想要精通操作系统的计算机爱好者必备的实用技能。
99 17
|
4月前
|
Linux Shell
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
116 4
|
4月前
|
Linux Shell 数据安全/隐私保护
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
256 3
|
5月前
|
Linux Shell
在Linux、CentOS7中设置shell脚本开机自启动服务
以上就是在CentOS 7中设置shell脚本开机自启动服务的全部步骤。希望这个指南能帮助你更好地管理你的Linux系统。
407 25
|
11月前
|
Shell
一个用于添加/删除定时任务的shell脚本
一个用于添加/删除定时任务的shell脚本
281 1
|
7月前
|
Shell Linux
【linux】Shell脚本中basename和dirname的详细用法教程
本文详细介绍了Linux Shell脚本中 `basename`和 `dirname`命令的用法,包括去除路径信息、去除后缀、批量处理文件名和路径等。同时,通过文件备份和日志文件分离的实践应用,展示了这两个命令在实际脚本中的应用场景。希望本文能帮助您更好地理解和应用 `basename`和 `dirname`命令,提高Shell脚本编写的效率和灵活性。
571 32
|
6月前
|
关系型数据库 Shell 网络安全
定期备份数据库:基于 Shell 脚本的自动化方案
本篇文章分享一个简单的 Shell 脚本,用于定期备份 MySQL 数据库,并自动将备份传输到远程服务器,帮助防止数据丢失。
|
7月前
|
JavaScript Shell C#
多种脚本批量下载 Docker 镜像:Shell、PowerShell、Node.js 和 C#
本项目提供多种脚本(Shell、PowerShell、Node.js 和 C#)用于批量下载 Docker 镜像。配置文件 `docker-images.txt` 列出需要下载的镜像及其标签。各脚本首先检查 Docker 是否安装,接着读取配置文件并逐行处理,跳过空行和注释行,提取镜像名称和标签,调用 `docker pull` 命令下载镜像,并输出下载结果。使用时需创建配置文件并运行相应脚本。C# 版本需安装 .NET 8 runtime。
411 3
|
10月前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本