Oracle问题分析采集数据的方法

1.背景:

运维人员或多或少都会遇到分析问题、分析故障的时候,往往在碰到一些棘手的问题事,我们都会往更深层次的专家进行求助。不管是二线专家还是Oracle全球服务工程师(后文称GCS工程师),往往都会让你提交这样那样的数据。基本每次都会碰到这样的情况,问一点数据给一点,主要的成本消耗都在提取数据中。

2.获取什么数据:

经过整理多年与GCS以及自己分析问题的经验,建议提供以下数据:

l  OSW

l  Nmon

l  日志文件

l  Awr/ash

l  dba_hist_active_sess_history

l  Opatch

3.如何获取数据:

经过多年的运维经验进行总结,我们建议至少要提供问题发生前1小时的数据,如问题发生在今天10:00,那么数据由今天9:00开始提供,一直到问题恢复后30分钟。

l  OSW

这个是ORACLE提供的对系统监控的工具,实质是vmstat等,有时候OSW有数据但nmon无数据,有时候则相反,故就算部署了nmon仍然建议部署osw的原因。集数据间隔建议20秒采集一次。

获取数据脚本:

touch -t 201705091300 test1   

touch -t 201705091400 test2

find . -type f -newer test1 ! -newer test2|xargs tar cvf oswdata_ggdb2.tar

 

ps: 201705091300代表2017年5月9日13时

l  Nmon

经典的系统监控工具,在AIX、LINUX上都有其版本。建议最多60秒采集一次,目前来看,比较多地方用了nmon采集数据,但是采集间隔为10~20分钟,导致了采集了跟无采集一样。

获取数据只需cat或者ftp相关的工具即可。

l  日志文件

TFA是个11.2版本上推出的用来收集Grid Infrastructure/RAC环境下的诊断日志的工具,它可以用非常简单的命令协助用户收集RAC里的日志,以便进一步进行诊断;TFA是类似diagcollection的一个oracle 集群日志收集器,而且TFA比diagcollection集中和自动化的诊断信息收集能力更强大。TFA有以下几个特点:

  • TFA可以在一台机器上执行一条简单的命令把所有节点的日志进行打包,封装;
  • TFA可以在收集的过程中对日志进行”trim”操作,减少数据的收集量;
  • TFA可以收集用来诊断用的“一段时间内”的数据;
  • TFA可以把所有节点的日志收集并封装好放在某一个节点上以便传输阅读;
  • TFA可以指定Cluster中的某一部分组件进行日志收集,如:ASM ,RDBMS,Clusterware
  • TFA可以根据条件配置对告警日志进行实时扫描(DB Alert Logs, ASM Alert Logs, Clusterware Alert Logs, etc);
  • TFA可以根据实时扫描的结果自动的收集诊断日志;
  • TFA可以根据指定的错误进行对告警日志的扫描;
  • TFA可以根据指定的错误扫描后的结果收集诊断日志;

获取数据的脚本:

用root或者grid执行

# $TFA_HOME/bin/tfactl diagcollect -all -from "Jan/21/2013 00:00:00" -to "Jan/21/2013 13:00:00"

11gR2之前的,可以根据业支团队采集数据的脚本执行命令即可。

l  Awr/ash

AWR和ASH是ORACLE常用的工具,需问题分析时,需要提供正常时间段和问题时间段的AWR和ASH报告。AWR报告每小时生成一份,ASH每15—30分钟生成一份。

l  dba_hist_active_sess_history

在很多情况下,当数据库发生性能问题的时候,我们并没有机会来收集足够的诊断信息,比如system state dump或者hang analyze,甚至问题发生的时候DBA根本不在场。这给我们诊断问题带来很大的困难。那么在这种情况下,我们是否能在事后收集一些信息来分析问题的原因呢?在Oracle 10G或者更高版本上,答案是肯定的。本文我们将介绍一种通过dba_hist_active_sess_history的数据来分析问题的一种方法。

获取数据的方式:

在发生问题的数据库上执行exp提取需要的数据:

SQL> conn user/passwd

SQL> create table m_ash as select * from dba_hist_active_sess_history where SAMPLE_TIME between TO_TIMESTAMP ('<time_begin>', 'YYYY-MM-DD HH24:MI:SS') and TO_TIMESTAMP ('<time_end>', 'YYYY-MM-DD HH24:MI:SS');

执行导出:

$ exp user/passwd file=m_ash.dmp tables=(m_ash) log=m_ash.exp.log

l  Opatch

采集Opatch的数据主要是确认补丁信息,以确认是否命中一些相关的BUG。分别用Oracle和grid用户进行数据采集:

$ $ORACLE_HOME/OPatch/opatch lsinventory

4.小结:

本文提供了问题分析时,一般需要采集的数据,通过既定的标准化进行数据采集,降低人员反复获取数据等时间消耗,也同时降低因无第一时间采集数据导致数据丢失无法分析出问题根本原因的风险。

posted @ 2017-12-10 10:04  Nolan_Chan  阅读(785)  评论(0编辑  收藏  举报