(Oracle)自定义调用AWR&ADDM
Oracle->自定义调用AWR&ADDM
需求描述:
前面设定每天自动生成AWR用于提供前一天的数据库状态信息,但因数据库和信息过多不利于直观检查。此次新增ADDM诊断。
ADDM诊断脚本分析:
$ORACLE_HOME/rdbms/admin/addmrpt.sql--ADDM自动诊断资料库的主脚本
用于显示当前的数据库和实例,并调用@@addmrpti.sql脚本
- [oracle@xxx~]$ cat $ORACLE_HOME/rdbms/admin/addmrpt.sql |grep -v "#"|grep -v "-"|grep -v "Rem"|grep -v "^$"
- define num_days = 3;
- set heading on echo off feedback off verify off underline on timing off;
- column inst_num heading "Inst Num" new_value inst_num format 99999;
- column inst_name heading "Instance" new_value inst_name format a12;
- column db_name heading "DB Name" new_value db_name format a12;
- column dbid heading "DB Id" new_value dbid format 9999999999 just c;
- 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;
- @@addmrpti
- set heading on echo off feedback 6 verify on underline on timing off;
- undefine num_days
- undefine report_name
- undefine inst_num
- undefine inst_name
- undefine db_name
- undefine dbid
$ORACLE_HOME/rdbms/admin/addmrpti.sql ---查询当前snapshot快照点,接收用户输入,设置和执行dbms_advisor程序包。
这两个sql脚本用于接收和显示awr快照点的信息下,需说明addm诊断报告会在每个awr快照点生成后自动产生。@@awrinput.sql
@@awrinpnm.sql &report_name_prefix &report_name_extension
- [oracle@xxxx~]$ cat $ORACLE_HOME/rdbms/admin/addmrpti.sql |grep -v "#"|grep -v "-"|grep -v "Rem"|grep -v "^$"
- define report_name_prefix = 'addmrpt_';
- define report_name_extension = '.txt';
- set heading on echo off feedback off verify off underline on timing off;
- @@awrinput.sql
- @@awrinpnm.sql &report_name_prefix &report_name_extension
- set pagesize 0;
- set heading off echo off feedback off verify off;
- variable task_name varchar2(40);
- prompt
- prompt
- prompt Running the ADDM analysis on the specified pair of snapshots ...
- prompt
- begin
- declare
- id number;
- name varchar2(100);
- descr varchar2(500);
- BEGIN
- name := '';
- descr := 'ADDM run: snapshots [' || :bid || ', '
- || :eid || '], instance ' || :inst_num
- || ', database id ' || :dbid;
- dbms_advisor.create_task('ADDM',id,name,descr,null);
- :task_name := name;
- dbms_advisor.set_task_parameter(name, 'START_SNAPSHOT', :bid);
- dbms_advisor.set_task_parameter(name, 'END_SNAPSHOT', :eid);
- dbms_advisor.set_task_parameter(name, 'INSTANCE', :inst_num);
- dbms_advisor.set_task_parameter(name, 'DB_ID', :dbid);
- dbms_advisor.execute_task(name);
- end;
- end;
- /
- prompt
- prompt Generating the ADDM report for this analysis ...
- prompt
- prompt
- spool &report_name;
- 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;
- spool off;
- prompt
- prompt End of Report
- prompt Report written to &report_name.
- set termout off;
- clear columns sql;
- ttitle off;
- btitle off;
- repfooter off;
- set pagesize 14;
- set heading on echo off feedback 6 verify on underline on timing off;
- set long 80 longchunksize 80
- set termout on
- undefine dbid
- undefine inst_num
- undefine num_days
- undefine begin_snap
- undefine end_snap
- undefine report_name
- undefine report_name_prefix
- undefine report_name_extension
- whenever sqlerror continue;
开始构造自定义SQL脚本<ora_auto_addmrpt.sql>
- [oracle@xxxxxx~]$ cat /opt/app/oracle/ora_auto/ora_auto_addmrpt.sql
- set echo off;
- set veri off;
- set feedback off;
- set termout on;
- set heading off;
- set pagesize 0;
- set heading off echo off feedback off verify off;
- variable task_name varchar2(40);
- variable dbid number;
- variable inst_num number;
- variable bid number;
- variable eid number;
- variable dbname varchar2(9);
- variable btime number;
- variable etime number;
- begin
- select dbid into :dbid from v$database;
- select instance_number into :inst_num from v$instance;
- select max(snap_id)-24 into :bid from dba_hist_snapshot where DBID=:dbid;
- select max(snap_id) into :eid from dba_hist_snapshot where DBID=:dbid;
- select lower(NAME) into :dbname from v$database;
- select to_char(end_interval_time,'YYYYMMDDHH24') into :btime from dba_hist_snapshot where snap_id=:bid;
- select to_char(end_interval_time,'DDHH24') into :etime from dba_hist_snapshot where snap_id=:eid;
- end;
- /
- --prompt
- --prompt
- --prompt Running the ADDM analysis on the specified pair of snapshots ...
- --prompt
- begin
- declare
- id number;
- name varchar2(100);
- descr varchar2(500);
- BEGIN
- name := '';
- descr := 'ADDM run: snapshots [' || :bid || ', '
- || :eid || '], instance ' || :inst_num
- || ', database id ' || :dbid;
- dbms_advisor.create_task('ADDM',id,name,descr,null);
- :task_name := name;
- dbms_advisor.set_task_parameter(name, 'START_SNAPSHOT', :bid);
- dbms_advisor.set_task_parameter(name, 'END_SNAPSHOT', :eid);
- dbms_advisor.set_task_parameter(name, 'INSTANCE', :inst_num);
- dbms_advisor.set_task_parameter(name, 'DB_ID', :dbid);
- dbms_advisor.execute_task(name);
- end;
- end;
- /
- --prompt
- --prompt Generating the ADDM report for this analysis ...
- --prompt
- --prompt
- column report_name new_value report_name noprint;
- select :dbname||'_'||:btime||'to'||:etime||'.'||'txt' report_name from dual;
- set termout off;
- spool &report_name;
- 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;
- spool off;
- set termout on;
- prompt &report_name
- undefine dbid
- undefine inst_num
- undefine report_name
- exit
将ADDM sql脚本整合到自定义调用AWR shell脚本中
- Script:
- [oracle@ ~]$ cat /opt/app/oracle/ora_auto/oracle_auto_awr.sh
- #!/bin/bash
- # auto gather awrrpt.sql
- #
- # parameters:
- # $ -> SID
- #
- # The whole package includes files;
- # oracle_auto_awr.sh(this file)
- # ora_auto_awrrpt.sql
- #
- #引用oracle数据库环境变量
- . /home/oracle/.bash_profile ->(注意加上oracle环境变量,不然crontab排程运行时不能正常执行sql脚本). /home/oracle/.bash_profile
- PATH=$PATH:$HOME/bin:/sbin:/usr/bin:/usr/sbin
- ORACLE_BASE=/opt/app/oracle;export ORACLE_BASE
- ORACLE_HOME=$ORACLE_BASE/product/11.2./dbhome_1;export ORACLE_HOME
- ORA_AUTO_PATH='/opt/app/oracle/ora_auto'
- #自定义awr脚本的SQL语句
- ORACLE_SQL=$ORA_AUTO_PATH/ora_auto_awrrpt.sql
ORACLE_ADDM_SQL=$ORA_AUTO_PATH/ora_auto_addmrpt.sql- DAY_TIME=`date +"%Y%m%d"`
- AWR_ZIP=AWR_$DAY_TIME.zip
- cd $ORA_AUTO_PATH
- echo "Dear Sir:">mail.log
- echo " This is oracle database Awr.">>mail.log
- mkdir -p $ORA_AUTO_PATH/$DAY_TIME
- #脚本后跟上多个数据库名,用于集合
- array_1=$@
- for sid in ${array_1[@]}
- do
- sleep
- tnschk=`tnsping $sid`
- tnschk2=` echo $tnschk | grep -c OK`
- if [ ${tnschk2} -eq ] ; then
- echo " $sid start gather." >>mail.log
- ###连接数据库字符串,注意连接数据库的账户是否有权限执行awr
- ORACLE_CONN='xxx/xxxx@'$sid
- $ORACLE_HOME/bin/sqlplus -s $ORACLE_CONN @$ORACLE_SQL >sqlplus_$sid_output.log
- $ORACLE_HOME/bin/sqlplus -s $ORACLE_CONN @$ORACLE_ADDM_SQL >>sqlplus_${sid}_output.log
###将生成的档案名提取出来- soput="`cat $ORA_AUTO_PATH/sqlplus_$sid_output.log|grep html`"
addmsoput="`cat $ORA_AUTO_PATH/sqlplus_${sid}_output.log|grep txt`"- if [ -f $soput ]; thenecho " mv $soput $ORA_AUTO_PATH/$DAY_TIME">>mail.log
- mv $soput $ORA_AUTO_PATH/$DAY_TIME
mv $addmsoput $ORA_AUTO_PATH/$DAY_TIME- fi
- else
- echo " No TNS Listener on $sid" >>mail.log
- fi
- done
- echo " zip -r $AWR_ZIP $DAY_TIME" >>mail.log
- #`/bin/tar -zcf $AWR_ZIP $DAY_TIME` 将awr报表进行压缩,减少邮件传输的流量
- `/usr/bin/zip -r $AWR_ZIP $DAY_TIME`
- echo " Thanks!">>mail.log
- mutt -s "[CQ][SFIS DATABASE][AWR]: time: `date '+%y%m%d-%H%M'`" "接受邮件地址" -a $ORA_AUTO_PATH/$AWR_ZIP < $ORA_AUTO_PATH/mail.log
- rm -rf $DAY_TIME
- 设定排程[xxx.xxx.xx.x]
- * * * /xxx/app/oracle/ora_auto/oracle_auto_awr.sh oracle01 oracle02 oracle03
(Oracle)自定义调用AWR&ADDM的更多相关文章
- (Oracle)自定义调用AWR
Oracle->自动发送AWR报告 2016年9月21日 09:31 需求描述: 每日或定期手动使用AWR报告来检查Oracle数据库状态不仅耗时也费力,需求使用脚本自动收集AWR报告. 分 ...
- Mybatis下配置调用Oracle自定义函数返回的游标结果集
在ibatis和Mybatis对存储过程和函数函数的调用的配置Xml是不一样的,以下是针对Mybatis 3.2的环境进行操作的. 第一步配置Mapper的xml内容 <mapper names ...
- Oracle中的AWR,全称为Automatic Workload Repository
Oracle中的AWR,全称为Automatic Workload Repository,自动负载信息库.它收集关于特定数据库的操作统计信息和其他统计信息,Oracle以固定的时间间隔(默认为1个小时 ...
- Oracle快速收集AWR的方案
记一种方便的awr收集方法,该脚本可以按小时收集目标时段的awr 素材:awr_generate.sql(具体脚本内容请见本文末尾) (1)将awr_generate.sql置于数据库服务器本地路径, ...
- Oracle自定义数据类型 1
原文 oracle 自定义类型 type / create type 一 Oracle中的类型 类型有很多种,主要可以分为以下几类: 1.字符串类型.如:char.nchar.varchar2.nva ...
- Oracle自定义函数和存储过程示例,自定义函数与存储过程区别
参考资料:http://www.newbooks.com.cn/info/60861.html oracle自定义函数学习和连接运算符(||) 贴一段中文文档示例,应该就可以开始工作了: --过程(P ...
- Oracle自定义聚集函数
今天工作中看见别人写的自定义聚集函数,所以一门心思的想搞懂,就在网上找资料了. 自定义聚集函数 自定义聚集函数接口简介 Oracle提供了很多预定义好的聚集函数,比如Max(), Sum(), AVG ...
- oracle 存储过程调用 执行
oracle 存储过程调用 博客分类: 数据库相关 oracle存储过程 2011年02月11日 星期五 14:47 SQL中调用存储过程语句: call procedure_name(); 调用 ...
- ORACLE存储过程调用Web Service
1. 概述 最近在ESB项目中,客户在各个系统之间的服务调用大多都是在oracle存储过程中进行的,本文就oracle存储过程调用web service来进行说明.其他主流数据库,比如mysql和sq ...
随机推荐
- ES6入门——函数的扩展
1.函数参数的默认值 在ES6之前,不能直接为函数的参数指定默认值,只能采用变通的方法.现在ES6可以为函数的参数添加默认值,简洁了许多. ES5 function show(a,b){ b = b ...
- Python学习系列-----第二章 操作符与表达式
2.1 数学运算和赋值的简便方法 例如: 2.2 优先级 在python中运算符有优先级之分,高优先级的运算符先执行,低优先级的运算符后执行.下面是运算符优先级:(同一行的运算符具有相同的优先级) 2 ...
- QT5.3.1 Quick 开发(二) 项目类型的选择
作为一个转行QT开发的新手,面对基于QML的开发时候 看到很多的项目类型感到很困惑,不知道应该怎么选择.如图: 经过研究发现QT widgets Application.QtQuick Applica ...
- Springmvc ajax跨域请求处理
上次给一个网站写网站 前后端分离 最后跪在ajax跨域上面了 自己在网上找了个方法 亲试可用 记录一下 写一个类 继承HandlerInterceptorAdapter package co ...
- maven学习(七)后续扩展、资料
写这几篇博客的来源是 "maven实战 + 网上的博客 + 平时使用的心得 ".记录的都是比较常用的东西,也有一些只做了大概了解.或者干脆直接略过,在这里做一下总结,如果有需要在进 ...
- 关于实现XX系统设计时所实现的质量属性战术
可用性: 1)使用Try-catch对抛出的异常进行处理 2)使用Spring事务管理 易用性: 1)在类似删除相关选项时,弹出提示框,防止误操作 2)在不编辑基本信息时,对其进行折叠或者隐藏 3)提 ...
- 关于map容器的元素被无参初始化
使用C++中的map容器定义一个mp,当你执行if语句判断mp[3]是否为1时,那么如果mp[3]以前不存在,此时mp[3]就会被无参初始化,second赋值为0. 以下的程序可以证明这一点.执行了第 ...
- Python初学者第六天 列表操作练习
6day 列表练习: 1.创建一个空列表,命名为names,往里面添加old_drilver,rain,jack,shanshan,peiqi,black_girl: names = [] names ...
- v1.0.2-2017.04.26
v1.0.2-2017.04.26 增加支付宝.微信查询接口 增加订单轮询工程 增加网关下单后发起订单轮询业务流程 v1.0.1-2017.04.05 修复分页乱码bug 增加支付密码字段.商户服务器 ...
- Python学习---线程基础学习
线程基础 什么是线程(thread) 线程是CPU调度能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流[换言之,线程就是一堆指令集合], ...