Maison base de données tutoriel mysql Oracle数据库管理常用的监控脚本------极大的简化运维工作

Oracle数据库管理常用的监控脚本------极大的简化运维工作

Jun 07, 2016 pm 05:27 PM
oracle数据库

最近几天都研究SHELL脚本,为了方便对公司的Oracle运维,简化管理,学习一些SHELL脚本是非常有必要的,通过书本和网上的一些资料

最近几天都研究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  
    sqlplus -s /nolog
 
    conn / as sysdba
 
    set feedback off heading off pagesize 0
 
    select status from v\\$instance;
 
    exit
 
EOF`
 
for db_name in $db; do
 
      echo "$pslist" | grep "ora_pmon_$db_name" > /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   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      
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`"  
    rm -rf $tempfile   
fi
 
 
 
 
# 监控表空间空闲表空间(chk_tbs_free.sh)
#==================================================================================
# 监控空闲表空间,当空闲表空间低于20%时,发送邮件通知管理员
#==================================================================================
 
#! /bin/bash
 
su - oracle > /dev/null sqlplus -s /nolog
conn / as sysdba
set feedback off 
set heading off
set verify off
set pagesize 0
set linesize 200
 
spool tbsfree.alert
 
select t.tablespace_name,f.free_space/t.total_space from 
(select tablespace_name,sum(bytes) total_space from 
dba_data_files group by tablespace_name) t,
(select tablespace_name,sum(bytes) free_space from 
dba_free_space group by tablespace_name) f 
where t.tablespace_name=f.tablespace_name and f.free_space/t.total_space /
 
spool off
 
exit
 
EOF
 
if [ `cat tbsfree.alert|wc -l` -gt 0 ];then
 
      cat tbsfree.alert|mail -s "No Free Space in Oracle db" dba@163.com
     
      rm -rf tbsfree.alert
     
fi
 
 
# 全库冷备份(full_cold_backup.sh)
# =================================================================================
# 数据库打开时,自动生成备份脚本。然后关闭数据库,对控制文件,数据文件,重做日志文件,
# 初始化参数文件及口令文件做冷备,完成后打开数据库。
# =================================================================================
 
#! /bin/bash
 
. /home/oracle/.bash_profile
 
backup_dir=/disk01/backup/coldbak
 
log_file=/disk01/backup/coldbak/cold_backup_$ORACLE_SID.log
 
echo 'Begin Cold Backup>>>>>>>>>>>>>>>>'  >> $log_file
 
date >> $log_file
 
su - oracle > /dev/null  
sqlplus -s /nolog
 
conn / as sysdba
 
set feedback off heading off pagesize 0 line 1000
 
spool file_copy_$ORACLE_SID.sh
 
select 'cp ' || name || ' $backup_dir/' from v$controlfile;
 
select 'cp' || file_name || ' $backup_dir/' from dba_data_files;
 
select 'cp' || member || ' $backup_dir/' from v$logfile;
 
spool off
 
shutdown immediate
 
! bash file_copy_$ORACLE_SID.sh
 
startup
 
exit
 
EOF
 
if [ -e $ORACLE_HOME/dbs/init$ORACLE_SID.ora ];then
 
    cp $ORACLE_HOME/dbs/init$ORACLE_SID.ora $backup_dir/
     
fi
 
if [ -e $ORACLE_HOME/dbs/spfile$ORACLE_SID.ora ];then
 
    cp $ORACLE_HOME/dbs/spfile$ORACLE_SID.ora $backup_dir/
     
fi
 
if [ -e $ORACLE_HOME/dbs/orapw$ORACLE_SID ];then
 
    cp $ORACLE_HOME/dbs/orapw$ORACLE_SID $backup_dir/
     
fi
 
 
echo 'Cold Backup Finished>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >>$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  
rman target $backup_user/$backup_user_pw 
    # catalog $catalog_user/$catalog_user_pw
     
backup incremental level = $backup_level database;
 
quit;
 
EOF
 
echo 'rman backup finished  >>>>>>>>>>>>>>>>>>>>>>>>>'  >> $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

linux

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment vérifier à quel espace table appartient une table dans Oracle Comment vérifier à quel espace table appartient une table dans Oracle Jul 06, 2023 pm 01:31 PM

Comment vérifier à quel espace table appartient une table dans Oracle : 1. Utilisez l'instruction "SELECT" et spécifiez le nom de la table pour trouver l'espace table auquel appartient la table spécifiée. 2. Utilisez les outils de gestion de base de données fournis par Oracle pour vérifier ; l'espace table auquel appartient la table. Les outils fournissent généralement une interface graphique, rendant l'opération plus intuitive et plus pratique ; 3. Dans SQL*Plus, vous pouvez afficher l'espace table auquel appartient la table en entrant la commande "DESCRIBEyour_table_name ;" .

Comment se connecter à la base de données Oracle à l'aide de PDO Comment se connecter à la base de données Oracle à l'aide de PDO Jul 28, 2023 pm 12:48 PM

Présentation de l'utilisation de PDO pour se connecter à la base de données Oracle : PDO (PHPDataObjects) est une bibliothèque d'extension pour exploiter des bases de données en PHP. Elle fournit une API unifiée pour accéder à plusieurs types de bases de données. Dans cet article, nous verrons comment utiliser PDO pour se connecter à une base de données Oracle et effectuer certaines opérations courantes sur la base de données. Étape : Installez l'extension du pilote de base de données Oracle. Avant d'utiliser PDO pour vous connecter à la base de données Oracle, nous devons installer l'Oracle correspondant.

Comment récupérer un seul élément de données en double dans Oracle Comment récupérer un seul élément de données en double dans Oracle Jul 06, 2023 am 11:45 AM

Étapes permettant à Oracle de récupérer un seul élément de données en double : 1. Utilisez l'instruction SELECT combinée avec les clauses GROUP BY et HAVING pour rechercher les données en double ; 2. Utilisez ROWID pour supprimer les données en double afin de garantir que les enregistrements de données en double précis sont supprimés ; ou utilisez la fonction "ROW_NUMBER" ()" pour supprimer les données en double, ce qui supprimera tous les enregistrements sauf le premier enregistrement de chaque ensemble de données en double ; 3. Utilisez l'instruction "select count(*) from" pour renvoyer le nombre d'enregistrements supprimés à assurer le résultat.

Implémenter l'importation de données dans les bases de données PHP et Oracle Implémenter l'importation de données dans les bases de données PHP et Oracle Jul 12, 2023 pm 06:46 PM

Implémentation de l'importation de données dans les bases de données PHP et Oracle Dans le développement Web, l'utilisation de PHP comme langage de script côté serveur permet d'exploiter facilement la base de données. En tant que système de gestion de base de données relationnelle commun, la base de données Oracle dispose de puissantes capacités de stockage et de traitement des données. Cet article explique comment utiliser PHP pour importer des données dans une base de données Oracle et donne des exemples de code correspondants. Tout d'abord, nous devons nous assurer que les bases de données PHP et Oracle ont été installées et que PHP a été configuré pour

La base de données Oracle nécessite-t-elle JDK ? La base de données Oracle nécessite-t-elle JDK ? Jun 05, 2023 pm 05:06 PM

La base de données Oracle nécessite JDK. Les raisons sont les suivantes : 1. Lors de l'utilisation de logiciels ou de fonctions spécifiques, d'autres logiciels ou bibliothèques inclus dans le JDK sont requis 2. Java JDK doit être installé pour exécuter des programmes Java dans la base de données Oracle ; fournit Développer et compiler des fonctions d'application Java ; 4. Répondre aux exigences d'Oracle en matière de fonctions Java pour aider à implémenter et à mettre en œuvre des fonctions spécifiques.

Comment utiliser efficacement les pools de connexions aux bases de données PHP et Oracle Comment utiliser efficacement les pools de connexions aux bases de données PHP et Oracle Jul 12, 2023 am 10:07 AM

Comment utiliser efficacement le pool de connexions dans les bases de données PHP et Oracle Introduction : Lors du développement d'applications PHP, l'utilisation d'une base de données est un élément essentiel. Lors de l'interaction avec les bases de données Oracle, l'utilisation de pools de connexions est cruciale pour améliorer les performances et l'efficacité des applications. Cet article explique comment utiliser efficacement le pool de connexions à la base de données Oracle en PHP et fournit des exemples de code correspondants. 1. Le concept et les avantages du pooling de connexions Le pooling de connexions est une technologie de gestion des connexions aux bases de données. Il crée un lot de connexions à l'avance et maintient un lot de connexions.

Comment utiliser php pour étendre PDO afin de se connecter à la base de données Oracle Comment utiliser php pour étendre PDO afin de se connecter à la base de données Oracle Jul 29, 2023 pm 07:21 PM

Comment utiliser PHP pour étendre PDO afin de se connecter à la base de données Oracle Introduction : PHP est un langage de programmation côté serveur très populaire et Oracle est un système de gestion de base de données relationnelle couramment utilisé. Cet article explique comment utiliser l'extension PHP PDO (PHPDataObjects) pour se connecter à la base de données Oracle. 1. Installez l'extension PDO_OCI. Pour vous connecter à la base de données Oracle, vous devez d'abord installer l'extension PDO_OCI. Voici les étapes pour installer l'extension PDO_OCI : Assurez-vous

Comment Oracle détermine si une table existe dans une procédure stockée Comment Oracle détermine si une table existe dans une procédure stockée Jul 06, 2023 pm 01:20 PM

Étapes d'Oracle pour déterminer si une table existe dans une procédure stockée : 1. Utilisez la table système "user_tables`" pour interroger les informations de la table sous l'utilisateur actuel, comparez le nom de la table entrante "p_table_name" avec le champ "table_name", et si les conditions sont remplies, alors "COUNT(*)" renverra une valeur supérieure à 0 ; 2. Utilisez l'instruction "SET SERVEROUTPUT ON;" et le mot clé "EXEC`" pour exécuter la procédure stockée et transmettre le nom de la table à déterminer si la table existe.

See all articles