데이터 베이스 MySQL 튜토리얼 Oracle数据库管理常用的监控脚本------极大的简化运维工作

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

Jun 07, 2016 pm 05:27 PM
오라클 데이터베이스

最近几天都研究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

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Oracle에서 테이블이 속한 테이블스페이스를 확인하는 방법 Oracle에서 테이블이 속한 테이블스페이스를 확인하는 방법 Jul 06, 2023 pm 01:31 PM

Oracle에서 테이블이 속한 테이블스페이스를 확인하는 방법: 1. "SELECT" 문을 사용하고 테이블 이름을 지정하여 지정된 테이블이 속한 테이블스페이스를 찾습니다. 2. Oracle에서 제공하는 데이터베이스 관리 도구를 사용하여 확인합니다. 3. SQL*Plus에서는 "DESCRIBEyour_table_name" 명령을 입력하여 테이블이 속한 테이블스페이스를 볼 수 있습니다. .

PDO를 사용하여 Oracle 데이터베이스에 연결하는 방법 PDO를 사용하여 Oracle 데이터베이스에 연결하는 방법 Jul 28, 2023 pm 12:48 PM

PDO를 사용하여 Oracle 데이터베이스에 연결하는 방법 개요: PDO(PHPDataObjects)는 PHP에서 데이터베이스를 운영하기 위한 확장 라이브러리로 여러 유형의 데이터베이스에 액세스할 수 있는 통합 API를 제공합니다. 이 기사에서는 PDO를 사용하여 Oracle 데이터베이스에 연결하고 몇 가지 일반적인 데이터베이스 작업을 수행하는 방법에 대해 설명합니다. 단계: Oracle 데이터베이스 드라이버 확장 설치 PDO를 사용하여 Oracle 데이터베이스에 연결하기 전에 해당 Oracle을 설치해야 합니다.

오라클에서 중복 데이터 하나만 검색하는 방법 오라클에서 중복 데이터 하나만 검색하는 방법 Jul 06, 2023 am 11:45 AM

Oracle이 중복 데이터 중 하나만 가져오는 단계: 1. GROUP BY 및 HAVING 절과 결합된 SELECT 문을 사용하여 중복 데이터를 찾습니다. 2. ROWID를 사용하여 중복 데이터를 삭제하여 정확한 중복 데이터 레코드가 삭제되도록 합니다. 중복 데이터를 삭제하려면 "ROW_NUMBER" ()" 함수를 사용하세요. 그러면 각 중복 데이터 집합의 첫 번째 레코드를 제외한 모든 레코드가 삭제됩니다. 3. "select count(*) from" 문을 사용하여 삭제된 레코드 수를 반환합니다. 결과를 보장합니다.

PHP 및 Oracle 데이터베이스로 데이터 가져오기 구현 PHP 및 Oracle 데이터베이스로 데이터 가져오기 구현 Jul 12, 2023 pm 06:46 PM

PHP 및 Oracle 데이터베이스로 데이터 가져오기 구현 웹 개발에서 PHP를 서버측 스크립트 언어로 사용하면 데이터베이스를 편리하게 운영할 수 있습니다. 일반적인 관계형 데이터베이스 관리 시스템인 Oracle 데이터베이스는 강력한 데이터 저장 및 처리 기능을 갖추고 있습니다. 이 기사에서는 PHP를 사용하여 Oracle 데이터베이스로 데이터를 가져오는 방법을 소개하고 해당 코드 예제를 제공합니다. 먼저, PHP와 Oracle 데이터베이스가 설치되어 있는지, 그리고 PHP가 다음과 같이 구성되었는지 확인해야 합니다.

PHP를 사용하여 PDO를 확장하여 Oracle 데이터베이스에 연결하는 방법 PHP를 사용하여 PDO를 확장하여 Oracle 데이터베이스에 연결하는 방법 Jul 29, 2023 pm 07:21 PM

PHP를 사용하여 PDO를 확장하여 Oracle 데이터베이스에 연결하는 방법 소개: PHP는 매우 널리 사용되는 서버 측 프로그래밍 언어이고 Oracle은 일반적으로 사용되는 관계형 데이터베이스 관리 시스템입니다. 이 문서에서는 PHP 확장 PDO(PHPDataObjects)를 사용하여 Oracle 데이터베이스에 연결하는 방법을 소개합니다. 1. PDO_OCI 확장을 설치합니다. Oracle 데이터베이스에 연결하려면 먼저 PDO_OCI 확장을 설치해야 합니다. PDO_OCI 확장을 설치하는 단계는 다음과 같습니다.

PHP 및 Oracle 데이터베이스 연결 풀을 효율적으로 사용하는 방법 PHP 및 Oracle 데이터베이스 연결 풀을 효율적으로 사용하는 방법 Jul 12, 2023 am 10:07 AM

PHP 및 Oracle 데이터베이스에서 연결 풀링을 효율적으로 사용하는 방법 소개: PHP 애플리케이션을 개발할 때 데이터베이스 사용은 필수적인 부분입니다. Oracle 데이터베이스와 상호 작용할 때 연결 풀을 사용하는 것은 애플리케이션 성능과 효율성을 향상시키는 데 매우 중요합니다. 이 기사에서는 PHP에서 Oracle 데이터베이스 연결 풀을 효율적으로 사용하는 방법을 소개하고 해당 코드 예제를 제공합니다. 1. 커넥션 풀링의 개념과 장점 커넥션 풀링은 데이터베이스의 커넥션을 미리 생성하여 유지하는 기술이다.

Oracle 데이터베이스에는 jdk가 필요합니까? Oracle 데이터베이스에는 jdk가 필요합니까? Jun 05, 2023 pm 05:06 PM

oracle 데이터베이스에는 jdk가 필요합니다. 1. 특정 소프트웨어나 기능을 사용하는 경우 JDK에 포함된 다른 소프트웨어나 라이브러리가 필요합니다. 2. Oracle 데이터베이스에서 Java 프로그램을 실행하려면 Java JDK를 설치해야 합니다. Java 애플리케이션 기능 개발 및 컴파일을 제공합니다. 4. 특정 기능을 구현하고 구현하는 데 도움이 되는 Java 기능에 대한 Oracle의 요구 사항을 충족합니다.

Oracle에서 테이블스페이스 크기를 쿼리하는 방법 Oracle에서 테이블스페이스 크기를 쿼리하는 방법 Jul 06, 2023 pm 01:45 PM

Oracle에서 테이블 공간 크기를 쿼리하는 단계: 1. 데이터베이스 관리자 계정을 사용하여 Oracle 데이터베이스에 로그인합니다. 2. "SELECT" 문을 사용하여 공간 목록을 봅니다. 3. 테이블 공간 크기를 쿼리하는 방법에는 세 가지가 있습니다. : dbms_utility 패키지를 사용하여 쿼리하고, dba_segments 뷰 쿼리를 사용하고, dba_data_files 뷰 쿼리를 사용합니다. 4. "DBMS_OUTPUT.PUT_LINE" 함수 또는 기타 방법을 사용하여 쿼리 결과를 표시합니다.

See all articles