做了一个存储过程,封装了awr的report的功能。
通过输入指定时间点和目录名称,就可以在指定的位置生成awr的html报告,对于RAC环境会同时生成所有节点的awr报告。
SQL> CREATE OR REPLACE PROCEDURE P_AWR_REPORT (P_BEGIN IN DATE, P_END IN DATE, D_DIR IN VARCHAR2) AS
2 TYPE T_VARCHAR IS TABLE OF VARCHAR2(1500 CHAR) INDEX BY BINARY_INTEGER;
3 V_REPORT T_VARCHAR;
4 V_FILE UTL_FILE.FILE_TYPE;
5 TYPE T_NUM IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
6 V_INSTANCE T_NUM;
7 V_SNAP_BEG T_NUM;
8 V_SNAP_END T_NUM;
9 V_DBID NUMBER;
10 V_DBNAME V$DATABASE.NAME%TYPE;
11 BEGIN
12 SELECT DBID, NAME
13 INTO V_DBID, V_DBNAME
14 FROM V$DATABASE;
15
16 SELECT INSTANCE_NUMBER, MAX(SNAP_ID)
17 BULK COLLECT INTO V_INSTANCE, V_SNAP_BEG
18 FROM DBA_HIST_SNAPSHOT
19 WHERE END_INTERVAL_TIME <= P_BEGIN
20 AND DBID = V_DBID
21 GROUP BY INSTANCE_NUMBER
22 ORDER BY INSTANCE_NUMBER;
23 SELECT DISTINCT INSTANCE_NUMBER,
24 FIRST_VALUE(SNAP_ID) OVER(PARTITION BY INSTANCE_NUMBER ORDER BY ABS(CAST (END_INTERVAL_TIME AS DATE) - P_BEGIN))
25 BULK COLLECT INTO V_INSTANCE, V_SNAP_BEG
26 FROM DBA_HIST_SNAPSHOT
27 WHERE DBID = V_DBID
28 ORDER BY INSTANCE_NUMBER;
29
30
31 FOR I IN V_INSTANCE.FIRST..V_INSTANCE.LAST LOOP
32 BEGIN
33 SELECT DISTINCT FIRST_VALUE(SNAP_ID) OVER(ORDER BY ABS(CAST (END_INTERVAL_TIME AS DATE) - P_END))
34 INTO V_SNAP_END(I)
35 FROM DBA_HIST_SNAPSHOT
36 WHERE SNAP_ID > V_SNAP_BEG(I)
37 AND DBID = V_DBID
38 AND INSTANCE_NUMBER = V_INSTANCE(I);
39 EXCEPTION
40 WHEN NO_DATA_FOUND THEN
41 V_INSTANCE.DELETE(I);
42 END;
43 END LOOP;
44
45 IF V_INSTANCE.COUNT = 1
46 THEN
47 V_FILE := UTL_FILE.FOPEN(
48 D_DIR,
49 'awr_' || V_DBNAME || '_' || V_INSTANCE(1) || '_' || V_SNAP_BEG(1) || '_' || V_SNAP_END(1) || '.html',
50 'w',
51 32767);
52
53 SELECT OUTPUT
54 BULK COLLECT INTO V_REPORT
55 FROM TABLE(
56 DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML(
57 V_DBID,
58 V_INSTANCE(1),
59 V_SNAP_BEG(1),
60 V_SNAP_END(1),
61 0));
62 FOR I IN 1..V_REPORT.COUNT LOOP
63 UTL_FILE.PUT_LINE(V_FILE, V_REPORT(I));
64 END LOOP;
65 UTL_FILE.FCLOSE(V_FILE);
66 ELSE
67 FOR I IN V_INSTANCE.FIRST..V_INSTANCE.LAST LOOP
68 V_FILE := UTL_FILE.FOPEN(
69 D_DIR,
70 'awr_' || V_DBNAME || '_' || V_INSTANCE(I) || '_' || V_SNAP_BEG(I) || '_' || V_SNAP_END(I) || '.html',
71 'w',
72 32767);
73
74 SELECT OUTPUT
75 BULK COLLECT INTO V_REPORT
76 FROM TABLE(
77 DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML(
78 V_DBID,
79 V_INSTANCE(I),
80 V_SNAP_BEG(I),
81 V_SNAP_END(I),
82 0));
83 FOR I IN 1..V_REPORT.COUNT LOOP
84 UTL_FILE.PUT_LINE(V_FILE, V_REPORT(I));
85 END LOOP;
86 UTL_FILE.FCLOSE(V_FILE);
87 END LOOP;
88 END IF;
89 END;
90 /
过程已创建。
创建一个目录,就可以运行这个过程:
SQL> CREATE DIRECTORY D_OUTPUT AS 'D:\SQL';
目录已创建。
SQL> BEGIN
2 P_AWR_REPORT(TO_DATE('2010-12-31 10', 'YYYY-MM-DD HH24'),
3 TO_DATE('2010-12-31 11', 'YYYY-MM-DD HH24'),
4 'D_OUTPUT');
5 END;
6 /
PL/SQL 过程已成功完成。
检查对应的目录,可以看到,report文件已经创建:
D:\>cd sql
D:\sql>dir
驱动器 D 中的卷没有标签。
卷的序列号是 F4E9-218A
D:\sql 的目录
2011/01/04 23:40
2011/01/04 23:40
2011/01/04 23:40 233,586 awr_YTK102_1_118_119.html
1
2 个目录 8,983,412,736 可用字节
D:\sql>type awr_ytk102_1_118_119.html|more
rif;color:black; background:White;}
pre.awr {font:8pt Courier;color:black; background:White;}h1.awr {font:bold 20
pt Arial,Helvetica,Geneva,sans-serif;color:#336699;background-color:White;border
-bottom:1px solid #cccc99;margin-top:0pt; margin-bottom:0pt;padding:0px 0px 0px
0px;}
h2.awr {font:bold 18pt Arial,Helvetica,Geneva,sans-serif;color:#336699;backgro
und-color:White;margin-top:4pt; margin-bottom:0pt;}
h3.awr {font:bold 16pt Arial,Helvetica,Geneva,sans-serif;color:#336699;backgroun
d-color:White;margin-top:4pt; margin-bottom:0pt;}li.awr {font: 8pt Arial,Helveti
ca,Geneva,sans-serif; color:black; background:White;}
th.awrnobg {font:bold 8pt Arial,Helvetica,Geneva,sans-serif; color:black; backgr
ound:White;padding-left:4px; padding-right:4px;padding-bottom:2px}th.awrbg {font
:bold 8pt Arial,Helvetica,Geneva,sans-serif; color:White; background:#0066CC;pad
ding-left:4px; padding-right:4px;padding-bottom:2px}
td.awrnc {font:8pt Arial,Helvetica,Geneva,sans-serif;color:black;background:Whit
e;vertical-align:top;}
td.awrc {font:8pt Arial,Helvetica,Geneva,sans-serif;color:black;background:#F
FFFCC; vertical-align:top;}a.awr {font:bold 8pt Arial,Helvetica,sans-serif;color
:#663300; vertical-align:top;margin-top:0pt; margin-bottom:0pt;}
WARNING: Since the DB Time is less than one second, there was
minimal foreground activity in the snapshot period.
.
.
.
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4227/viewspace-689953/ ,如需转载,请注明出处,否则将追究法律责任。