通过shell定制ash脚本

简介: ash是在10g以来一个很有用的特性,能够作为awr的补充,对于排查一些历史的问题能够提供更加详细和针对性的数据。 当然个人在使用ash的时候感觉最慢的地方就是在于输入时间戳了,每次输入侧时候都得一边看着样例,一边按照格式,一份ash的报告,至少20%以上的时间耗在这个时间戳上了。
ash是在10g以来一个很有用的特性,能够作为awr的补充,对于排查一些历史的问题能够提供更加详细和针对性的数据。
当然个人在使用ash的时候感觉最慢的地方就是在于输入时间戳了,每次输入侧时候都得一边看着样例,一边按照格式,一份ash的报告,至少20%以上的时间耗在这个时间戳上了。
有时候想查看几个时间点的数据,如果精确到分钟,那么运行ashrpt.sql就得一次又一次的输入时间戳,虽然报告生成的速度还是很快,但是老是感觉手工劳动的部分太多,毕竟有很多的选项我们并不需要。
所以使用了如下的脚本来定制ash,只需要通过shell脚本输入两个时间戳即可。

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

sqlplus -s ${DB_CONN_STR}@${SH_DB_SID} set echo off verify off timing off feedback off trimspool on trimout on
set long 1000000 pagesize 6000 linesize 80
spool ashrpt_$1_$2.lst

select output from table(dbms_workload_repository.ash_report_text(`cat ash_inputs.lst`));
spool off;

EOF

比如我想查看22号7点25分到7点26分的ash数据,就直接输入下面的命令即可。

ksh genashtext.sh 20141022072500 20141022072600

OUTPUT
--------------------------------------------------------------------------------
ASH Report For TEST01/TEST01

DB Name         DB Id    Instance     Inst Num Release     RAC Host
------------ ----------- ------------ -------- ----------- --- ------------
TEST01        3645037571 TEST01              1 11.2.0.3.0  NO  rac1

CPUs           SGA Size       Buffer Cache        Shared Pool    ASH Buffer Size
---- ------------------ ------------------ ------------------ ------------------
   2        299M (100%)        48M (16.1%)       200M (67.0%)        4.0M (1.3%)


          Analysis Begin Time:   22-Oct-14 07:25:00
            Analysis End Time:   22-Oct-14 07:26:00
                 Elapsed Time:         1.0 (mins)
            Begin Data Source:   V$ACTIVE_SESSION_HISTORY
              End Data Source:   V$ACTIVE_SESSION_HISTORY

关于ash还是有一些额外的东西需要补充,ash和awr的部分还是有一些不同,比如ash的数据有在内存中的有在硬盘中归档了的。
在生成ash报告的时候就可以选择。
完整的方法和参数是下面的样子。
  FUNCTION ash_report_text(l_dbid          IN NUMBER,
                           l_inst_num      IN NUMBER,
                           l_btime         IN DATE,
                           l_etime         IN DATE,
                           l_options       IN NUMBER    DEFAULT 0,
                           l_slot_width    IN NUMBER    DEFAULT 0,
                           l_sid           IN NUMBER    DEFAULT NULL,
                           l_sql_id        IN VARCHAR2  DEFAULT NULL,
                           l_wait_class    IN VARCHAR2  DEFAULT NULL,
                           l_service_hash  IN NUMBER    DEFAULT NULL,
                           l_module        IN VARCHAR2  DEFAULT NULL,
                           l_action        IN VARCHAR2  DEFAULT NULL,
                           l_client_id     IN VARCHAR2  DEFAULT NULL,
                           l_plsql_entry   IN VARCHAR2  DEFAULT NULL,
                           l_data_src      IN NUMBER    DEFAULT 0
                          )

其中l_data_src就决定了数据来源是从内存,硬盘还是两者兼有。默认是都有。
当然了还可以根据需要来绑定sql/session来更有针对性的查看信息。

目录
相关文章
|
7天前
|
监控 Unix Shell
shell脚本编程学习
shell脚本编程
23 12
|
2天前
|
存储 运维 监控
自动化运维:使用Shell脚本简化日常任务
【9月更文挑战第35天】在IT运维的日常工作中,重复性的任务往往消耗大量的时间。本文将介绍如何通过编写简单的Shell脚本来自动化这些日常任务,从而提升效率。我们将一起探索Shell脚本的基础语法,并通过实际案例展示如何应用这些知识来创建有用的自动化工具。无论你是新手还是有一定经验的运维人员,这篇文章都会为你提供新的视角和技巧,让你的工作更加轻松。
10 2
|
10天前
|
Shell
shell脚本变量 $name ${name}啥区别
shell脚本变量 $name ${name}啥区别
|
13天前
|
人工智能 监控 Shell
常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)
这篇文章提供了55个常用的Linux Shell脚本实例,涵盖基础案例、文件操作、实用工具、图形化界面及sed、gawk的使用。
28 2
|
1月前
|
Shell
Shell脚本有哪些基本语法?
【9月更文挑战第4天】
43 17
|
1月前
|
存储 Unix Shell
shell脚本编程基础
【9月更文挑战第4天】
36 12
|
1月前
|
网络协议 关系型数据库 MySQL
Shell 脚本案例
Shell 脚本案例
36 8
|
1月前
|
Shell Linux 开发工具
linux shell 脚本调试技巧
【9月更文挑战第3天】在Linux中调试shell脚本可采用多种技巧:使用`-x`选项显示每行命令及变量扩展情况;通过`read`或`trap`设置断点;利用`echo`检查变量值,`set`显示所有变量;检查退出状态码 `$?` 进行错误处理;使用`bashdb`等调试工具实现更复杂调试功能。
|
2月前
|
Ubuntu Linux Shell
在Linux中,如何使用shell脚本判断某个服务是否正在运行?
在Linux中,如何使用shell脚本判断某个服务是否正在运行?
|
2月前
|
Java Shell Linux
【Linux入门技巧】新员工必看:用Shell脚本轻松解析应用服务日志
关于如何使用Shell脚本来解析Linux系统中的应用服务日志,提供了脚本实现的详细步骤和技巧,以及一些Shell编程的技能扩展。
32 0
【Linux入门技巧】新员工必看:用Shell脚本轻松解析应用服务日志