(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 ...
随机推荐
- SpringBoot中Mybaties PageHelper插件使用
首先引入pom.xml文件配置 <!-- mybatis --> <dependency> <groupId>org.mybatis.spring.boot&l ...
- HTML头部声明文件类型
在你每一个页面的顶端,你需要文件声明.是的,必须. 如果不指定文件类型,你的HTML不是合法的HTML,并且大部分浏览器会用“怪癖模式(quirks mode)”来处理页面,这意味着浏览器认为你自己也 ...
- 数据库建模工具 PD的使用
1.1. 数据库建模工具 PD的使用 安装12.5版本,进行破解 PD 是最专业数据建模工具, 是 Sybase 公司一个 产品 PD 提供四种模型文件 PDM 物理数据模型,面向数据库表结构设计,直 ...
- 一个较复杂的执行redis的lue脚本
- SAP C/4HANA与人工智能和增强现实(AR)技术结合的又一个创新案例
今天这篇迟到的文章,来自我的同事Aviva. 去年SAP C/4HANA发布之后,SAP的从业者们可能或多或少都读过一些来自SAP官方渠道,比如微信公众号"SAP天天事"发布的一些 ...
- 百度地图label样式修正
现象:百度地图 label 宽度为0,文字在标签边框外. 原因:样式冲突,在css中添加下列代码即可: .BMapLabel{ max-width:none; }
- 蓝牙BLE4.0的LL层数据和L2CAP层数据的区分与理解
一直搞不太清楚蓝牙BLE协议,不知道LL层和L2CAP层是如何划分的,后来博士给我讲了讲就理解了,写下来,做个记录: 1. 我们知道,除了蓝牙5.1新出的CTE,所有的BLE都是如下类型的包: 对于连 ...
- vector size函数使用注意事项
vector 的size函数返回vector大小,返回值类型为size_type,Member type size_type is an unsigned integral type,即无符号整数: ...
- PHP Socket 简单使用
<?php /*socket收发数据 @host(string) socket服务器IP @post(int) 端口 @str(string) 要发送的数据 @back 1|0 socket端是 ...
- 全局ajax的使用
一.ajax介绍 详细介绍请看:http://www.runoob.com/ajax/ajax-tutorial.html AJAX = Asynchronous JavaScript and XML ...