选择显示字体大小

监控oracle数据库的常用shell脚本

前言

这篇文章介绍了dba每天在监控oracle数据库方面的职责,讲述了如何通过shell脚本来完成这些重复的监控工作。本文首先回顾了一些dba常用的unix命令,以及解释了如何通过unix cron来定时执行dba脚本。同时文章还介绍了8个重要的脚本来监控oracle数据库

检查实例的可用性

检查监听器的可用性

检查alert日志文件中的错误信息

在存放log文件的地方满以前清空旧的log文件

分析table和index以获得更好的性能

检查表空间的使用情况

找出无效的对象

监控用户和事务

dba需要的unix基本知识

基本的unix命令

以下是一些常用的unix命令:

ps--显示进程 grep--搜索文件中的某种文本模式 mailx--读取或者发送mail cat--连接文件或者显示它们 cut--选择显示的列 awk--模式匹配语言 df--显示剩余的磁盘空间

以下是dba如何使用这些命令的一些例子:

显示服务器上的可用实例:

$ ps -ef  grep smon

oracle 21832 1 0 feb 24 ? 19:05 ora_smon_oradb1

oracle 898 1 0 feb 15 ? 0:00 ora_smon_oradb2

dliu 25199 19038 0 10:48:57 pts/6 0:00 grep smon

oracle 27798 1 0 05:43:54 ? 0:00 ora_smon_oradb3

oracle 28781 1 0 mar 03 ? 0:01 ora_smon_oradb4、
显示服务器上的可用监听器:

$ ps -ef  grep listener  grep -v grep

(译者注:grep命令应该加上-i参数,即grep -i listener,

该参数的作用是忽略大小写,因为有些时候listener是大写的,这时就会看不到结果)

oracle 23879 1 0 feb 24 ? 33:36 /8.1.7/bin/tnslsnr listener_db1 -inherit

oracle 27939 1 0 05:44:02 ? 0:00 /8.1.7/bin/tnslsnr listener_db2 -inherit

oracle 23536 1 0 feb 12 ? 4:19 /8.1.7/bin/tnslsnr listener_db3 -inherit

oracle 28891 1 0 mar 03 ? 0:01 /8.1.7/bin/tnslsnr listener_db4 -inherit
查看oracle存档目录的文件系统使用情况

$ df -k  grep oraarch

/dev/vx/dsk/proddg/oraarch 71123968 4754872 65850768 7% /u09/oraarch
统计alter.log文件中的行数:

$ cat alert.log  wc -l

2984

列出alert.log文件中的全部oracle错误信息:

$ grep ora- alert.log

ora-00600: internal error code, arguments: [kcrrrfswda.1], [], [], [], [], []

ora-00600: internal error code, arguments: [1881], [25860496], [25857716], []

crontab基本

一个crontab文件中包含有六个字段:

分钟 0-59

小时 0-23

月中的第几天 1-31

月份 1 - 12

星期几 0 - 6, with 0 = sunday

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的环境变量。

检查oracle实例的可用性

oratab文件中列出了服务器上的所有数据库

$ cat /var/opt/oracle/oratab

############################################################

## /var/opt/oracle/oratab##

############################################################

oradb1:/u01/app/oracle/product/8.1.7:y

oradb2:/u01/app/oracle/product/8.1.7:y

oradb3:/u01/app/oracle/product/8.1.7:n

oradb4:/u01/app/oracle/product/8.1.7:y
以下的脚本检查oratab文件中列出的所有数据库,并且找出该数据库的状态(启动还是关闭)

##############################################################

## ckinstance.ksh ## ###################################################################

oratab=/var/opt/oracle/oratab

echo `date`

echo oracle database(s) status `hostname` :

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*
以下是实例可用性的报表:

$ ckinstance.ksh

mon mar 4 10:44:12 pst 2002

oracle database(s) status for dbhost server:

oracle instance - oradb1: up

oracle instance - oradb2: up

oracle instance - oradb3: down

oracle instance - oradb4: up

检查oracle监听器的可用性

以下有一个类似的脚本检查oracle监听器。如果监听器停了,该脚本将会重新启动监听器:

#######################################################################

## cklsnr.sh ##

#######################################################################

#!/bin/ksh

dbalist=primary.dba@company.com,another.dba@company.com;export dbalist

cd /var/opt/oracle

rm -f lsnr.exist

ps -ef grep mylsnr grep -v grep > lsnr.exist

if [ -s lsnr.exist ]

then

echo

else

echo alert mailx -s listener ‘mylsnr‘ on `hostname` is down $dbalist

tns_admin=/var/opt/oracle; export tns_admin

oracle_sid=db1; export oracle_sid

oraenv_ask=no; export oraenv_ask

path=$path:/bin:/usr/local/bin; export path

. oraenv

ld_library_path=${oracle_home}/lib;export ld_library_path

lsnrctl start mylsnr

fi

检查alert日志(ora-xxxxx)

每个脚本所使用的一些环境变量可以放到一个profile中:

####################################################################### 

## oracle.profile ##

#######################################################################

editor=vi;export editor oracle_base=/u01/app/oracle; export

oracle_base oracle_home=$oracle_base/product/8.1.7; export

oracle_home ld_library_path=$oracle_home/lib; export

ld_library_path tns_admin=/var/opt/oracle;export

tns_admin nls_lang=american; export

nls_lang nls_date_format=‘mon dd yyyy hh24:mi:ss‘; export

nls_date_format oratab=/var/opt/oracle/oratab;export

oratab path=$path:$oracle_home:$oracle_home/bin:/usr/ccs/bin:/bin:/usr/bin:/usr/sbin:/

sbin:/usr/openwin/bin:/opt/bin:.; export

path dbalist=primary.dba@company.com,another.dba@company.com;export

dbalist
以下的脚本首先调用oracle.profile来设置全部的环境变量。如果发现任何的oracle错误,该脚本还会给dba发送一个警告的email。

####################################################################

## ckalertlog.sh ##

####################################################################

#!/bin/ksh

.. /etc/oracle.profile

for sid in `cat $oracle_home/sidlist`

do

cd $oracle_base/admin/$sid/bdump

if [ -f alert_${sid}.log ]

then

mv alert_${sid}.log alert_work.log

touch alert_${sid}.log

cat alert_work.log >> alert_${sid}.hist

grep ora- alert_work.log > alert.err

fi

if [ `cat alert.errwc -l` -gt 0 ]

then

mailx -s &#36;{sid} oracle alert errors &#36;dbalist < alert.err

fi

rm -f alert.err

rm -f alert_work.log

done

清除旧的归档文件

以下的脚本将会在log文件达到90%容量的时候清空旧的归档文件:

&#36; df -k  grep arch

filesystem kbytes used avail capacity mounted on

/dev/vx/dsk/proddg/archive 71123968 30210248 40594232 43% /u08/archive

#######################################################################

## clean_arch.ksh ##

#######################################################################

#!/bin/ksh

df -k grep arch > dfk.result

archive_filesystem=`awk -f ‘{ print &#36;6 }‘ dfk.result`

archive_capacity=`awk -f ‘{ print &#36;5 }‘ dfk.result`

if [[ &#36;archive_capacity > 90% ]]

then

echo filesystem &#36;{archive_filesystem} is &#36;{archive_capacity} filled

# try one of the following option depend on your need

find &#36;archive_filesystem -type f -mtime +2 -exec rm -r {} ;

tar

rman

fi


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons