请选择 进入手机版 | 继续访问电脑版

湖南新梦想

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 496|回复: 0

Oracle每天自动生成AWR报告

[复制链接]

2775

主题

3174

帖子

1万

积分

论坛元老

Rank: 8Rank: 8

积分
11260
发表于 2021-4-22 15:21:56 | 显示全部楼层 |阅读模式
       经验丰富的老员工希望能够每天为数据库生成1个AWR报告,以便于后期分析数据库的性能变化,手动生成太麻烦,查了一下资料,发现可以自动生成,过程如下。
  数据库环境:11gR2 RAC(双节点)
  AWR报告:由于是RAC数据库,希望生成每个节点的报告及全局报告,时间段为:第一天的0点~第二天的0点。
  (1)在oracle服务器上创建路径
  server2$[/home/oracle]mkdir awrreport
  (2)创建directory并授权(使用sys账户执行)
  1. create or replace directory DIR_AWRREPORT as '/home/oracle/awrreport';
  2. grant read,write on directory DIR_AWRREPORT to mydba;                    -- mydba为具有dba权限的用户
  3. grant select on v_$database to mydba;
  4. grant select on dba_hist_snapshot to mydba;
  5. grant execute on sys.dbms_workload_repository to mydba;
复制代码
   
   (3)编写脚本(使用监控账户mydba执行)
  1. CREATE OR REPLACE PROCEDURE auto_awrreport
  2. AS
  3. /*
  4. 用途 :自动生成AWR报告
  5. 创建人 :gegeman
  6. 创建日期:2017-12-08
  7. */
  8. start_snap number;
  9. end_snap number;
  10. rpt_interval number := 24; --报告间隔(小时)
  11. start_time varchar2(14);
  12. end_time varchar2(14);
  13. awr_file utl_file.file_type;
  14. v_dbid number;
  15. v_dbname varchar2(20);
  16. begin
  17. --确定数据库名称与id
  18. select dbid,name into v_dbid,v_dbname from v$database;
  19. ---查询起始的快照id
  20. select max(snap_id) into end_snap from dba_hist_snapshot;
  21. start_snap := end_snap-rpt_interval;
  22. ---格式化快照时间
  23. select to_char(end_interval_time-rpt_interval/24, 'yyyymmddhh24'),to_char(end_interval_time, 'yyyymmddhh24')
  24. into start_time,end_time
  25. from dba_hist_snapshot
  26. where snap_id = end_snap and instance_number = 1;
  27. --实例1报告
  28. awr_file := utl_file.fopen('DIR_AWRREPORT',lower(v_dbname)||'_1_'||start_time||'_'||end_time||'.html', 'a',32767);
  29. for awr_info in (select output from table(dbms_workload_repository.awr_report_html(v_dbid,1,start_snap,end_snap,0))) loop
  30. UTL_FILE.put_line(awr_file,awr_info.output);
  31. end loop;
  32. utl_file.fclose(awr_file);
  33. --实例2报告
  34. awr_file := utl_file.fopen('DIR_AWRREPORT',lower(v_dbname)||'_2_'||start_time||'_'||end_time||'.html', 'a',32767);
  35. for awr_info in (select output from table(dbms_workload_repository.awr_report_html(v_dbid,2,start_snap,end_snap,0))) loop
  36. UTL_FILE.put_line(awr_file,awr_info.output);
  37. end loop;
  38. utl_file.fclose(awr_file);
  39. --全局报告
  40. awr_file := utl_file.fopen('DIR_AWRREPORT',lower(v_dbname)||'_global_'||start_time||'_'||end_time||'.html', 'a',32767);
  41. for awr_info in (select output from table(dbms_workload_repository.awr_global_report_html(l_dbid => v_dbid,l_inst_num => '',l_bid => start_snap,l_eid => end_snap,l_options => 0))) loop
  42. UTL_FILE.put_line(awr_file,awr_info.output);
  43. end loop;
  44. utl_file.fclose(awr_file);
  45. end auto_awrreport;
复制代码
       (4)授予监控用户执行procedure权限(使用sys账户)
    grant execute on mydba.auto_awrreport to mydba;
  (5)创建job,每天晚上12:30执行(监控账户)


回复

使用道具 举报

0

主题

5

帖子

19

积分

禁止发言

积分
19
发表于 2021-5-10 16:13:17 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|湖南新梦想 ( 湘ICP备18019834号-2 )

GMT+8, 2022-6-29 14:19 , Processed in 0.046419 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表