Oracle运维脚本

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

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


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 < $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 << EOF

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 < 0.20

/


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 << EOF


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 << EOF


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


















本文转自xiaocao1314051CTO博客,原文链接:http://blog.51cto.com/xiaocao13140/1931685 ,如需转载请自行联系原作者
相关文章
|
25天前
|
运维 Kubernetes Devops
自动化运维:从脚本到工具的演进之旅
在数字化浪潮中,自动化运维成为提升效率、保障系统稳定的关键。本文将探索自动化运维的发展脉络,从基础的Shell脚本编写到复杂的自动化工具应用,揭示这一技术变革如何重塑IT运维领域。我们将通过实际案例,展示自动化运维在简化工作流程、提高响应速度和降低人为错误中的重要作用。无论你是初学者还是资深专家,这篇文章都将为你提供宝贵的洞见和实用的技巧。
|
1月前
|
运维 Devops
自动化运维:从脚本到DevOps的进化之旅
在数字化时代,自动化运维不仅是提高生产效率的关键,更是企业竞争力的象征。本文将带领读者穿越自动化运维的发展历程,从最初的脚本编写到现代DevOps文化的形成,揭示这一演变如何重塑IT行业的工作模式。通过具体案例,我们将展示自动化工具和实践如何简化复杂任务,优化流程,并促进团队协作。你将发现,自动化运维不仅关乎技术的进步,更体现了人、流程和技术三者之间协同增效的深层逻辑。
|
1月前
|
机器学习/深度学习 人工智能 运维
自动化运维之路:从脚本到工具的演进
在IT运维领域,效率和准确性是衡量工作成效的关键指标。随着技术的发展,自动化运维逐渐成为提升这两个指标的重要手段。本文将带领读者了解自动化运维的演变历程,从最初的简单脚本编写到现今复杂的自动化工具应用,展示如何通过技术提升运维效率。文章不仅介绍理论和实践案例,还提供了代码示例,帮助读者理解自动化运维的实际应用场景。
|
1月前
|
运维 监控 网络安全
自动化运维的崛起:如何利用Python脚本简化日常任务
【10月更文挑战第43天】在数字化时代的浪潮中,运维工作已从繁琐的手工操作转变为高效的自动化流程。本文将引导您了解如何运用Python编写脚本,以实现日常运维任务的自动化,从而提升工作效率和准确性。我们将通过一个实际案例,展示如何使用Python来自动部署应用、监控服务器状态并生成报告。文章不仅适合运维新手入门,也能为有经验的运维工程师提供新的视角和灵感。
|
1月前
|
运维 监控 Python
自动化运维:使用Python脚本简化日常任务
【10月更文挑战第36天】在数字化时代,运维工作的效率和准确性成为企业竞争力的关键。本文将介绍如何通过编写Python脚本来自动化日常的运维任务,不仅提高工作效率,还能降低人为错误的风险。从基础的文件操作到进阶的网络管理,我们将一步步展示Python在自动化运维中的应用,并分享实用的代码示例,帮助读者快速掌握自动化运维的核心技能。
92 3
|
1月前
|
缓存 运维 NoSQL
python常见运维脚本_Python运维常用脚本
python常见运维脚本_Python运维常用脚本
32 3
|
1月前
|
运维 监控 应用服务中间件
自动化运维:如何利用Python脚本提升工作效率
【10月更文挑战第30天】在快节奏的IT行业中,自动化运维已成为提升工作效率和减少人为错误的关键技术。本文将介绍如何使用Python编写简单的自动化脚本,以实现日常运维任务的自动化。通过实际案例,我们将展示如何用Python脚本简化服务器管理、批量配置更新以及监控系统性能等任务。文章不仅提供代码示例,还将深入探讨自动化运维背后的理念,帮助读者理解并应用这一技术来优化他们的工作流程。
|
1月前
|
运维 监控 Linux
自动化运维:如何利用Python脚本优化日常任务##
【10月更文挑战第29天】在现代IT运维中,自动化已成为提升效率、减少人为错误的关键技术。本文将介绍如何通过Python脚本来简化和自动化日常的运维任务,从而让运维人员能够专注于更高层次的工作。从备份管理到系统监控,再到日志分析,我们将一步步展示如何编写实用的Python脚本来处理这些任务。 ##
|
1月前
|
运维 Prometheus 监控
自动化运维之路:从脚本到DevOps
【10月更文挑战第25天】在数字化时代的浪潮中,运维不再是简单的服务器管理,而是成为了企业竞争力的核心。本文将带你走进自动化运维的世界,探索如何通过技术手段提升效率和稳定性,以及实现快速响应市场的能力。我们将一起学习如何从基础的脚本编写进化到全面的DevOps实践,包括工具的选择、流程的优化以及文化的建设。无论你是运维新手还是资深专家,这篇文章都将为你提供有价值的见解和实用的技巧。
40 3
|
2月前
|
人工智能 运维 Devops
自动化运维之路:从脚本到DevOps的转变
【10月更文挑战第7天】在这篇文章中,我们将一起探索自动化运维的演变历程,从最初的简单脚本到现代的DevOps实践。我们将深入理解自动化如何改变了运维工作的本质,并讨论实现这一转变的关键技术和策略。文章将不包含代码示例,而是聚焦于理念、工具和方法论的介绍,旨在为读者提供一个全面的自动化运维框架视图。

推荐镜像

更多