Oracle AWR报告每天自动生成并发送邮箱

时间:2024.5.13

Oracle AWR 报告 每天自动生成并发送邮箱

一. 准备工作

一般我们都是条用awrrpt.sql 来创建我们的AWR报告。 我们先看下这个脚本的具体内容:

[oracle@rac1 admin]$ cat awrrpt.sql | grep -v 'Rem'|grep -v '^--'

set echo off heading on underline on;

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;

@@awrrpti

undefine num_days;

undefine report_type;

undefine report_name;

undefine begin_snap;

undefine end_snap;

在以上的脚本里,我们发现它只是生成了一些变量,然后把这些变量传给了另一个脚本:awrrpti.sql。 我们看下awrrpti.sql 脚本的具体内容:

[oracle@rac1 admin]$ cat awrrpti.sql | grep -v 'Rem'|grep -v '^--'

set echo off;

set veri off;

set feedback off;

variable rpt_options number;

define NO_OPTIONS = 0;

define ENABLE_ADDM = 8;

begin

:rpt_options := &NO_OPTIONS;

end;

/

prompt

prompt Specify the Report Type

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

prompt Would you like an HTML report, or a plain text report?

prompt Enter 'html' for an HTML report, or 'text' for plain text

prompt Defaults to 'html'

column report_type new_value report_type;

set heading off;

select 'Type Specified: ',lower(nvl('&&report_type','html')) report_type from dual;

set heading on;

set termout off;

column ext new_value ext;

select '.html' ext from dual where lower('&&report_type') <> 'text'; select '.txt' ext from dual where lower('&&report_type') = 'text'; set termout on;

@@awrinput.sql

-- 这个脚本主要是确定SNAP的。

@@awrinpnm.sql 'awrrpt_' &&ext

-- 这个脚本主要是确定AWR 文件名称的

set termout off;

column fn_name new_value fn_name noprint;

select 'awr_report_text' fn_name from dual where lower('&report_type') = 'text';

select 'awr_report_html' fn_name from dual where lower('&report_type') <> 'text';

column lnsz new_value lnsz noprint;

select '80' lnsz from dual where lower('&report_type') = 'text';

select '1500' lnsz from dual where lower('&report_type') <> 'text'; set linesize &lnsz;

set termout on;

spool &report_name;

select output from table(dbms_workload_repository.&fn_name( :dbid, :inst_num,

:bid, :eid,

:rpt_options ));

spool off;

prompt Report written to &report_name.

set termout off;

clear columns sql;

ttitle off;

btitle off;

repfooter off;

set linesize 78 termout on feedback 6 heading on;

undefine report_name

undefine report_type

undefine ext

undefine fn_name

undefine lnsz

undefine NO_OPTIONS

undefine ENABLE_ADDM

undefine top_n_events

undefine num_days

undefine top_n_sql

undefine top_pct_sql

undefine sh_mem_threshold

undefine top_n_segstat

whenever sqlerror continue;

[oracle@rac1 admin]$

这个脚本才是我们真正生成AWR的脚本。 在这个脚本里面,提示我们选择AWR报告的类型。

通过上面的2个脚本,我们将AWR报告简化一下:

select output from

table(dbms_workload_repository.&fn_name(:dbid, :inst_num,:bid, :eid,:rpt_options ));

这条语句就是整个AWR报告的核心:

(1)&fn_name :决定AWR报告的类型,有2个值:awr_report_html和awr_report_text。

(2)dbid,inst_num,bid,eid 可以通过dba_hist_snapshot查询. bid 指的是begin snap_id, eid 指的是end snap_id.

SQL> select * from (select snap_id,dbid,instance_number from

dba_hist_snapshot order by snap_id) where rownum<10;

SNAP_ID DBID INSTANCE_NUMBER

---------- ---------- ---------------

184 809910293 2

184 809910293 1

185 809910293 2

185 809910293 1

186 809910293 2

186 809910293 1

187 809910293 2

187 809910293 1

188 809910293 2

9 rows selected.

我这里是个RAC 环境, 通过这个可以看出在每个节点上都保存着AWR的信息。

(3)rpt_options:该参数控制是否显示ADDM的。

-- NO_OPTIONS -

-- No options. Setting this will not show the ADDM

-- specific portions of the report.

-- This is the default setting.

--

-- ENABLE_ADDM -

-- Show the ADDM specific portions of the report.

-- These sections include the Buffer Pool Advice,

-- Shared Pool Advice, PGA Target Advice, and

-- Wait Class sections.

define NO_OPTIONS = 0;

define ENABLE_ADDM = 8;

有了上面的数据之后,我们就可以使用如下SQL直接生成AWR报告了。

select output from table(dbms_workload_repository.awr_report_html(809910293, 2,220,230,0));

select output from table(dbms_workload_repository.awr_report_text(809910293, 2,220,230,0));

二. 生成AWR报告 SQL脚本

以上写了这么多,就是为了一个脚本:myawrrpt.sql. 这个脚本就是自动的去收集信息。 因为如果我们是调用awrrpt.sql的话,需要输入一些参数。 我们修改一下脚本,让它根据我们的需求来收集信息,这样就不用输入参数了。

[oracle@rac1 admin]$ cat myawrrpt.sql

conn / as sysdba;

set echo off;

set veri off;

set feedback off;

set termout on;

set heading off;

variable rpt_options number;

define NO_OPTIONS = 0;

define ENABLE_ADDM = 8;

-- according to your needs, the value can be 'text' or 'html'

define report_type='html';

begin

:rpt_options := &NO_OPTIONS;

end;

/

variable dbid number;

variable inst_num number;

variable bid number;

variable eid number;

begin

select max(snap_id)-48 into :bid from dba_hist_snapshot;

select max(snap_id) into :eid from dba_hist_snapshot;

select dbid into :dbid from v$database;

select instance_number into :inst_num from v$instance;

end;

/

column ext new_value ext noprint

column fn_name new_value fn_name noprint;

column lnsz new_value lnsz noprint;

--select 'txt' ext from dual where lower('&report_type') = 'text';

select 'html' ext from dual where lower('&report_type') = 'html';

--select 'awr_report_text' fn_name from dual where lower('&report_type') = 'text';

select 'awr_report_html' fn_name from dual where lower('&report_type') = 'html';

--select '80' lnsz from dual where lower('&report_type') = 'text';

select '1500' lnsz from dual where lower('&report_type') = 'html';

set linesize &lnsz;

-- print the AWR results into the report_name file using the spool command: column report_name new_value report_name noprint;

select 'awr'||'.'||'&ext' report_name from dual;

set termout off;

spool &report_name;

select output from

table(dbms_workload_repository.&fn_name(:dbid, :inst_num,:bid, :eid,:rpt_options ));

spool off;

set termout on;

clear columns sql;

ttitle off;

btitle off;

repfooter off;

undefine report_name

undefine report_type

undefine fn_name

undefine lnsz

undefine NO_OPTIONS

exit

[oracle@rac1 admin]$

这个脚本是收集过去48个小时的snap 来生成AWR。 生成的文件名称是awr .html,这个也是spool 指定的,可以生成其他名称。

三. 自动上传AWR的Python脚本

在这个脚本里做2件事,第一是调用第二步里的SQL脚本,生成awr报告,然后将AWR 发送到指定邮箱。

createSendAWR.py

#!/usr/bin/python

#coding=gbk

#created by tianlesoftware

#2011-4-12

import os

import sys

import smtplib

import pickle

import mimetypes

from email.MIMEText import MIMEText

from email.MIMEImage import MIMEImage

from email.MIMEMultipart import MIMEMultipart

SMTP_SERVER='192.168.1.120'

EMAIL_USER='user'

EMAIL_PASSWD='pwd'

EMAIL_SUBJECT='192.168.88.209 AWR Report'

FROM_USER='daimingming@1876.cn'

TO_USERS=['daimingming@1876.cn','dvd.dba@gmail.com']

def createawr():

pipe = os.popen(' /u01/app/oracle/product/10.2.0/db_1/bin/sqlplus /nolog @awrrpt.sql')

def mysendmail(fromaddr,toaddrs,subject):

COMMASPACE=','

msg = MIMEMultipart()

msg['From'] = fromaddr

msg['To'] = COMMASPACE.join(toaddrs)

msg['Subject'] = subject

txt = MIMEText("192.168.88.209 AWR Report, The report be send at 9 AM every day ")

msg.attach(txt)

fileName = r'/home/oracle/awr.html'

ctype, encoding = mimetypes.guess_type(fileName)

if ctype is None or encoding is not None:

ctype = 'application/octet-stream'

maintype, subtype = ctype.split('/', 1)

att = MIMEImage((lambda f: (f.read(), f.close()))(open(fileName, 'rb'))[0], _subtype = subtype)

att.add_header('Content-Disposition', 'attachment', filename = fileName) msg.attach(att)

server=smtplib.SMTP(SMTP_SERVER)

server.login(EMAIL_USER,EMAIL_PASSWD)

server.sendmail(fromaddr,toaddrs,msg.as_string())

server.quit()

if __name__=='__main__':

createawr()

mysendmail(FROM_USER, TO_USERS, EMAIL_SUBJECT)

#print 'send successful'

四. 将Python 添加到crontab

[oracle@qs-wg-db1 scripts]$ crontab -l

40 17 * * * export ORACLE_HOME='/home/oracle_app' &&

ORACLE_SID=XX && cd /u01/backup/scripts &&

/u01/backup/scripts/createSendAWR.py

>/u01/backup/scripts/createSendAWR.log 2>&1

我这里因为报了

SP2-0750: You may need to set ORACLE_HOME to your Oracle software directory 的错误,所以把变量加了上去。

更多相关推荐:
可研报告如何用WORD自动生成目录

宜昌九章文书公司专业编制可研报告项目建议书机构网址QQ8000861809418368可研报告如何用WORD自动生成目录用WORD编写可行性研究报告时目录及页码部分可由正文标题内容自动生成在完成文章的文字录入后...

问卷调查自动生成系统开题报告

毕业设计开题报告范例课题来源学生姓名学号专业设计题目指导教师年月日毕业论文开题报告毕业论文开题报告

生涯计划书自动生成报告

o一旦全身心地投入一项工作时你往往发挥出冲刺式的干劲全神贯注全力以赴你仰赖人事和思想信仰一般能够忠实履行自己的义务但是对意义不大的日常事务你做起来可能有些困难生活中的你o信奉理想至上o穿衣风格你喜欢塑造个性的形...

中科院分词系统古诗自动生成程序报告

1先利用中科院计算所的ICTCLAS汉语词法分析系统对给定的诗句进行分词对铜雀春深锁二乔分词为铜雀春深锁二乔2用全唐诗作为语料语料库3对步骤1分好的词进行训练在全唐诗语料库中找出出现词如寒水的对句然后再对句中找...

软件自动化报告

软件自动化报告地址1921681162httplocalhost8081hudson软件的自动化是一个持续改进的过程体现着公司的能力成熟度CMM等级附11目前免费成熟的自动化工具11应用在java项目的自动化工...

如何生成生成课题引文报告

无论是进行科研立项还是开题报告您常常需要从宏观上把握国内外某一研究领域或专题的总体研究趋势如何快速获取这些信息呢您可以通过生成课题引文报告或分析论文出版年的方式有效获得1访问WebofScience数据库检索论...

试卷自动生成系统--毕业论文(设计)开题报告

毕业论文设计开题报告基于Web的试卷自动生成系统的设计与开发姓名院系专业年级学号指导教师职称起止时间20xx0920xx05

自动化生产线的安装调试结业报告运输站部分

自动化生产线安装与调试报告课程名称实训班级小组成员指导教师完成日期目录一绪论1二亚龙YL335B试验台的基本组成和工作原理2三相应站的整体介绍631主站的动作顺序和作用632供料站的动作顺序和作用733加工站的...

自动化生产线的安装调试结业报告

自动化生产线安装与调试报告课程名称实训班级小组成员指导教师完成日期目录一绪论1二亚龙YL335B试验台的基本组成和工作原理3三相应站的整体介绍731主站的动作顺序和作用732供料站的动作顺序和作用833加工站的...

自动生产线安装与调试实习报告

广东机电职业技术学院自动生产线安装与调试实习报告专业:电气自动化班级:电气1208学生姓名:**学号:**指导教师:**实习学期:20**-20**学年第一学期上交时间:20**年12月实习过程及总结3.1实习…

参考文献自动生成技巧

参考文献自动生成技巧毕业论文不同于一般的小论文特别是硕士毕业论文或者博士毕业论文一般的小论文就四五页而硕士论文动辄五六十页有的甚至七八十页所以有些东西如果要人工的去修改将是一件非常痛苦的事情痛苦的事情至少有两个...

推荐软件总成项目可行性研究报告(技术工艺+设备选型+财务概算+厂区规划)标准方案设计

推荐软件总成项目可行性研究报告技术工艺设备选型财务概算厂区规划标准方案设计编制机构博思远略咨询公司360投资情报研究中心研究思路关键词识别1软件总成项目可研2软件总成市场前景分析预测3软件总成项目技术方案设计4...

自动生成报告(34篇)