`

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

 
阅读更多

Oracle AWR 报告能很好的提供有关DB性能的信息。 所以DBA 需要定期的查看AWR的报告。 有关AWR报告的说明参考:

Oracle AWR 介绍

http://blog.csdn.net/tianlesoftware/archive/2009/10/17/4682300.aspx

如果说每天都去手工的出创建AWR报告,是个费时的活。 所以,最好就是弄成脚本来执行。 这篇文章就是说明这个问题的。

注意的一个问题,AWR 报告的两个snap 之间不能有重启DB的操作。

Python 执行 系统命令

http://blog.csdn.net/tianlesoftware/archive/2011/02/17/6192202.aspx

Python 发送带 附件 邮件 脚本

http://blog.csdn.net/tianlesoftware/archive/2011/04/12/6318199.aspx

. 准备工作

一般我们都是条用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_htmlawr_report_text

2dbidinst_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的信息。

3rpt_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报告了。

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

SQL>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 指定的,可以生成其他名称。

. 自动上传AWRPython脚本

在这个脚本里做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

的错误,所以把变量加了上去。

Linux Crontab 定时任务 命令详解

http://blog.csdn.net/tianlesoftware/archive/2010/02/21/5315039.aspx

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

Blog http://blog.csdn.net/tianlesoftware

Email: dvd.dba@gmail.com

DBA1 群:62697716(); DBA2 群:62697977() DBA3 群:62697850()

DBA 超级群:63306533(); DBA4 群: 83829929 DBA5群: 142216823

聊天 群:40132017 聊天2群:69087192

--加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请

分享到:
评论

相关推荐

    ORACLE AWR报告生成.docx

    Oracle AWR(Automatic Workload Repository)报告是Oracle数据库性能分析的重要工具,它收集并存储了数据库的性能数据,包括SQL语句、系统等待事件、I/O统计等,并提供了详细的性能报告,帮助DBA识别和解决性能问题...

    oracle awr报告生成

    window下直接调用生成弹出html格式的awr报告,不用去linux下了,但是妖之道数据库密码的啊,不然没法调用,修改里bat里的连接串即可 样例: sqlplus sys/oracle@zhengshiku_2 as sysdba @addmrpt.sql

    Oracle AWR报告最详细分析

    开Oracle调优鹰眼,深入理解AWR性能报告,非常好的文档,Oracle DBA必备

    oracle 生成awr 报告

    使用非常详尽的步骤,一步一步的指引我们在oracle 中如何生成一份awr报告

    OracleAWR报告详细分析.pdf

    Oracle AWR(Automatic Workload Repository)报告详细分析是Oracle 10g版本推出的新特性,全称叫Automatic Workload Repository-自动负载信息库。AWR是通过对比两次快照(snapshot)收集到的统计信息,来生成报表...

    win+Oracle 生成awr报告

    执行 AWR 报告生成脚本 输入 `@awrrpt.sql` 来调用并执行生成 AWR 报告的 SQL 脚本。此脚本会读取 AWR 存储的数据,并生成一份详细的报告。 ##### 5. 选择报告格式 系统会提示用户选择报告的格式,可以选择 `...

    ORACLE_AWR报告生成和分析.doc

    生成AWR报告通常通过执行`dbms_workload_repository.create_snapshot`存储过程,并结合Oracle提供的SQL脚本`@?/rdbms/admin/awrrpt`来完成。AWR报告中的数据主要来自于以`DBA_HIST_`开头的一系列系统表,这些表包含...

    oracle抓取指定时间段AWR报告实例说明 .docx

    这是因为只有具有足够权限的用户才能够执行相关的AWR报告生成脚本。 **第二步:进入AWR脚本所在目录** 通过命令行切换到`awrrpt.sql`脚本所在的目录。例如,如果脚本位于`/oracle/product/db10g/rdbms/admin`目录下...

    Oracle AWR报告 解读

    AWR(Automatic Workload Repository)是Oracle数据库中一个重要的性能监控组件,它能够定期自动地收集、处理和存储数据库的统计信息,并生成报告以供分析。以下是关于Oracle AWR报告的详细知识点解读。 1. DBTime...

    oracle awr报告分析

    ### Oracle AWR 报告分析 #### 一、概述 Oracle Automatic Workload Repository (AWR) 报告是一种用于诊断数据库性能问题的强大工具。通过分析这些报告中的数据,管理员能够了解数据库的工作负载特性、资源使用...

    oracle awr报告详解

    Oracle AWR(Automatic Workload Repository)报告是Oracle数据库性能监控的重要工具,自10g版本开始引入。AWR通过在两个连续快照之间收集系统和会话级别的统计信息,为DBA提供数据库性能的详细分析。它可以帮助识别...

    AWR报告生成详解

    Oracle AWR(Automatic Workload Repository)报告是Oracle数据库性能监控的重要工具,它收集数据库的统计信息,包括SQL语句执行情况、系统资源消耗、等待事件等,并生成详细报告,帮助DBA(数据库管理员)分析和...

    Oracle AWR报告深入分析

    AWR报告是一种自动收集并存储数据库性能数据的机制,它通过定期快照的方式记录数据库的运行状态,包括但不限于CPU使用率、等待事件统计等。这些数据可以帮助数据库管理员诊断性能问题并采取相应的优化措施。 ##### ...

    AWR报告生成详解.doc

    Oracle AWR(Automatic Workload Repository)报告是Oracle数据库性能监控的重要工具,它收集并存储了数据库的统计信息,包括SQL语句、等待事件、资源使用情况等,为DBA提供了全面的性能分析依据。本篇将详细介绍在...

    如何看Oracle AWR报告

    如何看Oracle AWR报告

    oracle awr分析报告详解

    Oracle AWR(Automatic Workload Repository)是Oracle 10g引入的一个重要性能分析工具,用于自动收集数据库的工作负载信息,并生成详细的性能分析报告,帮助DBA进行性能调优。AWR的设计目标是提供一个内置的、系统...

    脚本生成AWR报告步骤

    ##### 2.2 运行AWR报告生成脚本 AWR报告的生成需要运行Oracle自带的`awrrpt.sql`脚本。该脚本位于Oracle安装目录下的`$ORACLE_HOME/rdbms/admin`路径中。运行命令如下: ```sql SQL&gt; @?/rdbms/admin/awrrpt.sql ``` ...

    oracle awr报告测试步骤

    Automatic Workload Repository-自动负载信息库 AWR 是通过对比两次快照(snapshot)收集到的统计信息,来生成报表数据,生成的报表包括多个部分

    如何分析oracle awr报告

    AWR 报告是通过对AWR视图进行查询后自动生成的报告,可以帮助数据库管理员(DBA)了解数据库的活动状态、性能指标的变化趋势以及识别可能存在的性能问题。 为了获取AWR报告,可以手动执行以下命令: ```sql -- 创建...

Global site tag (gtag.js) - Google Analytics