ORACLE AWR 自动发邮件

10G之前的一些情况:用户的连接将产生会话,当前会话记录保存在V$SESSION中;处于等待状态的会话会被复制一份放在v$session_wait中。当该连接断开后,其原来的连接信息在V$SESSION和V$SESSION_WAIT中就会被删除。

10G或以后:出现一个新的视图,v$session_wait_history 这个视图保存了每个活动SESSION在V$SESSION_WAIT中最近10次的等待事件,但这对于一段时期内的数据库性能状况的监测是远远不够的,为了解决这个问题,在10G中还新添加了一个视图:v$active_session_history。这就是ASH(active session history)。ASH的策略是每秒从v$session中每秒进行采样一次,并将采样信息保存在内存中,采样只针对active的session和等待非空闲的SESSION。

AWR
ASH的采样数据是保存在内存中的,而分配给ASH的内存空间是有限的,当所分配空间占满后,旧的记录就会被覆盖掉;而且数据库重启后,所有的这些ASM信息都会消息。这样,对于长期检测ORACLE 的性能是不可能的。在ORACLE 10G 中,提供了永久保留ASH信息的方法,这就是AWR。
由于全部保存ASH中的信息是非常耗费时间和空间的,AWR 用的策略是:每小时对v$active_session_history进行采样一次,并将信息保存到磁盘中,并且保留七天,七天后旧的记录才会被覆盖。这些采样信息被保存在视图wrh$_active_session_history中。策略:每一个小时一次,保留七天时间。这个是可以调整的。
管理包:dbms_workload_repository

小结: ASH 保存了系统最新的处于等待的会话记录,可以用来诊断数据库的当前状态;而AWR中的信息最长可能有1个小时的延迟,所以其采样信息并不能用于诊断数据库的当前状态,但可以用来作为一段时期内数据库性能调整的参考。

视图间的继承关系:
 
v$session

v$session_wait                          v$active_session_history
 
v$session_wait_history                               wrh$_active_session_history

                                                                       dba_hist_active_sess_history
其中视图dba_hist_active_sess_history 是wrh$_active_session_history和其他几个视图的联合展现,通常通过这个视图进行历史数据的访问。

AWR:
1. ASH 占用的内存大小
select pool, name, bytes/1024/1024 from v$sgastat where name like'%ASH%';

POOL         NAME                       BYTES/1024/1024
------------ -------------------------- ---------------
shared pool  ASH buffers                              4

2.ASH 中的信息被保存到了AWR 的视图wrh$_active_session_history中。ASH是AWR 的真子集。

3.mmon进程与 mmnl进程。
快照由一个称为MMON 的新的后台进程(及其从进程)以及MMNL 后台进程自动地每隔固定时间采样一次。
MMON进程负载执行多种和管理相关的后台任务:
当某个测量值超过了预设的限定值后提交警告。
创建新的MMON 隶属进程(MMON) 来进行快照。
捕获最近修改的SQL 对象的统计信息
MMNL 进程负责执行轻量级的且频率较高的和可管理性相关的后台任务,例如捕获会话历史信息,测量值计算等。
AWR 的采样工作由MMON进程每个小时执行一次,ASH信息同样会被采样写出到AWR负载库中。虽然ASH BUFFER被设计为保留1小时的信息,但很多时候这个内存是不够的,当ASH BUFFER 写满后,另外一个后台进程MMNL将会主动将ASH信息写出。

4.SYSAUX表空间。
      这些采样数据都存储在SYSAUX表空间中,并且以WRM$_* 和 WRH$_* 的格式命名。前一种类型存储元数据信息(如检查的数据库和采集的快照),后一种类型保存实际采集的统计数据。

手动生成SNAP_ID
exec dbms_workload_repository.create_snapshot();

注意: AWR的一次报告中的SNAP_ID是不能够跨重启数据库的。
2.脚本准备:
2.1 sql 脚本准备:
conn xbrlsystem/xbrlsystem@67;

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

2.2 PYTHON 脚本准备:
#!/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='smtp.mail.yahoo.com.cn'

EMAIL_USER='wshxgdan@yahoo.cn'

EMAIL_PASSWD='wshxgxiaoli32105'

EMAIL_SUBJECT='performance report for dg'

FROM_USER='wshxgdan@yahoo.cn'

TO_USERS=['408673035@qq.com','zhangys@gtadata.com']

def createawr():

pipe = os.popen(' C:\Ora10InstantClient\sqlplus /nolog @myawrrpt.sql')

def mysendmail(fromaddr,toaddrs,subject):

COMMASPACE=','

msg = MIMEMultipart()

msg['From'] = fromaddr

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

msg['Subject'] = subject

txt = MIMEText("performance report for dg ")

msg.attach(txt)

fileName = r'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移植性不是很好, 在WINDOWS转到LINUX下要注意空格及空行还有制表符。而且要同版本PYTHON,要不然你将会面临跟我一样的过失, 一个空格整了一个上午。这就是很悲剧的事了。
执行:createSendAWR.py > createSendAWR.log 2>&1
就会生成报告了。
另注: 本文整理来源:http://blog.csdn.net/tianlesoftware/article/details/6319198











 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22740983/viewspace-734630/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/22740983/viewspace-734630/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值