本文介绍了8个常用的监控数据shell脚本。首先回顾了一些DBA常用的Unix命令,以及解释了如何通过Unix Cron来定时执行DBA脚本。网上也有好多类似的文章,但基本上都不能正常运行,花点时间重新整理了下,以后就能直接使用了。
二.DBA需要的Unix基本知识
基本的UNIX命令,以下是一些常用的Unix命令:
ps--显示进程
grep--搜索文件中的某种文本模式
mailx--读取或者发送mail
cat--连接文件或者显示它们
cut--选择显示的列
awk--模式匹配语言
df--显示剩余的磁盘空间
以下是DBA如何使用这些命令的一些例子:
1. 显示服务器上的可用实例:
$ ps -ef| grep smon
oracle 22086 1 0 02:32:24 0:04 ora_smon_PPRD10
oracle 5215 28972 0 08:10:19 pts/4 0:00 grep smon
2. 显示服务器上的可用监听器:
$ ps -ef grep listener grep -v grep
(grep命令应该加上-i参数,即grep -i listener,该参数的作用是忽略大小写,因为有些时候listener是大写的,这时就会看不到结果)
$ ps -ef|grep -i listener
oracle 9655 1 0 Mar 12 0:01 /data/app/oracle/9.2.0/bin/tnslsnr LISTENER -inherit
oracle 22610 1 0 02:45:02 0:02 /data/app/oracle/10.2.0/bin/tnslsnr LISTENER -inherit
oracle 5268 28972 0 08:13:02 pts/4 0:00 grep -i listener
3. 查看Oracle存档目录的文件系统使用情况
$ df -k | grep /data
/dev/md/dsk/d50 104977675 88610542 15317357 86% /data
4. 统计alter.log文件中的行数:
$ cat alert_PPRD10.log | wc -l
13124
$ more alert_PPRD10.log | wc -l
13124
5. 列出alert.log文件中的全部Oracle错误信息:
$ grep ORA-* alert.log
ORA-00600: internal error code, arguments: [kcrrrfswda.1], [], [], [], [], []
ORA-00600: internal error code, arguments: [1881], [25860496], [25857716], []
6. CRONTAB基本
一个crontab文件中包含有六个字段:
分钟 0-59
小时 0-23
月中的第几天 1-31
月份 1 - 12
星期几 0 - 6, with 0 = Sunday
7. Unix命令或者Shell脚本
要编辑一个crontab文件,输入: Crontab -e
要查看一个crontab文件,输入: Crontab -l
0 4 * * 5 /dba/admin/analyze_table.ksh
30 3 * * 3,6 /dba/admin/hotbackup.ksh /dev/null 2>&1
在上面的例子中,第一行显示了一个分析表的脚本在每个星期5的4:00am运行。第二行显示了一个执行热备份的脚本在每个周三和周六的3:00a.m.运行。
三.监控数据库的常用Shell脚本
以下提供的8个shell脚本覆盖了DBA每日监控工作的90%,你可能还需要修改UNIX的环境变量。
1. 检查Oracle实例的可用性
oratab文件中列出了服务器上的所有数据库
$ cat /var/opt/oracle/oratab
#
# This file is used by ORACLE utilities. It is created by root.sh
# and updated by the Database Configuration Assistant when creating
# a database.
# A colon, ':', is used as the field terminator. A new line terminates
# the entry. Lines beginning with a pound sign, '#', are comments.
#
# Entries are of the form:
# $ORACLE_SID:$ORACLE_HOME:
#
# The first and second fields are the system identifier and home
# directory of the database respectively. The third filed indicates
# to the dbstart utility that the database should , "Y", or should not,
# "N", be brought up at system boot time.
#
# Multiple entries with the same $ORACLE_SID are not allowed.
#
#
# *:/data/app/oracle/9.2.0:N
TRNG:/data/app/oracle/9.2.0:Y
*:/data/app/oracle/9.2.0:N
PPRD:/data/app/oracle/10.2.0:Y
PPRD10:/data/app/oracle/10.2.0:N
以下的脚本检查oratab文件中列出的所有数据库,并且找出该数据库的状态(启动还是关闭)
###################################################################
## ckinstance.ksh ##
###################################################################
ORATAB=/var/opt/oracle/oratab
echo "`date` "
echo "Oracle Database(s) Status `hostname` :\n"
db=`egrep -i ":Y|:N" $ORATAB | cut -d":" -f1 | grep -v "\#" | grep -v "\*"`
pslist="`ps -ef | grep pmon`"
for i in $db ; do
echo "$pslist" | grep "ora_pmon_$i" > /dev/null 2>$1
if (( $ )); then
echo "Oracle Instance - $i: Down"
else
echo "Oracle Instance - $i: Up"
fi
done
使用以下的命令来确认该脚本是可以执行的:
$ chmod 744 ckinstance.ksh
$ ls -l ckinstance.ksh
-rwxr--r-- 1 oracle dba 657 Mar 5 22:59 ckinstance.ksh
以下是实例可用性的报表:
$ sh ckinstance.ksh
Wed May 13 12:51:20 PDT 2009
Oracle Database(s) Status gambels :
Oracle Instance - PPRD: Up
Oracle Instance - PPRD10: Up
3. 检查Alert