熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

讓我們一起學做業余DBA!

2013-11-13 15:54:24  來源: Oracle 

  前言
  這篇文章介紹了DBA每天在監控Oracle數據庫方面的職責講述了如何通過shell腳本來完成這些重復的監控工作本文首先回顧了一些DBA常用的Unix命令以及解釋了如何通過Unix Cron來定時執行DBA腳本同時文章還介紹了個重要的腳本來監控Oracle數據庫
  
  檢查實例的可用性
  
  檢查監聽器的可用性
  
  檢查alert日志文件中的錯誤信息
  
  在存放log文件的地方滿以前清空舊的log文件
  
  分析table和index以獲得更好的性能
  
  檢查表空間的使用情況
  
  找出無效的對象
  
  監控用戶和事務
  
  DBA需要的Unix基本知識
  
  基本的UNIX命令
  
  以下是一些常用的Unix命令
  
  ps顯示進程
  grep搜索文件中的某種文本模式
  mailx讀取或者發送mail
  cat連接文件或者顯示它們
  cut選擇顯示的列
  awk模式匹配語言
  df顯示剩余的磁盤空間
  
  以下是DBA如何使用這些命令的一些例子
  
  顯示服務器上的可用實例
  
  $ ps ef | grep smon
  oracle Feb ? : ora_smon_oradb
  oracle Feb ? : ora_smon_oradb
  dliu :: pts/ : grep smon
  oracle :: ? : ora_smon_oradb
  oracle Mar ? : ora_smon_oradb
  
  顯示服務器上的可用監聽器
  
  $ ps ef | grep listener | grep v grep
  (譯者注grep命令應該加上i參數即grep i listener該參數的作用是忽略大小寫因為有些時候listener是大寫的這時就會看不到結果)
  oracle Feb ? : //bin/tnslsnr listener_db inherit
  oracle :: ? : //bin/tnslsnr listener_db inherit
  oracle Feb ? : //bin/tnslsnr listener_db inherit
  oracle Mar ? : //bin/tnslsnr listener_db inherit
  
  查看Oracle存檔目錄的文件系統使用情況
  
  $ df k | grep oraarch
  /dev/vx/dsk/proddg/oraarch % /u/oraarch
  
  統計alterlog文件中的行數
  
  $ cat alertlog | wc l
  
  
  列出alertlog文件中的全部Oracle錯誤信息
  
  $ grep ORA alertlog
  ORA: internal error code arguments: [kcrrrfswda] [] [] [] [] []
  ORA: internal error code arguments: [] [] [] []
  
  CRONTAB基本
  一個crontab文件中包含有六個字段
  
  分鐘
  
  小時
  
  月中的第幾天
  
  月份
  
  星期幾 with = Sunday
  
  Unix命令或者Shell腳本
  
  要編輯一個crontab文件輸入
  
  Crontab e
  
  要查看一個crontab文件輸入
  
  Crontab l
   * * /dba/admin/analyze_tableksh
   * * /dba/admin/hotbackupksh /dev/null >&
  
  在上面的例子中第一行顯示了一個分析表的腳本在每個星期am運行第二行顯示了一個執行熱備份的腳本在每個周三和周六的am運行
  
  監控數據庫的常用Shell腳本
  以下提供的個shell腳本覆蓋了DBA每日監控工作的%你可能還需要修改UNIX的環境變量
  
  檢查Oracle實例的可用性
  oratab文件中列出了服務器上的所有數據庫
  
  $ cat /var/opt/oracle/oratab
  ###################################################################
  ## /var/opt/oracle/oratab ##
  ###################################################################
  oradb:/u/app/oracle/product/:Y
  oradb:/u/app/oracle/product/:Y
  oradb:/u/app/oracle/product/:N
  oradb:/u/app/oracle/product/:Y
  
  以下的腳本檢查oratab文件中列出的所有數據庫並且找出該數據庫的狀態(啟動還是關閉)
  
  ###################################################################
  ## ckinstanceksh ## ###################################################################
  ORATAB=/var/opt/oracle/oratab
  echo `date`
  echo Oracle Database(s) Status `hostname` :\n
  
  db=`egrep i :Y|:N $ORATAB | cut d: f | grep v \# | grep v \*`
  pslist=`ps ef | grep pmon`
  for i in $db ; do
  echo $pslist | grep ora_pmon_$i > /dev/null >$
  if (( $? )); then
  echo Oracle Instance $i: Down
  else
  echo Oracle Instance $i: Up
  fi
  done
  
  使用以下的命令來確認該腳本是可以執行的
  
  $ chmod ckinstanceksh
  $ ls l ckinstanceksh
  rwxrr oracle dba Mar : ckinstanceksh*
  
  以下是實例可用性的報表
  
  $ ckinstanceksh
  Mon Mar :: PST
  Oracle Database(s) Status for DBHOST server:
  Oracle Instance oradb: Up
  Oracle Instance oradb: Up
  Oracle Instance oradb: Down
  Oracle Instance oradb: Up
  
  檢查Oracle監聽器的可用性
  以下有一個類似的腳本檢查Oracle監聽器如果監聽器停了該腳本將會重新啟動監聽器
  
  #######################################################################
  ## cklsnrsh ##
  #######################################################################
  #!/bin/ksh
  DBALIST=priano;export DBALIST
  cd /var/opt/oracle
  rm f lsnrexist
  ps ef | grep mylsnr | grep v grep > lsnrexist
  if [ s lsnrexist ]
  then
  echo
  else
  echo Alert | mailx s Listener mylsnr on `hostname` is down $DBALIST
  TNS_ADMIN=/var/opt/oracle; export TNS_ADMIN
  ORACLE_SID=db; 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日志(ORAXXXXX)
  每個腳本所使用的一些環境變量可以放到一個profile中
  
  #######################################################################
  ## oracleprofile ##
  #######################################################################
  EDITOR=vi;export EDITOR ORACLE_BASE=/u/app/oracle; export
  ORACLE_BASE ORACLE_HOME=$ORACLE_BASE/product/; export
  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 HH: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=priano;export
  DBALIST
  
  以下的腳本首先調用oracleprofile來設置全部的環境變量如果發現任何的Oracle錯誤該腳本還會給DBA發送一個警告的email
  
  ####################################################################
  ## ckalertlogsh ##
  ####################################################################
  #!/bin/ksh
   /etc/oracleprofile
  for SID in `cat $ORACLE_HOME/sidlist`
  do
  cd $ORACLE_BASE/admin/$SID/bdump
  if [ f alert_${SID}log ]
  then
  mv alert_${SID}log alert_worklog
  touch alert_${SID}log
  cat alert_worklog >> alert_${SID}hist
  grep ORA alert_worklog > alerterr
  fi
  if [ `cat alerterr|wc l` gt ]
  then
  mailx s ${SID} ORACLE ALERT ERRORS $DBALIST < alerterr
  fi
  rm f alerterr
  rm f alert_worklog
  done
  
  清除舊的歸檔文件
  以下的腳本將會在log文件達到%容量的時候清空舊的歸檔文件
  
  $ df k | grep arch
  Filesystem kbytes used avail capacity Mounted on
  /dev/vx/dsk/proddg/archive % /u/archive<
From:http://tw.wingwit.com/Article/program/Oracle/201311/17492.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.