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;columninst_name heading "Instance" new_value inst_name format a12;column db_name heading "DB Name" new_value db_nameformat a12;column dbid heading "DB Id" new_value dbid format 9999999999just c;

prompt

promptCurrentInstance

prompt~~~~~~~~~~~~~~~~

selectd.dbid dbid

, d.namedb_name, i.instance_number inst_num

, i.instance_name inst_namefrom v$databased,

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

undefinedb_nameundefine 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_extensionset pagesize 0;set heading off echo off feedback off verify off;

variable task_namevarchar2(40);

prompt

prompt

prompt Running the ADDM analysison the specified pair ofsnapshots ...

promptbegin

declareidnumber;

namevarchar2(100);

descrvarchar2(500);BEGINname := '';

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 reportforthis analysis ...

prompt

prompt

spool&report_name;set long 1000000 pagesize 0 longchunksize 1000

columnget_clob format a80select dbms_advisor.get_task_report(:task_name, 'TEXT', 'TYPICAL')fromsys.dual;

spooloff;

prompt

promptEnd ofReport

prompt Report writtento &report_name.set termout off;

clear columns sql;

ttitleoff;

btitleoff;

repfooteroff;set pagesize 14;set heading on echo off feedback 6 verify on underline on timing off;set long 80 longchunksize 80

set termout onundefine 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 sqlerrorcontinue;

开始构造自定义SQL脚本

[oracle@xxxxxx~]$ cat /opt/app/oracle/ora_auto/ora_auto_addmrpt.sqlset 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_namevarchar2(40);

variable dbidnumber;

variable inst_numnumber;

variable bidnumber;

variable eidnumber;

variable dbnamevarchar2(9);

variable btimenumber;

variable etimenumber;begin

select dbid into :dbid from v$database;select instance_number into :inst_num fromv$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

declareidnumber;

namevarchar2(100);

descrvarchar2(500);BEGINname := '';

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

columnreport_name new_value report_name noprint;select :dbname||'_'||:btime||'to'||:etime||'.'||'txt' report_name fromdual;set termout off;

spool&report_name;set long 1000000 pagesize 0 longchunksize 1000

columnget_clob format a80select dbms_advisor.get_task_report(:task_name, 'TEXT', 'TYPICAL')fromsys.dual;

spooloff;set termout on;

prompt&report_name

undefine dbid

undefine inst_num

undefine report_nameexit

将ADDM sql脚本整合到自定义调用AWR shell脚本中

Script:

[oracle@01 ~]$ cat /opt/app/oracle/ora_auto/oracle_auto_awr.sh#!/bin/bash

# auto gather awrrpt.sql

#

# parameters:

# $1 ->SID

#

# The whole package includes2files;

# 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.0/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.zipcd $ORA_AUTO_PATHecho "Dear Sir:">mail.logecho "This is oracle database Awr.">>mail.logmkdir -p $ORA_AUTO_PATH/$DAY_TIME

#脚本后跟上多个数据库名,用于集合

array_1=$@for sid in${array_1[@]}do

sleep 30tnschk=`tnsping $sid`

tnschk2=` echo $tnschk | grep -c OK`if [ ${tnschk2} -eq 1 ] ; 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.logmv $soput $ORA_AUTO_PATH/$DAY_TIME

mv $addmsoput $ORA_AUTO_PATH/$DAY_TIMEfi

else

echo "No TNS Listener on $sid" >>mail.logfi

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.logrm -rf $DAY_TIME

设定排程[xxx.xxx.xx.x]15 07 * * * /xxx/app/oracle/ora_auto/oracle_auto_awr.sh oracle01 oracle02 oracle03

内容来源于网络如有侵权请私信删除

oracle11如何生成aw r,(Oracle)自定义调用AWRamp;ADDM相关推荐

  1. U811.1接口EAI系列之二--生成销售出库单调用U8的EAI通用处理方法--PowerBuilder语言...

    1.销售系统销售出库,更新U811.1材料库存的EAI的XML生成. 2.主要根据U8配置会生成出库单和同时是否更新库存量,还是更新现存量等等. 3.具体参考代码如下: 作者:王春天 2013-11- ...

  2. oracle更改编码规则,Oracle自定义编码规则

    Oracle自定义编码规则的实现 在编写程序的过程中,我们经常会用到对一些记录进行编码的实现,有时候定义的编码规则并不能很好的实现需求,比如使用lpad(rpad)函数进行补充的时候,有个长度的限制, ...

  3. Oracle自定义数据类型 1

    原文 oracle 自定义类型 type / create type 一 Oracle中的类型 类型有很多种,主要可以分为以下几类: 1.字符串类型.如:char.nchar.varchar2.nva ...

  4. Oracle自定义函数

    2019独角兽企业重金招聘Python工程师标准>>> Oracle自定义函数 用户定义函数是存储在数据库中的代码块,可以把值返回到调用程序.调用时如同系统函数一样,如max(val ...

  5. Oracle自定义聚集函数

    节选自<剑破冰山--oracle开发艺术>一书,书籍销售地址: http://product.china-pub.com/197199 http://product.dangdang.co ...

  6. 基于wiki中文语料库的gensim模型使用方法以及R语言的调用方式

    基于wiki中文语料库的gensim模型使用方法以及R语言的调用方式 近期想要整理下硬盘里的东西,看到本科毕设做情感倾向分析相关的数据,想起当时使用gensim训练词向量模型训练了超级久,决定将训练好 ...

  7. R语言 自定义函数之趣味程序--老虎机

    ****R语言 自定义函数之趣味程序--老虎机**** 自定义函数 自定义规则 自定义格式 案例:老虎机 老虎机符号准备 老虎机结果分类 老虎机得分计算 开始老虎机试玩 获奖感言 自定义函数 R语言作 ...

  8. Oracle 自定义类型TYPE(subtype, type object, type body, type table) 用法

    原 ORACLE 自定义类型 type/ object 2017年03月28日 13:58:23 tan1012194073 阅读数:5999 版权声明:本文为博主原创文章,未经博主允许不得转载. h ...

  9. Python: Git Log自动生成Release Notes,并调用Outlook发送至邮件

    Python: Git Log自动生成Release Notes,并调用Outlook发送至邮件 主要功能 先上图 生成ReleaseNotes 邮件: 生成ReleaseNotes Text: 关键 ...

最新文章

  1. [webapi] 如何在查看api时 显示api的说明
  2. win7下安装配置tomcat,java运行环境
  3. c语言if语句条件是字母,C语言的if语句中,用作判断的条件表达式为()
  4. uploadify在火狐下上传不了的解决方案,java版(Spring+SpringMVC+MyBatis)详细解决方案
  5. 当 TiDB 与 Flink 相结合:高效、易用的实时数仓
  6. jquery 入门与知识
  7. 计算机桌面图标有箭头,电脑桌面图标为什么会有一个小箭头,原来没的呀,
  8. assertion: 18 { code: 18, ok: 0.0, errmsg: auth fails }
  9. Qt Quick编程(1)——QML的核心部分ECMAScript
  10. 【长文】在《 Ray Tracing from the Ground Up》的基础上实现BART的动画
  11. usb声卡驱动_艾肯iCON ProDrive第三代USB声卡驱动全新发布!
  12. ubuntu opencv 安装
  13. Git ssh fingerprint不一致
  14. linux cups网络打印机,基于CUPS的网络打印服务器
  15. android代码 发警报音,Android 8中的警报重复
  16. Activity高级学习
  17. 读博,每天要不要工作十二小时
  18. 腾讯移动版图,社交之外还有什么?
  19. window docker 找不到原先所有镜像和容器
  20. KNN分类——matlab(转载)

热门文章

  1. [词性] 十七、介词 7 [ to ] [ since ] [ through ] [ under ] [ up ] [ with ]
  2. ①、学习spring cloud之HTML 简介
  3. phpstorm集成phpunit
  4. 【名片制作】深灰色背景·简单名片设计
  5. 上汽集团、张江高科和阿里巴巴集团联合打造智己汽车
  6. 我画你猜(微信版--游戏说明)
  7. 四十三、迎接挑战,苦练内功,迎接春天的到来
  8. Access denied for user ‘test‘@‘%‘ to database ‘mysql‘
  9. 工程师如何在面试中脱颖而出
  10. 蒙特梭利素材 幼儿识字 补笔画 闪卡 三段卡