如何生成Oracle AWR报告

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何生成Oracle AWR报告相关的知识,希望对你有一定的参考价值。

oracle手工生成AWR报告方法记录
AWR(Automatic Workload Repository)报告是DBA进行日常数据库性能评定、问题SQL发现的重要手段。熟练掌握AWR报告,是做好开发、运维DBA工作的重要基本功。
1、 运行脚本

首先,准备一个目录作为AWR生成报告的路径。

[oracle@bspdev /]$ ls -l | grep test
drwxr-xr-x. 2 oracle oinstall 4096 Jun 21 13:01 test

[oracle@bspdev /]$ cd test

启动sqlplus等开发工具,调用生成脚本。程序脚本一般保存在$ORACLE_HOME下的rdbms/admin中,名称为awrrpt.sql。

[oracle@bspdev test]$ sqlplus /nolog

SQL*Plus: Release11.2.0.1.0 Production on Tue Jun 21 13:04:44 2011

Copyright (c) 1982, 2009, Oracle. All rights reserved.

SQL> conn / as sysdba
Connected.

--调用脚本,生成文件
SQL> @?/rdbms/admin/awrrpt.sql

之后进入报告参数输入模块。

2、输入报告参数

之后,要持续输入一系列的报告参数。

ü 输入生成报告类型,目前AWR提供txt和html两种格式。需要确认生成格式,默认是html格式。

Current Instance
~~~~~~~~~~~~~~~~

DB Id DB Name Inst Num Instance
----------- ------------ -------- ------------
4143510747 ORA11G 1 ora11g

Specify the Report Type
~~~~~~~~~~~~~~~~~~~~~~~
Would you like an HTML report, or a plain text report?
Enter 'html' for an HTML report, or 'text' for plain text
Defaults to 'html'

ü 报告涉及天数范围

启动报告后,会显示生成实例的名称等基本信息。

默认情况下,AWR会将镜像信息保留一个月。手工生成的时候,需要确认生成AWR报告的时间范围。一般情况下,特别是生产环境下,我们通常设置1-7天也就够用了。

Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

DB Id Inst Num DB Name Instance Host
------------ -------- ------------ ------------ ------------
* 4143510747 1 ORA11G ora11g bspdev.local
domain

Using 4143510747 for database Id
Using 1 for instance number

Specify the number of days of snapshots to choose from
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Entering the number of days (n) will result in the most recent
(n) days of snapshots being listed. Pressing without
specifying a number lists all completed snapshots.

Enter value for num_days:3

ü 输入开始和结束的snapshot编号

输入天数信息后,AWR生成代码会将天数范围内的snapshot镜像点列出,供输入选择。

Listing the last 3 days of Completed Snapshots

Snap
Instance DB Name Snap Id Snap Started Level
------------ ------------ --------- ------------------ -----
ora11g ORA11G 1789 20 Jun 2011 13:01 1
1790 20 Jun 2011 14:00 1
1791 20 Jun 2011 15:00 1
1792 20 Jun 2011 16:00 1
(篇幅原因,有省略……)
1811 21 Jun 2011 11:00 1
1812 21 Jun 2011 12:00 1
1813 21 Jun 2011 13:00 1

Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

之后,我们需要根据列出的时间范围,输入开始和结束的snap编号。

Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter value for begin_snap:1796
Begin Snapshot Id specified: 1796

Enter value for end_snap:1813

ü 确定报告名称

最后就是确定生成报告的名称。一般采用默认的名称就可以了。

Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is awrrpt_1_1796_1813.html. To use this name,
press to continue, otherwise enter an alternative.

Enter value for report_name:

之后输出内容很多,此处不加以累述。最后提示报告生成成功。

Report written to awrrpt_1_1796_1813.html

于是,指定目录上可以看到相应的报告文件。

[oracle@bspdev test]$ ls -l
total 508
-rw-r--r--. 1 oracle oinstall 515262 Jun 21 13:10 awrrpt_1_1796_1813.html
参考技术A oracle9i以后才可以使用AWR手动产生快照SQL>executedbms_workload_repository.create_snapshot;通过脚本生成AWR报告SQL>@$ORACLE_HOME/rdbms/admin/awrrpt.sql

python实现自动生成oracle awr报告

目前在规划、开发性能自动化执行框架,其中有个环节很有意思,就是如何通过框架自动获得场景执行期间的oracle awr报告。虽然Oracle客户端提供的awrrpt.sql脚本可以提供交互方式生成awr报告,但并不能直接使用在自动化框架中,至少需要做一些改造,将交互的模式变成可以静默执行。

一 问题分析

经过对问题的分析,有两种基本的解决思路:

A.  在oracle服务器上部署shell脚本,使用shell命令启动oracle的sqlplus执行autoawr.sql,其中autoawr.sql主要用于获取必须入参值,然后调用oracle包的DBMS_WORKLOAD_REPOSITORY.awr_report_html实现awr报告的自动生成;

B.  直接在性能框架里通过本地的sqlplus调用oracle包的DBMS_WORKLOAD_REPOSITORY.awr_report_html实现awr报告的生成;

二 方案比较

两种思路的比较:

对于A,需要提前将改造的shell脚本和sql脚本部署到oracle服务器,该步骤是脱离框架的,且生成的报告是在oracle服务器上,需要框架提供方法将远程oracle上的awr获取到本地,用于后续分析和报告输出;

对于B,在框架实现了该功能,使用框架前无需额外部署,使框架更独立,使用更方便,且可以直接将报告生成在本地指定的位置;

本质上,两种思路是相同的,只是对于性能框架而言,该功能应该在哪端实现,是性能框架还是oracle服务器。

三 实现思路

通过对实现端的比较,决定将该功能在性能框架实现,简要描述一下实现思路。

实现分为三步:

第一:获取awr_report_html函数的4参数,即dbid,inst_num,l_bid,l_eid;

第二:拼接调用awr_report_html且使用spool将结果写入html的sql语句;

第三:调用sqlplus执行sql文件,生成awr;

四  awr_report_html函数

Awr_report_html函数如下:

技术分享图片

函数使用方法一般为:

SELECT output FROM TABLE(DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML(dbid, inst_num,l_bid,l_eid,0));

需要注意的是:

1.  虽然通过调用AWR_REPORT_HTML可以select到html格式的text,在python实现时我并没有将返回结果放到迭代器里,通过readlines的方法写入html文件,因output里包含了一些额外信息,生成的html并不能顺利打开,原因与sqlplus的参数配置有关,因为采用spool直接写入文件的方法;

2.  使用spool时,在sql脚本里设置以下sqlplus配置,避免输出中包含无关信息或格式问题,设置如下:

set heading off

set trimout on

set trimspool on

set linesize 2500

python 源码

根据上述思路,实现源码如下:

技术分享图片

其他资源:

python入门课程:http://i.youku.com/weiworld521


以上是关于如何生成Oracle AWR报告的主要内容,如果未能解决你的问题,请参考以下文章

Oracle-AWR报告简介及如何生成

oracle AWR性能监控报告生成方法

如何生成Oracle AWR报告

linux生成awr报告放啥地方

oracle中如何生成awr报告

oracle中如何生成awr报告