免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4771 | 回复: 2
打印 上一主题 下一主题

将指定时段AWR_REPORT发送到你的email的方法(10G以上) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-01-06 13:01 |只看该作者 |倒序浏览
前段时间用shell写了个脚本获取awr_report..今天重新整理了下.
改用存储过程来获得awr_report,用shell分析alert_log,并将他们一并发送到自己的mail中.
方法记录:
1.在数据库中创建一个目录.这是awr的报表文件输出目录.必须有oracle用户的写权限.
CREATE OR REPLACE DIRECTORY awr_reports_dir AS '/oracle/my_script/report_file';

2.创建获取awr_report的存储过程.
  TO_CHAR(SYSDATE-1,'YYYY-MM-DD')||' 09' -- 上午九点起
  TO_CHAR(SYSDATE-1,'YYYY-MM-DD')||' 17' -- 下午六点结束
  通过这两个时间的指定.将生成这个时间段之间的每一个小时一份的awr报表到awr_reports_dir目录里.
   过程开始:

  1. create or replace procedure auto_awr_reports
  2. as
  3.   l_snap_start       NUMBER ;
  4.   l_snap_end         NUMBER ;
  5.   l_dir              VARCHAR2(50) := 'AWR_REPORTS_DIR';
  6.   l_last_snap        NUMBER := NULL;
  7.   l_dbid             v$database.dbid%TYPE;
  8.   l_instance_number  v$instance.instance_number%TYPE;
  9.   l_file             UTL_FILE.file_type;
  10.   l_file_name        VARCHAR(50);
  11. BEGIN
  12.   SELECT dbid
  13.   INTO   l_dbid
  14.   FROM   v$database;
  15.   SELECT instance_number
  16.   INTO   l_instance_number
  17.   FROM   v$instance;
  18.   SELECT snap_id
  19.   INTO   l_snap_start
  20.   FROM   DBA_HIST_SNAPSHOT
  21.   WHERE TO_CHAR(BEGIN_INTERVAL_TIME,'YYYY-MM-DD HH24') = TO_CHAR(SYSDATE-1,'YYYY-MM-DD')||' 09';
  22.   SELECT snap_id
  23.   INTO   l_snap_end
  24.   FROM   DBA_HIST_SNAPSHOT
  25.   WHERE TO_CHAR(BEGIN_INTERVAL_TIME,'YYYY-MM-DD HH24') = TO_CHAR(SYSDATE-1,'YYYY-MM-DD')||' 17';
  26.   FOR cur_snap IN (SELECT snap_id
  27.                    FROM   dba_hist_snapshot
  28.                    WHERE  instance_number = l_instance_number
  29.                    AND    snap_id BETWEEN l_snap_start AND l_snap_end
  30.                    ORDER BY snap_id)
  31.   LOOP
  32.     IF l_last_snap IS NOT NULL THEN
  33.       l_file := UTL_FILE.fopen(l_dir, 'awr_' || l_last_snap || '_' || cur_snap.snap_id || '.htm', 'w', 32767);
  34.       FOR cur_rep IN (SELECT output
  35.                       FROM   TABLE(DBMS_WORKLOAD_REPOSITORY.awr_report_html(l_dbid, l_instance_number, l_last_snap,cur_snap.snap_id)))
  36.       LOOP
  37.         UTL_FILE.put_line(l_file, cur_rep.output);
  38.       END LOOP;
  39.       UTL_FILE.fclose(l_file);
  40.     END IF;
  41.     l_last_snap := cur_snap.snap_id;
  42.   END LOOP;
  43. EXCEPTION
  44.   WHEN OTHERS THEN
  45.     IF UTL_FILE.is_open(l_file) THEN
  46.       UTL_FILE.fclose(l_file);
  47.     END IF;
  48.     RAISE;
  49. END;
  50. /
复制代码

  过程结束.


3.在系统里创建shell脚本,shell脚本里使用了mutt来发送附件.要有sendmail支持发邮件..
内容如下:

脚本开始:

  1. #!/bin/bash
  2. # ORACLE ENV.
  3. # 自己定义你的oracle环境变量.因为要用cron来执行这个脚本.必须包含oracle的环境变量.
  4. #
  5. #
  6. export_path=/oracle/my_script/report_file
  7. # ANALYZE ORACLE ALERT LOG.
  8. # export file /oracle/my_script/report_file/analyze_$(date +%F).log
  9. #
  10. export LANG=C
  11. my_str=$(date -d "-1 day" "+%a %b %d")
  12. alert_log_file=/oracle/app/diag/rdbms/cecis/cecis/trace/alert_cecis.log
  13. export_analyze_file=$export_path/analyze_$(date +%F).log
  14. grep -A 10 "$my_str" $alert_log_file | grep -A 3 -B 1 -ni "warn\|err\|ORA-\|not" >> $export_analyze_file
  15. #
  16. # excute procedure AUTO_AWR_REPORTS.
  17. # report awr_report_files at time 09:00 - 18:00
  18. #
  19. $ORACLE_HOME/bin/sqlplus -s "/ as sysdba" >/dev/null 2>&1  <<EOF
  20. EXEC AUTO_AWR_REPORTS;
  21. EXIT
  22. EOF
  23. #
  24. # get all analye files
  25. #
  26. awr_files=$(for i in $(ls -A $export_path) ;do echo "-a $export_path/$i";done|xargs)
  27. #
  28. # mail to my Email. and delete analyze files.
  29. #
  30. mutt -s "$(date +%F)_ORACLE_REPORT" "写上你的接收EMail地址" $awr_files < /etc/sysconfig/network-scripts/ifcfg-eth0 && rm -rf /oracle/my_script/report_file/*
  31. #
  32. # end
  33. exit
复制代码

脚本结束.

4.在cron中建立这个脚本的启动时间.每天晚上3点.
$ crontab -l
0 3 * * * /oracle/my_script/analyze_alter_log.sh
这样就能每天在mail里查看前一天的每小时的awr和告警日志信息了.

[ 本帖最后由 Seker 于 2009-1-6 13:19 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-01-06 15:16 |只看该作者
支持知识共享,虽然我觉得这事不需要这么麻烦

论坛徽章:
0
3 [报告]
发表于 2009-01-06 16:45 |只看该作者
恩  不错   不过好像不支持HP-UNIX

grep -A 10 "$my_str" $alert_log_file | grep -A 3 -B 1 -ni "warn\|err\|ORA-\|not" >> $export_analyze_file

请问这条命令在HP-UNIX下怎么实现啊?  
HP里面没有-A的参数  用-n代替不了。。

[ 本帖最后由 爱之旅 于 2009-1-6 17:27 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP