oracle ash report 脚本,通过shell定制ash脚本

本文介绍了如何通过shell脚本简化Oracle ASH(Active Session History)报告的生成,主要针对输入时间戳的繁琐过程进行优化。作者分享了一个定制脚本,允许用户只需输入两个时间戳即可快速获取ASH报告,从而提高工作效率。此外,还提到了ASH与AWR的区别以及ASH_report_text函数的参数详情,帮助读者更深入地理解和使用ASH功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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 } <

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来更有针对性的查看信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值