oracle运维脚本_DBA-fashion的博客-程序员秘密

技术标签: Oracle  

 

# 监控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 [email protected] -s "The Listener Shutdown,and Restarted Success"

 

else

 

cat $tempfile | mail [email protected] -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" [email protected] < $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"\

[email protected]

 

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" [email protected] < 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" [email protected]

 

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

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/p6620582/article/details/89319445

智能推荐

Xtool X100 PAD2 Error Code 5 Data Not Exist Solution_abc1294211669的博客-程序员秘密

If your XTOOL X100 Pad2 gives your error ” GetUpdateListEx: Error code= 5. Data doesn’t exist.”, which means your 2-year free update online service is due.Need to pay for new updates subscription expires after 2 years.https://xtooltools.blogspot.com/202

请输入一个字符串s和两个正整数m和n,将字符串s中从第m个字符开始的n个字符复制到字符串s中,再输出字符串。要求用字符指针定义并调用函数strcopy(s,m,n),它的功能是将字符串s中从第m个字_jueduiwudi6的博客-程序员秘密

#include&amp;lt;stdio.h&amp;gt;#include&amp;lt;string.h&amp;gt;void strcopy(char *s,int m,int n){ char *p,*q; for(q=s,p=s+n-1;p&amp;lt;s+m+n-1;p++,q++) *q=*p; *q='\0';}int main(){ char str[20]; int m=3,n...

超详细JDK下载与安装步骤_jdk下载与安装教程_最爱吃鱼罐头的博客-程序员秘密

无论在我们开始学习Java或者入职第一天安装环境,这个你都是必备滴!下面是下载和安装JDK的教程

PHP画像素直线,PHP绘制图像_霍冉的博客-程序员秘密

在 PHP 中绘制图像的函数非常丰富,包括点、线、各种几何图形等可以想象出来的平面图形,都可以通过 PHP 中提供的各种画图函数完成。无论是多么复杂的图形都是在这些最基本的图形基础上进行深化的,只有掌握了最基本图形的绘制方法,才能够绘制出各种具有独特风格的图形。使用 PHP 绘制一个图像通常需要以下 4 个步骤:创建一个背景图像,以后所有操作都是基于此背景;在图像上绘图轮廓或者输入文本;输出最终图...

Linux配置DNS永久生效_linux系统配置长久nds_Iris.Li的博客-程序员秘密

一、背景公司生产环境服务部署在了云上,DNS服务器一共配置了三台(IP地址我虚拟的):第一台DNS服务器是云上一台虚拟机10.0.0.1,不能链接外网第二台DNS服务器部署在线下机房172.16.0.1,可以连接外网第三台DNS服务器部署在线下机房172.16.0.2,可以连接外网云上服务器可以通过VPN连通线下机房,即当需要解析外网域名时,第一台机器会去找第二台/第三台机器二、故障物业停电没通知我们,导致机房空调坏了,温度过高导致线下DNS宕机了,VPN也断掉了。当生产环境访问外网域名时

实现线上高性能接口方案nginx负载tornado后端lua数据_weixin_33834679的博客-程序员秘密

最近实现了一个http的接口 ~ http的方式,访问结果为json nginx做负载,web分离,url转发 ~tornado做数据操作和异步调用lua的接口 ~memcached做session的共享 (为啥不用redis做session,一方面是为了不和redis有kv冲突,服务器的中断冗余,更主要的方面是用redis存储session我没有做出来,郁闷呀。。。。)redis做kv数据库和队...

随便推点

长草问题_长草 c++_haobingqian_的博客-程序员秘密

问题描述  小明有一块空地,他将这块空地划分为 n 行 m 列的小块,每行和每列的长度都为 1。  小明选了其中的一些小块空地,种上了草,其他小块仍然保持是空地。  这些草长得很快,每个月,草都会向外长出一些,如果一个小块种了草,则它将向自己的上、下、左、右四小块空地扩展,这四小块空地都将变为有草的小块。  请告诉小明,k 个月后空地上哪些地方有草。1 2 3 4输入格式  输入的第一行包含两个整数 n, m。  接下来 n 行,每行包含 m 个字母,表示初始的空地状态,字

webuploader 使用实例_abel0130的博客-程序员秘密

log:http://16aspx.com/CodeView/2014/5112/ueditor/third-party/webuploader/webuploader.custom.js.html

手动安装em(redhat 5/oracle 11g)_lixiaohuiok111的博客-程序员秘密

手动安装em(redhat 5/oracle 11g)(2010-07-21 09:35:11) 静默安装完11g后,发现em无法启用,检查后发现还未安装……囧。没办法,只能手动安装了。首先用emca命令清除em的相关配置:1、使用emca -deconfig dbcontrol db命令删除配置2、使用emca -repos drop删除repository清除步骤一

自己笔记本电脑的svn server 用户名密码_杭州丹尼的博客-程序员秘密

danny/123456安装了visual svn之后 就能设置密码了

golang,Python,我们该怎么选_golang还是python_SMILY12138的博客-程序员秘密

在这些编程语言中,Go语言和Python语言都属于高级编程语言,它们在不同领域和场景下有着广泛的应用。本文将从以下几个方面对Go语言和Python进行优缺点对比:速度、并发处理、强类型、学习曲线、库支持、多用途性、社区支持、可移植性、性能调优等。综上所述,Golang和Python都有自己独特的优缺点,并且适用于不同的场景。相反,Python属于解释型语言,因此它的性能调优需要使用一些特殊的技巧和工具。在选择一种编程语言时,不仅要考虑它的优缺点,还要考虑其他因素,如可维护性、团队成员技能、部署效率等。

俄罗斯方块代码 java_俄罗斯方块java代码-java编写俄罗斯方块代码详解分享_靚兔的博客-程序员秘密

俄罗斯方块——java源代码提供import java.awt.*; import java.awt.event.*; //俄罗斯方块类 public class ERS_Block extends Frame{ public static boolean isPlay=false; public .我写俄罗斯方块的时候,添加键盘监听,为什么总是监听不到,但是把frame。我的理解:你应该是在F...

推荐文章

热门文章

相关标签