찾다
데이터 베이스MySQL 튜토리얼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

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
Composite Index와 여러 단일 열 인덱스를 언제 사용해야합니까?Composite Index와 여러 단일 열 인덱스를 언제 사용해야합니까?Apr 11, 2025 am 12:06 AM

데이터베이스 최적화에서 쿼리 요구 사항에 따라 인덱싱 전략을 선택해야합니다. 1. 쿼리에 여러 열이 포함되고 조건 순서가 수정되면 복합 인덱스를 사용하십시오. 2. 쿼리에 여러 열이 포함되어 있지만 조건 순서가 고정되지 않은 경우 여러 단일 열 인덱스를 사용하십시오. 복합 인덱스는 다중 열 쿼리를 최적화하는 데 적합한 반면 단일 열 인덱스는 단일 열 쿼리에 적합합니다.

MySQL에서 느린 쿼리를 식별하고 최적화하는 방법은 무엇입니까? (느린 쿼리 로그, Performance_schema)MySQL에서 느린 쿼리를 식별하고 최적화하는 방법은 무엇입니까? (느린 쿼리 로그, Performance_schema)Apr 10, 2025 am 09:36 AM

MySQL 느린 쿼리를 최적화하려면 SlowQueryLog 및 Performance_Schema를 사용해야합니다. 1. SlowQueryLog 및 Set Stresholds를 사용하여 느린 쿼리를 기록합니다. 2. Performance_schema를 사용하여 쿼리 실행 세부 정보를 분석하고 성능 병목 현상을 찾고 최적화하십시오.

MySQL 및 SQL : 개발자를위한 필수 기술MySQL 및 SQL : 개발자를위한 필수 기술Apr 10, 2025 am 09:30 AM

MySQL 및 SQL은 개발자에게 필수적인 기술입니다. 1.MySQL은 오픈 소스 관계형 데이터베이스 관리 시스템이며 SQL은 데이터베이스를 관리하고 작동하는 데 사용되는 표준 언어입니다. 2.MYSQL은 효율적인 데이터 저장 및 검색 기능을 통해 여러 스토리지 엔진을 지원하며 SQL은 간단한 문을 통해 복잡한 데이터 작업을 완료합니다. 3. 사용의 예에는 기본 쿼리 및 조건 별 필터링 및 정렬과 같은 고급 쿼리가 포함됩니다. 4. 일반적인 오류에는 구문 오류 및 성능 문제가 포함되며 SQL 문을 확인하고 설명 명령을 사용하여 최적화 할 수 있습니다. 5. 성능 최적화 기술에는 인덱스 사용, 전체 테이블 스캔 피하기, 조인 작업 최적화 및 코드 가독성 향상이 포함됩니다.

MySQL 비동기 마스터 슬레이브 복제 프로세스를 설명하십시오.MySQL 비동기 마스터 슬레이브 복제 프로세스를 설명하십시오.Apr 10, 2025 am 09:30 AM

MySQL 비동기 마스터 슬레이브 복제는 Binlog를 통한 데이터 동기화를 가능하게하여 읽기 성능 및 고 가용성을 향상시킵니다. 1) 마스터 서버 레코드는 Binlog로 변경됩니다. 2) 슬레이브 서버는 I/O 스레드를 통해 Binlog를 읽습니다. 3) 서버 SQL 스레드는 데이터를 동기화하기 위해 Binlog를 적용합니다.

MySQL : 쉽게 학습하기위한 간단한 개념MySQL : 쉽게 학습하기위한 간단한 개념Apr 10, 2025 am 09:29 AM

MySQL은 오픈 소스 관계형 데이터베이스 관리 시스템입니다. 1) 데이터베이스 및 테이블 작성 : CreateAbase 및 CreateTable 명령을 사용하십시오. 2) 기본 작업 : 삽입, 업데이트, 삭제 및 선택. 3) 고급 운영 : 가입, 하위 쿼리 및 거래 처리. 4) 디버깅 기술 : 확인, 데이터 유형 및 권한을 확인하십시오. 5) 최적화 제안 : 인덱스 사용, 선택을 피하고 거래를 사용하십시오.

MySQL : 데이터베이스에 대한 사용자 친화적 인 소개MySQL : 데이터베이스에 대한 사용자 친화적 인 소개Apr 10, 2025 am 09:27 AM

MySQL의 설치 및 기본 작업에는 다음이 포함됩니다. 1. MySQL 다운로드 및 설치, 루트 사용자 비밀번호를 설정하십시오. 2. SQL 명령을 사용하여 CreateAbase 및 CreateTable과 같은 데이터베이스 및 테이블을 만듭니다. 3. CRUD 작업을 실행하고 삽입, 선택, 업데이트, 명령을 삭제합니다. 4. 성능을 최적화하고 복잡한 논리를 구현하기 위해 인덱스 및 저장 절차를 생성합니다. 이 단계를 사용하면 MySQL 데이터베이스를 처음부터 구축하고 관리 할 수 ​​있습니다.

InnoDB 버퍼 풀은 어떻게 작동하며 성능에 중요한 이유는 무엇입니까?InnoDB 버퍼 풀은 어떻게 작동하며 성능에 중요한 이유는 무엇입니까?Apr 09, 2025 am 12:12 AM

innodbbufferpool은 데이터와 색인 페이지를 메모리에로드하여 MySQL 데이터베이스의 성능을 향상시킵니다. 1) 데이터 페이지가 버퍼 풀에로드되어 디스크 I/O를 줄입니다. 2) 더러운 페이지는 정기적으로 디스크로 표시되고 새로 고침됩니다. 3) LRU 알고리즘 관리 데이터 페이지 제거. 4) 읽기 메커니즘은 가능한 데이터 페이지를 미리로드합니다.

MySQL : 초보자를위한 데이터 관리의 용이성MySQL : 초보자를위한 데이터 관리의 용이성Apr 09, 2025 am 12:07 AM

MySQL은 설치가 간단하고 강력하며 데이터를 쉽게 관리하기 쉽기 때문에 초보자에게 적합합니다. 1. 다양한 운영 체제에 적합한 간단한 설치 및 구성. 2. 데이터베이스 및 테이블 작성, 삽입, 쿼리, 업데이트 및 삭제와 같은 기본 작업을 지원합니다. 3. 조인 작업 및 하위 쿼리와 같은 고급 기능을 제공합니다. 4. 인덱싱, 쿼리 최적화 및 테이블 파티셔닝을 통해 성능을 향상시킬 수 있습니다. 5. 데이터 보안 및 일관성을 보장하기위한 지원 백업, 복구 및 보안 조치.

See all articles

핫 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尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경