仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 787|回复: 7
打印 上一主题 下一主题

[shell编程] 来一发监控Oracle数据库的经常使用shell剧本

[复制链接]
莫相离 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-14 20:14:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的好朋友们!媒介

  这篇文章先容了DBA天天在监控Oracle数据库方面的职责,报告了怎样经由过程shell剧本来完成这些反复的监控事情。本文起首回忆了一些DBA经常使用的Unix下令,和注释了怎样经由过程UnixCron来准时实行DBA剧本。同时文章还先容了8个主要的剧本来监控Oracle数据库:

   反省实例的可用性
 
   反省监听器的可用性

   反省alert日记文件中的毛病信息
 
   在寄存log文件的中央满之前清空旧的log文件

   剖析table和index以取得更好的功能

   反省表空间的利用情形

   找出有效的工具

   监控用户和事件

  DBA必要的Unix基础常识

  基础的UNIX下令

  以下是一些经常使用的Unix下令:

   ps--显现历程
   grep--搜刮文件中的某种文本形式
   mailx--读取大概发送mail
   cat--毗连文件大概显现它们
   cut--选择显现的列
   awk--形式婚配言语
   df--显现残剩的磁盘空间

  以下是DBA怎样利用这些下令的一些例子:

  显现办事器上的可用实例:

$ps-ef|grepsmon
oracle2183210Feb24?19:05ora_smon_oradb1
oracle89810Feb15?0:00ora_smon_oradb2
dliu2519919038010:48:57pts/60:00grepsmon
oracle277981005:43:54?0:00ora_smon_oradb3
oracle2878110Mar03?0:01ora_smon_oradb4、
  显现办事器上的可用监听器:

$ps-ef|greplistener|grep-vgrep
(译者注:grep下令应当加上-i参数,即grep-ilistener,该参数的感化是疏忽巨细写,由于有些时分listener是年夜写的,这时候就会看不到了局)
oracle2387910Feb24?33:36/8.1.7/bin/tnslsnrlistener_db1-inherit
oracle279391005:44:02?0:00/8.1.7/bin/tnslsnrlistener_db2-inherit
oracle2353610Feb12?4:19/8.1.7/bin/tnslsnrlistener_db3-inherit
oracle2889110Mar03?0:01/8.1.7/bin/tnslsnrlistener_db4-inherit
  检察Oracle存档目次的文件体系利用情形

$df-k|greporaarch
/dev/vx/dsk/proddg/oraarch711239684754872658507687%/u09/oraarch
  统计alter.log文件中的行数:

$catalert.log|wc-l
2984

  列出alert.log文件中的全体Oracle毛病信息:

$grepORA-alert.log
ORA-00600:internalerrorcode,arguments:[kcrrrfswda.1],[],[],[],[],[]
ORA-00600:internalerrorcode,arguments:[1881],[25860496],[25857716],[]
  CRONTAB基础

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

  分钟0-59

  小时0-23

  月中的第几天1-31

  月份1-12

  礼拜几0-6,with0=Sunday

  Unix下令大概Shell剧本

  要编纂一个crontab文件,输出:

  Crontab-e

  要检察一个crontab文件,输出:

Crontab-l
04**5/dba/admin/analyze_table.ksh
303**3,6/dba/admin/hotbackup.ksh/dev/null2>&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"OracleDatabase(s)Status`hostname`:
"

db=`egrep-i":Y|:N"$ORATAB|cut-d":"-f1|grep-v"#"|grep-v"*"`
pslist="`ps-ef|greppmon`"
foriin$db;do
echo"$pslist"|grep"ora_pmon_$i">/dev/null2>$1
if(($?));then
echo"OracleInstance-$i:Down"
else
echo"OracleInstance-$i:Up"
fi
done

  利用以下的下令来确认该剧本是能够实行的:

$chmod744ckinstance.ksh
$ls-lckinstance.ksh
-rwxr--r--1oracledba657Mar522:59ckinstance.ksh*
  以下是实例可用性的报表:

$ckinstance.ksh
MonMar410:44:12PST2002
OracleDatabase(s)StatusforDBHOSTserver:
OracleInstance-oradb1:Up
OracleInstance-oradb2:Up
OracleInstance-oradb3:Down
OracleInstance-oradb4:Up
  反省Oracle监听器的可用性

  以下有一个相似的剧本反省Oracle监听器。假如监听器停了,该剧本将会从头启动监听器:

#######################################################################
##cklsnr.sh##
#######################################################################
#!/bin/ksh
DBALIST="primary.dba@company.com,another.dba@company.com";exportDBALIST
cd/var/opt/oracle
rm-flsnr.exist
ps-ef|grepmylsnr|grep-vgrep>lsnr.exist
if[-slsnr.exist]
then
echo
else
echo"Alert"|mailx-s"Listenermylsnron`hostname`isdown"$DBALIST
TNS_ADMIN=/var/opt/oracle;exportTNS_ADMIN
ORACLE_SID=db1;exportORACLE_SID
ORAENV_ASK=NO;exportORAENV_ASK
PATH=$PATH:/bin:/usr/local/bin;exportPATH
.oraenv
LD_LIBRARY_PATH=${ORACLE_HOME}/lib;exportLD_LIBRARY_PATH
lsnrctlstartmylsnr
fi

  反省Alert日记(ORA-XXXXX)

  每一个剧本所利用的一些情况变量能够放到一个profile中:

#######################################################################
##oracle.profile##
#######################################################################
EDITOR=vi;exportEDITORORACLE_BASE=/u01/app/oracle;export
ORACLE_BASEORACLE_HOME=$ORACLE_BASE/product/8.1.7;export
ORACLE_HOMELD_LIBRARY_PATH=$ORACLE_HOME/lib;export
LD_LIBRARY_PATHTNS_ADMIN=/var/opt/oracle;export
TNS_ADMINNLS_LANG=american;export
NLS_LANGNLS_DATE_FORMAT=MonDDYYYYHH24:MI:SS;export
NLS_DATE_FORMATORATAB=/var/opt/oracle/oratab;export
ORATABPATH=$PATH:$ORACLE_HOME:$ORACLE_HOME/bin:/usr/ccs/bin:/bin:/usr/bin:/usr/sbin:/
sbin:/usr/openwin/bin:/opt/bin:.;export
PATHDBALIST="primary.dba@company.com,another.dba@company.com";export
DBALIST
  以下的剧本起首挪用oracle.profile来设置全体的情况变量。假如发明任何的Oracle毛病,该剧本还会给DBA发送一个告诫的email。

####################################################################
##ckalertlog.sh##
####################################################################
#!/bin/ksh
../etc/oracle.profile
forSIDin`cat$ORACLE_HOME/sidlist`
do
cd$ORACLE_BASE/admin/$SID/bdump
if[-falert_${SID}.log]
then
mvalert_${SID}.logalert_work.log
touchalert_${SID}.log
catalert_work.log>>alert_${SID}.hist
grepORA-alert_work.log>alert.err
fi
if[`catalert.err|wc-l`-gt0]
then
mailx-s"${SID}ORACLEALERTERRORS"$DBALIST<alert.err
fi
rm-falert.err
rm-falert_work.log
done

  扫除旧的回档文件

  以下的剧本将会在log文件到达90%容量的时分清空旧的回档文件:

$df-k|greparch
FilesystemkbytesusedavailcapacityMountedon
/dev/vx/dsk/proddg/archive71123968302102484059423243%/u08/archive

#######################################################################
##clean_arch.ksh##
#######################################################################
#!/bin/ksh
df-k|greparch>dfk.result
archive_filesystem=`awk-F""{print$6}dfk.result`
archive_capacity=`awk-F""{print$5}dfk.result`

if[[$archive_capacity>90%]]
then
echo"Filesystem${archive_filesystem}is${archive_capacity}filled"
#tryoneofthefollowingoptiondependonyourneed
find$archive_filesystem-typef-mtime+2-execrm-r{};
tar
rman
fi

剖析表和索引(以失掉更好的功能)

  以下我将展现假如传送参数到一个剧本中:

####################################################################
##analyze_table.sh##
####################################################################
#!/bin/ksh
#inputparameter:1:password#2:SID
if(($#<1))thenecho"Pleaseenteroracleuserpasswordasthefirstparameter!"exit0
fi
if(($#<2))thenecho"Pleaseenterinstancenameasthesecondparameter!"exit0
fi

  要传进参数以实行该剧本,输出:

$analyze_table.shmanageroradb1
  剧本的第一局部发生了一个analyze.sql文件,内里包括了剖析表用的语句。剧本的第二局部剖析全体的表:

#####################################################################
##analyze_table.sh##
#####################################################################
sqlplus-s<oracle/$1@$2
setheadingoff
setfeedoff
setpagesize200
setlinesize100
spoolanalyze_table.sql
selectANALYZETABLE||owner||.||segment_name||
ESTIMATESTATISTICSSAMPLE10PERCENT;
fromdba_segments
wheresegment_type=TABLE
andownernotin(SYS,SYSTEM);
spooloff
exit
!
sqlplus-s<oracle/$1@$2
@./analyze_table.sql
exit
!
  以下是analyze.sql的一个例子:

$catanalyze.sql
ANALYZETABLEHIRWIN.JANUSAGE_SUMMARYESTIMATESTATISTICSSAMPLE10PERCENT;
ANALYZETABLEHIRWIN.JANUSER_PROFILEESTIMATESTATISTICSSAMPLE10PERCENT;
ANALYZETABLEAPPSSYS.HIST_SYSTEM_ACTIVITYESTIMATESTATISTICSSAMPLE10PERCENT;
ANALYZETABLEHTOMEH.QUEST_IM_VERSIONESTIMATESTATISTICSSAMPLE10PERCENT;
ANALYZETABLEJSTENZEL.HIST_SYS_ACT_0615ESTIMATESTATISTICSSAMPLE10PERCENT;
ANALYZETABLEJSTENZEL.HISTORY_SYSTEM_0614ESTIMATESTATISTICSSAMPLE10PERCENT;
ANALYZETABLEJSTENZEL.CALC_SUMMARY3ESTIMATESTATISTICSSAMPLE10PERCENT;
ANALYZETABLEIMON.QUEST_IM_LOCK_TREEESTIMATESTATISTICSSAMPLE10PERCENT;
ANALYZETABLEAPPSSYS.HIST_USAGE_SUMMARYESTIMATESTATISTICSSAMPLE10PERCENT;
ANALYZETABLEPATROL.P$LOCKCONFLICTTXESTIMATESTATISTICSSAMPLE10PERCENT;

  反省表空间的利用

  以下的剧本检测表空间的利用。假如表空间只剩下10%,它将会发送一个告诫email。

#####################################################################
##ck_tbsp.sh##
#####################################################################
#!/bin/ksh
sqlplus-s<oracle/$1@$2
setfeedoff
setlinesize100
setpagesize200
spooltablespace.alert
SELECTF.TABLESPACE_NAME,
TO_CHAR((T.TOTAL_SPACE-F.FREE_SPACE),999,999)"USED(MB)",
TO_CHAR(F.FREE_SPACE,999,999)"FREE(MB)",
TO_CHAR(T.TOTAL_SPACE,999,999)"TOTAL(MB)",
TO_CHAR((ROUND((F.FREE_SPACE/T.TOTAL_SPACE)*100)),999)||%PER_FREE
FROM(
SELECTTABLESPACE_NAME,
ROUND(SUM(BLOCKS*(SELECTVALUE/1024
FROMV$PARAMETER
WHERENAME=db_block_size)/1024)
)FREE_SPACE
FROMDBA_FREE_SPACE
GROUPBYTABLESPACE_NAME
)F,
(
SELECTTABLESPACE_NAME,
ROUND(SUM(BYTES/1048576))TOTAL_SPACE
FROMDBA_DATA_FILES
GROUPBYTABLESPACE_NAME
)T
WHEREF.TABLESPACE_NAME=T.TABLESPACE_NAME
AND(ROUND((F.FREE_SPACE/T.TOTAL_SPACE)*100))<10;
spooloff
exit
!
if[`cattablespace.alert|wc-l`-gt0]
then
cattablespace.alert-ltablespace.alert>tablespace.tmp
mailx-s"TABLESPACEALERTfor${2}"$DBALIST<tablespace.tmp
fi

  告诫email输入的例子以下:

TABLESPACE_NAMEUSED(MB)FREE(MB)TOTAL(MB)PER_FREE
----------------------------------------------------------------------------
SYSTEM2,0472032,2509%
STBS01302253278%
STBS02241112524%
STBS03233192528%
  查找出有效的数据库工具

  以下查找出有效的数据库工具:

#######################################################################invalid_object_alert.sh########################################################################!/bin/ksh./etc/oracle.profile
sqlplus-s<oracle/$1@$2
setfeedoff
setheadingoffcolumnobject_nameformata30
spoolinvalid_object.alert
SELECTOWNER,OBJECT_NAME,OBJECT_TYPE,STATUSFROMDBA_OBJECTSWHERESTATUS=INVALIDORDERBYOWNER,OBJECT_TYPE,OBJECT_NAME;
spooloff
exit!if[`catinvalid_object.alert|wc-l`-gt0]then
mailx-s"INVALIDOBJECTSfor${2}"$DBALIST<invalid_object.alert
fi$catinvalid_object.alert
OWNEROBJECT_NAMEOBJECT_TYPESTATUS
----------------------------------------------------------------------
HTOMEHDBMS_SHARED_POOLPACKAGEBODYINVALID
HTOMEHX_$KCBFWAITVIEWINVALID
IMONIW_MONPACKAGEINVALID
IMONIW_MONPACKAGEBODYINVALID
IMONIW_ARCHIVED_LOGVIEWINVALID
IMONIW_FILESTATVIEWINVALID
IMONIW_SQL_FULL_TEXTVIEWINVALID
IMONIW_SYSTEM_EVENT1VIEWINVALID
IMONIW_SYSTEM_EVENT_CATVIEWINVALIDLBAILEYCHECK_TABLESPACE_USAGEPROCEDUREINVALID
PATROLP$AUTO_EXTEND_TBSPVIEWINVALID
SYSDBMS_CRYPTO_TOOLKITPACKAGEINVALID
SYSDBMS_CRYPTO_TOOLKITPACKAGEBODYINVALID
SYSUPGRADE_SYSTEM_TYPES_TO_816PROCEDUREINVALID
SYSAQ$_DEQUEUE_HISTORY_TTYPEINVALID
SYSHS_CLASS_CAPSVIEWINVALIDSYSHS_CLASS_DDVIEWINVALID
  监督用户和事件(逝世锁等)

  以下的剧本在逝世锁产生的时分发送一个告诫e-mail:

###################################################################
##deadlock_alert.sh##
###################################################################
#!/bin/ksh
../etc/oracle.profile
sqlplus-s<oracle/$1@$2
setfeedoff
setheadingoff
spooldeadlock.alert
SELECTSID,DECODE(BLOCK,0,NO,YES)BLOCKER,
DECODE(REQUEST,0,NO,YES)WAITER
FROMV$LOCK
WHEREREQUEST>0ORBLOCK>0
ORDERBYblockDESC;
spooloff
exit
!
if[`catdeadlock.alert|wc-l`-gt0]
then
mailx-s"DEADLOCKALERTfor${2}"$DBALIST<deadlock.alert
fi

  结论

0,20,407-17**1-5/dba/scripts/ckinstance.sh>/dev/null2>&1
0,20,407-17**1-5/dba/scripts/cklsnr.sh>/dev/null2>&1
0,20,407-17**1-5/dba/scripts/ckalertlog.sh>/dev/null2>&1
30***0-6/dba/scripts/clean_arch.sh>/dev/null2>&1
*5**1,3/dba/scripts/analyze_table.sh>/dev/null2>&1
*5**0-6/dba/scripts/ck_tbsp.sh>/dev/null2>&1
*5**0-6/dba/scripts/invalid_object_alert.sh>/dev/null2>&1
0,20,407-17**1-5/dba/scripts/deadlock_alert.sh>/dev/null2>&1
  经由过程以上的剧本,可年夜年夜加重你的事情。你可使用这些是来做更主要的事情,比方功能调剂。
如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的好朋友们!
因胸联盟 该用户已被删除
沙发
发表于 2015-1-24 15:46:25 | 只看该作者
把这个问题放在其他Linux社区请求帮助也是一种选择。如果Linux得不到答案,请不要以为我们觉得无法帮助你。有时只是看到你问题的人不知道答案罢了。这时换一个社区是不错的选择。
爱飞 该用户已被删除
板凳
发表于 2015-2-2 11:12:41 | 只看该作者
在系统检测不到与Linux兼容的显卡,那么此次安装就可能不支持图形化界面安装,而只能用文本模式安装等等。
愤怒的大鸟 该用户已被删除
地板
发表于 2015-2-7 20:15:34 | 只看该作者
得到到草率的回答或者根本得不到任何Linux答案。越表现出在寻求帮助前为解决问题付出的努力,你越能得到实质性的帮助。
深爱那片海 该用户已被删除
5#
发表于 2015-2-23 19:30:37 | 只看该作者
眼看这个学期的Linux课程已经告一段落了,我觉得有必要写一遍心得体会来总结一下这学期对着门课程的学习。
只想知道 该用户已被删除
6#
发表于 2015-3-7 11:55:13 | 只看该作者
直到学习Linux这门课以后,我才知道,原来我错了。?
兰色精灵 该用户已被删除
7#
发表于 2015-3-15 07:36:57 | 只看该作者
应对Linux的发展历史和特点有所了解,Linux是抢占式多任务多用户操作系统,Linux最大的优点在于其作为服务器的强大功能,同时支持多种应用程序及开发工具。
活着的死人 该用户已被删除
8#
发表于 2015-3-22 00:11:28 | 只看该作者
选择交流平台,如QQ群,网站论坛等。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 01:27

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表