(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 ...
随机推荐
- php基础部分(1)
PHP 输出文本的基础指令:echo 和 print.echo和print的区别echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用)echo 输出一 ...
- apk下载安装,存储的位置,路径
PackageInstaller 原理简述 应用安装是智能机的主要特点,即用户可以把各种应用(如游戏等)安装到手机上,并可以对其进行卸载等管理操作.APK是Android Package的缩写,即An ...
- C# 修改GroupBox的边框颜色和字体颜色
改变GroupBox边框和的颜色 private void groupBox_BasicInformation_Paint(object sender, PaintEventArgs e) { e.G ...
- JAVA的静态方法,静态变量,静态类。
静态变量和静态方法都属于静态对象,它与非静态对象的差别需要做个说明. (1)Java静态对象和非静态对象有什么区别? 比对如下: 静态对象 ...
- 使用GDI技术创建ASP.NET验证码
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Dr ...
- IONIC调用原生的等待对话框
ngCordova提供了progressIndicator插件,用以方便的显示等待对话框,但是目前版本仅支持安卓版本.为了让苹果版本也显示,可以到以下地址下载通用的插件,JS部分的代码无需改变: ht ...
- 【Leetcode】【Medium】Reorder List
Given a singly linked list L: L0→L1→…→Ln-1→Ln,reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You must do thi ...
- 最新-Linux常用命令大全-随时更新
一.系统管理与设置 1.信息显示命令 # man & info //帮助手册 # man 命令 //显示相应命令的帮助内容 # arch //显示当前系统体系结构 # cal //显 ...
- CPP11实践
- 001 以lambda作为返回值该如何声明? 标准库提供了function模板可以直接声明,如std::function<void (int, int)>.如下函数foo返回了一个函数 ...
- (原)使用 memcache 使用过程中可能遇到的问题
在项目优化中,使用到了memcache,刚开始不能用,后来期间总会偶尔抛出异常,刚开始怀疑动态库版本问题,后来尝试了各种替换依旧误解,搞得我日思夜想的,天天惦记着他..=_= 下午拿出半天时间,进行错 ...