使用shell定制addm脚本

简介: 在10g开始推出的addm对于工作中的调优能够提供很多的帮助,而且建议也更加客观和全面。但是使用addmrpt.sql的时候还是有些慢, 可以使用如下的脚本来定制addm,能够根据快照生成指定的addm报告。
在10g开始推出的addm对于工作中的调优能够提供很多的帮助,而且建议也更加客观和全面。但是使用addmrpt.sql的时候还是有些慢,
可以使用如下的脚本来定制addm,能够根据快照生成指定的addm报告。
脚本的内容如下:
相比于定制awr,ash要略微有一些难度。对于addm目前只提供了文本格式的内容,所以格式的处理上没什么特别的地方,不用考虑html格式的兼容性。
TASK_NAME=`sqlplus -silent $DB_CONN_STR@$SH_DB_SID set pagesize 0 feedback off verify off heading on echo off 
select  'ADDM_TASK_'||i.instance_name||'_'||$1||'_'||$2   from  v\\$database d,
       v\\$instance i; 
exit; 
END` 


if [ -z "$TASK_NAME" ]; then 
 echo "no addm task exists, please check again" 
 exit 0 
else 
 echo '*******************************************'
 echo " $TASK_NAME    " 
 echo '*******************************************'
fi 

            
sqlplus -silent $DB_CONN_STR@$SH_DB_SID declare       
task_name  varchar2(200);
begin
task_name:='$TASK_NAME';
dbms_output.put_line(task_name);       
dbms_advisor.create_task('ADDM',task_name);
dbms_advisor.set_task_parameter(task_name, 'START_SNAPSHOT', $1);
dbms_advisor.set_task_parameter(task_name, 'END_SNAPSHOT', $2);
--dbms_advisor.set_task_parameter(task_name, 'INSTANCE', :inst_num);
--dbms_advisor.set_task_parameter(task_name, 'DB_ID', :dbid);
dbms_advisor.execute_task(task_name);
end;
/
    
prompt
prompt Generating the ADDM report for this analysis ...
prompt
prompt    
    
set long 1000000 pagesize 0 longchunksize 1000
column get_clob format a80    
select dbms_advisor.get_task_report('$TASK_NAME', 'TEXT', 'TYPICAL')
from   sys.dual;  
END  


addm相比于awr,ash需要在数据库中创建一个task,使用dbms_advisor包来实现。
如果在备份库只读的情况下执行addm,就会报错。
begin
*
ERROR at line 1:
ORA-16000: database open for read-only access
ORA-06512: at "SYS.PRVT_ADVISOR", line 4869
ORA-06512: at "SYS.DBMS_ADVISOR", line 103
ORA-06512: at line 12

可以通过一个实例来说明。
在生产中我们查看系统负载,有个时间段负载很高。110分钟的时间内,负载高达5862%

23973 ** 18-DEC-14 01.00.10.807 AM  23984 ** 18-DEC-14 02.50.16.550 AM        110.096    1412.37 1282%
23979 ** 18-DEC-14 02.00.13.664 AM  23990 ** 18-DEC-14 03.50.19.853 AM        110.103    1362.54 1237%
23985 ** 18-DEC-14 03.00.17.345 AM  23996 ** 18-DEC-14 04.50.23.456 AM        110.102     1310.3 1190%
23991 ** 18-DEC-14 04.00.20.532 AM  24002 ** 18-DEC-14 05.50.27.041 AM        110.108    1392.96 1265%
23997 ** 18-DEC-14 05.00.24.104 AM  24008 ** 18-DEC-14 06.50.32.136 AM        110.134    1629.76 1479%
24003 ** 18-DEC-14 06.00.27.751 AM  24014 ** 18-DEC-14 07.50.36.151 AM        110.140     3341.5 3033%
24009 ** 18-DEC-14 07.00.33.002 AM  24020 ** 18-DEC-14 08.50.39.371 AM        110.106    2766.72 2512%
24015 ** 18-DEC-14 08.00.36.792 AM  24026 ** 18-DEC-14 09.50.42.965 AM        110.103    2470.97 2244%
24021 ** 18-DEC-14 09.00.40.041 AM  24032 ** 18-DEC-14 10.50.47.631 AM        110.127    5018.62 4557%
24027 ** 18-DEC-14 10.00.43.922 AM  24038 ** 18-DEC-14 11.50.51.813 AM        110.132    6456.99 5862%
24033 ** 18-DEC-14 11.00.48.581 AM  24044 ** 18-DEC-14 12.50.55.064 PM        110.108    5888.03 5347%
24039 ** 18-DEC-14 12.00.52.341 PM  24050 ** 18-DEC-14 01.50.59.248 PM        110.115    5476.78 4973%
24045 ** 18-DEC-14 01.00.55.730 PM  24056 ** 18-DEC-14 02.50.02.623 PM        109.115    4371.67 4006%
24051 ** 18-DEC-14 02.01.00.065 PM  24062 ** 18-DEC-14 03.50.05.943 PM        109.098    3828.68 3509%
23922 ** 17-DEC-14 04.30.43.677 PM  24064 ** 18-DEC-14 04.10.07.337 PM       1419.394    40205.2 2832%
23922 ** 17-DEC-14 04.30.43.677 PM  24064 ** 18-DEC-14 04.10.07.337 PM       1419.394    40205.2 2832%

我们来查看一下在这个时间段对应的快照情况
> ksh showsnap.sh 20141218 10 11
Current Instance
~~~~~~~~~~~~~~~~
      DBID DB_NAME     INST_NUM INST_NAME
---------- --------- ---------- ----------------
3100077577 CUST01             1 CUST01

DB_NAME      SNAP_ID SNAPDAT                  LVL
--------- ---------- ----------------- ----------
CUST01         24021 18 Dec 2014 09:00          1
               24022 18 Dec 2014 09:10          1
               24023 18 Dec 2014 09:20          1
               24024 18 Dec 2014 09:30          1
               24025 18 Dec 2014 09:40          1
               24026 18 Dec 2014 09:50          1
               24027 18 Dec 2014 10:00          1
               24028 18 Dec 2014 10:10          1
               24029 18 Dec 2014 10:20          1
               24030 18 Dec 2014 10:30          1
               24031 18 Dec 2014 10:40          1
               24032 18 Dec 2014 10:50          1
               24033 18 Dec 2014 11:00          1
               24034 18 Dec 2014 11:10          1
               24035 18 Dec 2014 11:20          1
               24036 18 Dec 2014 11:30          1
               24037 18 Dec 2014 11:40          1
               24038 18 Dec 2014 11:50          1
               24039 18 Dec 2014 12:00          1
               24040 18 Dec 2014 12:10          1
               24041 18 Dec 2014 12:20          1
               24042 18 Dec 2014 12:30          1
               24043 18 Dec 2014 12:40          1
               24044 18 Dec 2014 12:50          1

比如我们选择24030和24031两个快照,可以使用如下的方式来生成addm报告。
ksh genaddmrpt .sh 24030 24031 
*******************************************
 ADDM_TASK_XXXXX_ 24030_ 24031    
*******************************************
PL/SQL procedure successfully completed.
Generating the ADDM report for this analysis ...
          ADDM Report for Task 'ADDM_TASK_XXXXX_ 24030 _ 24031'
          ----------------------------------------------------
Analysis Period
---------------
AWR snapshot range from 24030 to 24031.
Time period starts at Dec 2014 10:30 AM
Time period ends at Dec 2014 10:40 AM

Analysis Target
---------------
Database 'XXXXX' with DB ID 3100077577 .
Database version 11.2.0.2.0.
Analysis was requested for all instances, but ADDM analyzed instance xxxx,
numbered 1 and hosted at xxxxx.
See the "Additional Information" section for more information on the requested
instances.

。。。。


目录
相关文章
|
20天前
|
存储 安全 Unix
七、Linux Shell 与脚本基础
别再一遍遍地敲重复的命令了,把它们写进Shell脚本,就能一键搞定。脚本本质上就是个存着一堆命令的文本文件,但要让它“活”起来,有几个关键点:文件开头最好用#!/usr/bin/env bash来指定解释器,并用chmod +x给它执行权限。执行时也有讲究:./script.sh是在一个新“房间”(子Shell)里跑,不影响你;而source script.sh是在当前“房间”里跑,适合用来加载环境变量和配置文件。
259 9
|
19天前
|
存储 Shell Linux
八、Linux Shell 脚本:变量与字符串
Shell脚本里的变量就像一个个贴着标签的“箱子”。装东西(赋值)时,=两边千万不能有空格。用单引号''装进去的东西会原封不动,用双引号""则会让里面的$变量先“变身”再装箱。默认箱子只能在当前“房间”(Shell进程)用,想让隔壁房间(子进程)也能看到,就得给箱子盖个export的“出口”戳。此外,Shell还自带了$?(上条命令的成绩单)和$1(别人递进来的第一个包裹)等许多特殊箱子,非常有用。
105 3
|
4月前
|
Shell
Shell脚本循环控制:shift、continue、break、exit指令
使用这些命令可以让你的Shell脚本像有生命一样动起来。正确使用它们,你的脚本就能像一场精心编排的舞蹈剧目,既有旋律的起伏,也有节奏的跳跃,最终以一场惊艳的表演结束。每一个动作、每一个转折点,都准确、优雅地完成所需要表达的逻辑。如此,你的脚本不只是冰冷的代码,它透过终端的界面,跳着有节奏的舞蹈,走进观众——使用者的心中。
212 60
|
1月前
|
数据采集 监控 Shell
无需Python:Shell脚本如何成为你的自动化爬虫引擎?
Shell脚本利用curl/wget发起请求,结合文本处理工具构建轻量级爬虫,支持并行加速、定时任务、增量抓取及分布式部署。通过随机UA、异常重试等优化提升稳定性,适用于日志监控、价格追踪等场景。相比Python,具备启动快、资源占用低的优势,适合嵌入式或老旧服务器环境,复杂任务可结合Python实现混合编程。
|
7月前
|
关系型数据库 MySQL Shell
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
一款自动化 MySQL 备份 Shell 脚本,支持本地存储、远程服务器同步(SSH+rsync)、阿里云 OSS 备份,并自动清理过期备份。适用于数据库管理员和开发者,帮助确保数据安全。
|
3月前
|
Web App开发 缓存 安全
Linux一键清理系统垃圾:释放30GB空间的Shell脚本实战​
这篇博客介绍了一个实用的Linux系统盘清理脚本,主要功能包括: 安全权限检查和旧内核清理,保留当前使用内核 7天以上日志文件清理和系统日志压缩 浏览器缓存(Chrome/Firefox)、APT缓存、临时文件清理 智能清理Snap旧版本和Docker无用数据 提供磁盘空间使用前后对比和大文件查找功能 脚本采用交互式设计确保安全性,适合定期维护开发环境、服务器和个人电脑。文章详细解析了脚本的关键功能代码,并给出了使用建议。完整脚本已开源,用户可根据需求自定义调整清理策略。
272 1
|
5月前
|
存储 Unix Shell
确定Shell脚本在操作系统中的具体位置方法。
这对于掌握Linux的文件系统组织结构和路径方面的理解很有帮助,是我们日常工作和学习中都可能使用到的知识。以上讲解详细清晰,应用简便,是每一个想要精通操作系统的计算机爱好者必备的实用技能。
124 17
|
5月前
|
Linux Shell
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
142 4
|
5月前
|
Linux Shell 数据安全/隐私保护
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
297 3
|
6月前
|
Linux Shell
在Linux、CentOS7中设置shell脚本开机自启动服务
以上就是在CentOS 7中设置shell脚本开机自启动服务的全部步骤。希望这个指南能帮助你更好地管理你的Linux系统。
477 25