如何生成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报告的主要内容,如果未能解决你的问题,请参考以下文章