zoukankan      html  css  js  c++  java
  • ORACLE DBA 日常維護(1)

    前言
      这篇文章介绍了DBA每天在监控Oracle数据库方面的职责,讲述了如何通过shell脚本来完成这些重复的监控工作。本文首先回顾了一些DBA常用的Unix命令,以及解释了如何通过Unix Cron来定时执行DBA脚本。同时文章还介绍了8个重要的脚本来监控Oracle数据库:
      
      检查实例的可用性
      
      检查监听器的可用性
      
      检查alert日志文件中的错误信息
      
      在存放log文件的地方满以前清空旧的log文件
      
      分析table和index以获得更好的性能
      
      检查表空间的使用情况
      
      找出无效的对象
      
      监控用户和事务
      
      DBA需要的Unix基本知识
      
      基本的UNIX命令
      
      以下是一些常用的Unix命令:
      
      ps--显示进程
      grep--搜索文件中的某种文本模式
      mailx--读取或者发送mail
      cat--连接文件或者显示它们
      cut--选择显示的列
      awk--模式匹配语言
      df--显示剩余的磁盘空间
      
      以下是DBA如何使用这些命令的一些例子:
      
      显示服务器上的可用实例:
      
      $ ps -ef | grep smon
      oracle 21832 1 0 Feb 24 ? 1Array:05 ora_smon_oradb1

    www.bitsCN.com


      oracle 8Array8 1 0 Feb 15 ? 0:00 ora_smon_oradb2
      dliu 251ArrayArray 1Array038 0 10:48:57 pts/6 0:00 grep smon
      oracle 277Array8 1 0 05:43:54 ? 0:00 ora_smon_oradb3
      oracle 28781 1 0 Mar 03 ? 0:01 ora_smon_oradb4、
      
      显示服务器上的可用监听器:
      
      $ ps -ef | grep listener | grep -v grep
      (译者注:grep命令应该加上-i参数,即grep -i listener,该参数的作用是忽略大小写,因为有些时候listener是大写的,这时就会看不到结果)
      oracle 2387Array 1 0 Feb 24 ? 33:36 /8.1.7/bin/tnslsnr listener_db1 -inherit
      oracle 27Array3Array 1 0 05:44:02 ? 0:00 /8.1.7/bin/tnslsnr listener_db2 -inherit
      oracle 23536 1 0 Feb 12 ? 4:1Array /8.1.7/bin/tnslsnr listener_db3 -inherit
      oracle 288Array1 1 0 Mar 03 ? 0:01 /8.1.7/bin/tnslsnr listener_db4 -inherit
      
      查看Oracle存档目录的文件系统使用情况
      
      $ df -k | grep oraarch
      /dev/vx/dsk/proddg/oraarch 71123Array68 4754872 65850768 7% /u0Array/oraarch
      
      统计alter.log文件中的行数:
      
      $ cat alert.log | wc -l
      2Array84 中国网管联盟
      
      列出alert.log文件中的全部Oracle错误信息:
      
      $ grep ORA- alert.log
      ORA-00600: internal error code, arguments: [kcrrrfswda.1], [], [], [], [], []
      ORA-00600: internal error code, arguments: [1881], [258604Array6], [25857716], []
      
      CRONTAB基本
      一个crontab文件中包含有六个字段:
      
      分钟 0-5Array
      
      小时 0-23
      
      月中的第几天 1-31
      
      月份 1 - 12
      
      星期几 0 - 6, with 0 = Sunday
      
      Unix命令或者Shell脚本
      
      要编辑一个crontab文件,输入:
      
      Crontab -e
      
      要查看一个crontab文件,输入:
      
      Crontab -l
      0 4 * * 5 /dba/admin/analyze_table.ksh
      30 3 * * 3,6 /dba/admin/hotbackup.ksh /dev/null 2>&1
      
      在上面的例子中,第一行显示了一个分析表的脚本在每个星期5的4:00am运行。第二行显示了一个执行热备份的脚本在每个周三和周六的3:00a.m.运行。
      
      监控数据库的常用Shell脚本
      以下提供的8个shell脚本覆盖了DBA每日监控工作的Array0%,你可能还需要修改UNIX的环境变量。

    中国.网管联盟


      
      检查Oracle实例的可用性
      oratab文件中列出了服务器上的所有数据库
      
      $ cat /var/opt/oracle/oratab
      ###################################################################
      ## /var/opt/oracle/oratab ##
      ###################################################################
      oradb1:/u01/app/oracle/product/8.1.7:Y
      oradb2:/u01/app/oracle/product/8.1.7:Y
      oradb3:/u01/app/oracle/product/8.1.7:N
      oradb4:/u01/app/oracle/product/8.1.7:Y
      
      以下的脚本检查oratab文件中列出的所有数据库,并且找出该数据库的状态(启动还是关闭)
      
      ###################################################################
      ## ckinstance.ksh ## ###################################################################
      ORATAB=/var/opt/oracle/oratab
      echo "`date` "
      echo "Oracle Database(s) Status `hostname` :\n"
      
      db=`egrep -i ":Y|:N" $ORATAB | cut -d":" -f1 | grep -v "\#" | grep -v "\*"`
      pslist="`ps -ef | grep pmon`"
      for i in $db ; do 中国网管论坛
      echo "$pslist" | grep "ora_pmon_$i" > /dev/null 2>$1
      if (( $? )); then
      echo "Oracle Instance - $i: Down"
      else
      echo "Oracle Instance - $i: Up"
      fi
      done
      
      使用以下的命令来确认该脚本是可以执行的:
      
      $ chmod 744 ckinstance.ksh
      $ ls -l ckinstance.ksh
      -rwxr--r-- 1 oracle dba 657 Mar 5 22:5Array ckinstance.ksh*
      
      以下是实例可用性的报表:
      
      $ ckinstance.ksh
      Mon Mar 4 10:44:12 PST 2002
      Oracle Database(s) Status for DBHOST server:
      Oracle Instance - oradb1: Up
      Oracle Instance - oradb2: Up
      Oracle Instance - oradb3: Down
      Oracle Instance - oradb4: Up
      
      检查Oracle监听器的可用性
      以下有一个类似的脚本检查Oracle监听器。如果监听器停了,该脚本将会重新启动监听器:
      
      #######################################################################
      ## cklsnr.sh ##
      #######################################################################
      #!/bin/ksh www.bitsCN.com
      DBALIST="primary.dba@company.com,another.dba@company.com";export DBALIST
      cd /var/opt/oracle
      rm -f lsnr.exist
      ps -ef | grep mylsnr | grep -v grep > lsnr.exist
      if [ -s lsnr.exist ]
      then
      echo
      else
      echo "Alert" | mailx -s "Listener ’mylsnr’ on `hostname` is down" $DBALIST
      TNS_ADMIN=/var/opt/oracle; export TNS_ADMIN
      ORACLE_SID=db1; export ORACLE_SID
      ORAENV_ASK=NO; export ORAENV_ASK
      PATH=$PATH:/bin:/usr/local/bin; export PATH
      . oraenv
      LD_LIBRARY_PATH=${ORACLE_HOME}/lib;export LD_LIBRARY_PATH
      lsnrctl start mylsnr
      fi
      
      检查Alert日志(ORA-XXXXX)
      每个脚本所使用的一些环境变量可以放到一个profile中:
      
      #######################################################################
      ## oracle.profile ##
      #######################################################################
      EDITOR=vi;export EDITOR ORACLE_BASE=/u01/app/oracle; export
      ORACLE_BASE ORACLE_HOME=$ORACLE_BASE/product/8.1.7; export www_bitscn_com
      ORACLE_HOME LD_LIBRARY_PATH=$ORACLE_HOME/lib; export
      LD_LIBRARY_PATH TNS_ADMIN=/var/opt/oracle;export
      TNS_ADMIN NLS_LANG=american; export
      NLS_LANG NLS_DATE_FORMAT=’Mon DD YYYY HH24:MI:SS’; export
      NLS_DATE_FORMAT ORATAB=/var/opt/oracle/oratab;export
      ORATAB PATH=$PATH:$ORACLE_HOME:$ORACLE_HOME/bin:/usr/ccs/bin:/bin:/usr/bin:/usr/sbin:/
      sbin:/usr/openwin/bin:/opt/bin:.; export
      PATH DBALIST="primary.dba@company.com,another.dba@company.com";export
      DBALIST
      
      以下的脚本首先调用oracle.profile来设置全部的环境变量。如果发现任何的Oracle错误,该脚本还会给DBA发送一个警告的email。
      
      ####################################################################
      ## ckalertlog.sh ##
      ####################################################################
      #!/bin/ksh
      .. /etc/oracle.profile
      for SID in `cat $ORACLE_HOME/sidlist`
      do
      cd $ORACLE_BASE/admin/$SID/bdump
      if [ -f alert_${SID}.log ]
      then

    www.bitsCN.com


      mv alert_${SID}.log alert_work.log
      touch alert_${SID}.log
      cat alert_work.log >> alert_${SID}.hist
      grep ORA- alert_work.log > alert.err
      fi
      if [ `cat alert.err|wc -l` -gt 0 ]
      then
      mailx -s "${SID} ORACLE ALERT ERRORS" $DBALIST < alert.err
      fi
      rm -f alert.err
      rm -f alert_work.log
      done
      
      清除旧的归档文件
      以下的脚本将会在log文件达到Array0%容量的时候清空旧的归档文件:
      
      $ df -k | grep arch
      Filesystem kbytes used avail capacity Mounted on
      /dev/vx/dsk/proddg/archive 71123Array68 30210248 405Array4232 43% /u08/archive<
  • 相关阅读:
    WebSocket来实现即时通讯
    微信小程序1
    使用phpqrcode来生成二维码/thinkphp
    PHP函数积累
    Docker 常用命令汇总(beta)
    Nginx+Keepalived高可用架构简述(beta)
    Docker镜像制作(以Nginx+Keepalived为例)(beta)
    开源协议浅谈(beta)
    【Elasticsearch系列】ES安装(mac)
    linux 下安装JDK
  • 原文地址:https://www.cnblogs.com/Mayvar/p/wanghonghua_201106030127.html
Copyright © 2011-2022 走看看