设为首页 收藏本站
查看: 1087|回复: 0

[经验分享] Oracle运维脚本

[复制链接]

尚未签到

发表于 2018-9-6 12:19:16 | 显示全部楼层 |阅读模式
  最近几天都研究SHELL脚本,为了方便对公司的Oracle运维,简化管理,学习一些SHELL脚本是非常有必要的,通过书本和网上的一些资料,整理出了一些比较精典的脚本,都是经过清自测试可行的,放上来共大家分享。
  # 监控Oracle监听状态(chk_lsnr_stat.sh)
  # ======================================================================================
  # 监控Oracle监听器状态,发现状态异常启动监听,并发送邮件通知管理员,如果启动监听失败,发送邮件
  # 通知管理员。
  # ======================================================================================
  #! /bin/bash
  . /home/oracle/.bash_profile
  tempfile=$ORACLE_BASE/admin/$ORACLE_SID/tempfile.lis
  su - oracle -c "lsnrctl status" > /dev/null
  if [ $? != '0' ]; then
  echo "" >> $tempfile
  echo "======================================================" >> $tempfile
  echo "`date +%D-%T`" >> $tempfile
  su - oracle -c "lsnrctl start" >> $tempfile
  if [ $? = '0' ]; then
  cat $tempfile | mail dba@163.com -s "The Listener Shutdown,and Restarted Success"
  else
  cat $tempfile | mail dba@163.com -s "The Listener Shutdown,and Restarted Failed"
  fi
  fi
  ----------------------------------------------------------------------------------------
  # 监控Oracle实例状态(chk_inst_stat.sh)
  # =====================================================================================
  # 监控Oracle实例是否打开,实例打开时,数据库是否可用,当实例关闭,数据库不可用时发送告警邮件
  # 通知管理员(判断时除开+ASM这个特殊实例)
  # =====================================================================================
  #! /bin/bash
  ORATAB=/etc/oratab
  tempfile=/home/oracle/tempfile.lis
  db=`cat $ORATAB |egrep -i ":Y|:N"|cut -d ":" -f 1|grep -v "^+"`
  pslist="`ps -ef | grep pmon|grep -v grep`"
  mark=n
  dbstat=`su - oracle  /dev/null 2>&1
  if [ $? = "0" ]; then
  if [ $dbstat != "OPEN" ];then
  mark=y
  break
  fi
  else
  mark=y
  break
  fi
  done
  if [ $mark != 'n' ];then
  echo '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>'>> $tempfile
  echo "SERVER: $HOSTNAME" >> $tempfile
  echo "`date +%D-%T`"  >> $tempfile
  echo 'WARN!!! Oracle Database Unavailable' >> $tempfile
  echo "Maybe The Following Reasons: The Instance or Database is not OPEN" >>$tempfile
  echo | mail -s
  "Oracle Database Abnormal" dba@163.com < $tempfile
  rm -f $tempfile
  fi
  ------------------------------------------------------------------------------------------
  # 监控归档目录空间(chk_arc_space.sh)
  #=====================================================================================
  # 将日志目录空间控制在200M,当容量大于200M时,将最旧日志打包复制到其它目录,并删除之
  # 直到日志目录空间容量小于200M为止。
  #=====================================================================================
  #! /bin/bash
  ARC_DIR=/disk01/tbs03
  BAK_DIR=/opt/arcbackup
  limit=200
  capacity()
  {
  du -sh $ARC_DIR|awk -F " " '{print $1}'|tr -d M
  }
  oldlog()
  {
  ls -l|sort -k6|sed '1d'|head -1|awk -F " " '{print $9}'
  }
  cd $ARC_DIR
  if [ `capacity` -gt $limit ]; then
  echo ""|mail -s "The Archivelog Directory is Over Than $limit"\
  dba@163.com
  fi
  while [ `capacity` -gt $limit ]
  do
  file=`oldlog`
  tar -czf $file.`date +%Y%m%d%H%M`.tar.gz $file
  cp $file.`date +%Y%m%d%H%M`.tar.gz $BAK_DIR/
  rm -rf $ARC_DIR/$file $ARC_DIR/$file.`date +%Y%m%d%H%M`.tar.gz
  done
  # 监控警告文件错误信息(chk_alert_info.sh)
  #================================================================================
  # 固定时间间隔内检查alert_$ORACLE_SID.log文件中是否包含ORA-开头的错误信息,如果存在
  # 则将其以邮件的形式通知管理员。
  #================================================================================
  #! /bin/bash
  . /home/oracle/.bash_profile
  cd $ORACLE_BASE/admin/$ORACLE_SID/bdump/
  mv alert_$ORACLE_SID.log alert_temp.log
  touch alert_$ORACLE_SID.log
  cat alert_temp.log >> alert.$ORACLE_SID.hist
  grep ORA- alert_temp.log > alert.err
  if [ `cat alert.err|wc -l` -gt 0 ];then
  mail -s "ORACLE ALERT ERROR" dba@163.com < alert.err
  fi
  rm -rf alert.err
  rm -rf alert_temp.log
  # 监控磁盘空间利用率(chk_disk_space)
  # ====================================================================
  # 判断/dev开头的磁盘或分区空间利用率,当磁盘空间利用率超过90%则发送邮件通知
  # 管理员
  # ====================================================================
  #! /bin/bash
  limit=90%
  tempfile=chk_disk_space.tmp
  mark=n
  diskusage()
  {
  df -h|grep -v Filesystem|sed '/\/dev\/mapper/N;s/\n//'|grep "^/dev"|awk -F " " '{print $5}'
  }
  for percent in `diskusage`
  do
  if [[ $percent > $limit]];then
  mark=y
  break
  fi
  done
  if [ $mark != 'n' ];then
  df -h > $tempfile
  mail -s "Disk Usage Over than $limit on `hostname`" < $tempfile
  rm -rf $tempfile
  fi
  # 监控表空间空闲表空间(chk_tbs_free.sh)
  #==================================================================================
  # 监控空闲表空间,当空闲表空间低于20%时,发送邮件通知管理员
  #==================================================================================
  #! /bin/bash
  su - oracle > /dev/null > $log_file
  date >> $log_file
  su - oracle > /dev/null >$log_file
  date >> $log_file
  # RMAN备份SHELL脚本(rman_backup.sh)
  #===========================================================================
  # 实现指定级别的增量备份,由用户传入备份级别参数,如果不指参数则进行0级备份
  #==========
  =================================================================
  #! /bin/bash
  . /home/oracle/.bash_profile
  if [ $1 ];then
  backup_level=$1
  else
  backup_level=0
  fi
  backup_user=sys
  backup_user_pw=oracle
  #catalog_user=rman
  #catalog_user_pw=rman
  log_file=/home/oracle/rman_backup.log
  echo 'Begining rman backup  >>>>>>>>>>>>>>>>>>>>>>>>>>' >> $log_file
  date >> $log_file
  su - oracle >> $log_file > $log_file
  date >> $log_file
  # 逻辑备份SHELL脚本(schema_exp.sh)
  #=========================================================================
  # EXP对数据库schema对象进行备份,用户可以将需要备份的用户名做为参数传入SHELL脚本
  #=========================================================================
  #! /bin/bash
  BAK_DIR=/disk01/backup/logical_bak/
  log_file=/disk01/backup/logical_bak/user_full_bak.log
  exp_par="userid=system/oracle buffer=10485760 owner=$1"
  if [ $2 ];then
  exp_par="$exp_par file=$2"
  else
  exp_par="$exp_par file="$BAK_DIR/$1_`date +%Y%m%d%H%M`.dmp""
  fi
  echo "Begining User $1 Export ---------------------" >> $log_file
  echo "Export with following parameters: $exp_par" >> $log_file
  date >> $log_file
  su - oracle -c "exp $exp_par" >> $log_file 2>&1
  echo "Backup Finished ---------------------" >> $log_file
  date >> $log_file


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-564059-1-1.html 上篇帖子: Oracle conncect role vs create session-90SirDB 下篇帖子: Oracle local write wait等待事件
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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