分享一个之前我用来巡检主机和Oracle的脚本,不过输出结果不是很美观,内容还是可以的…
主机巡检脚本:OSWatcher.sh
ps:这里的第10项,普通用户检查/var/log/messages很可能没有读权限,如有需要巡检此系统日志,建议切换root用户执行此脚本。
#!/bin/bash echo"" ###################################################################### #设置命令的路径,防止命令找不到路径 PATH=$PATH:/usr/sbin/ exportPATH echo"thePATHis:$PATH" ###################################################################### PLATFORM=`/bin/uname` # ###################################################################### #Createlogsubdirectoriesiftheydon'texist ###################################################################### if[!-darchive];then mkdirarchive fi case$PLATFORMin Linux) DF='df-h' MEMINFO='free-m' MPSTAT='mpstat13' TOP='evaltop-b-n1|head-50' VMSTAT='vmstat13' IOSTAT='iostat-d-x-k15' PSELF='ps-elf' BOOTLOG='tail-500/var/log/boot.log' SYSLOG='dmesg' MESSAGE='tail-500/var/log/messages' ;; esac hostn=`hostname` hour=`date+'%m.%d.%y.%H00.dat'` echo"`date`Collect">archive/${hostn}_$hour ###################################################################### #Testfordiscoveryofosutilities.Notifyifnotfound. ###################################################################### echo"" echo"StartingDataCollection..." echo"" case$PLATFORMin Linux) $DF>/dev/null2>&1 if[$?=0];then echo"DFfoundonyoursystem." echo"--1.DF==========================">>archive/${hostn}_$hour $DF>>archive/${hostn}_$hour MEMFOUND=1 else echo"Warning...DFnotfoundonyoursystem." MEMFOUND=0 fi $MEMINFO>/dev/null2>&1 if[$?=0];then echo"meminfofoundonyoursystem." echo"--2.MEMINFO==========================">>archive/${hostn}_$hour $MEMINFO>>archive/${hostn}_$hour MEMFOUND=1 else echo"Warning.../proc/meminfonotfoundonyoursystem." MEMFOUND=0 fi $MPSTAT>/dev/null2>&1 if[$?=0];then echo"MPSTATfoundonyoursystem." echo"--3.MPSTAT==========================">>archive/${hostn}_$hour $MPSTAT>>archive/${hostn}_$hour MEMFOUND=1 else echo"Warning...MPSTATnotfoundonyoursystem." MEMFOUND=0 fi $TOP>/dev/null2>&1 if[$?=0];then echo"TOPfoundonyoursystem." echo"--4.TOP==========================">>archive/${hostn}_$hour $TOP>>archive/${hostn}_$hour MEMFOUND=1 else echo"Warning...TOPnotfoundonyoursystem." MEMFOUND=0 fi $VMSTAT>/dev/null2>&1 if[$?=0];then echo"VMSTATfoundonyoursystem." echo"--5.VMSTAT==========================">>archive/${hostn}_$hour $VMSTAT>>archive/${hostn}_$hour MEMFOUND=1 else echo"Warning...VMSTATnotfoundonyoursystem." MEMFOUND=0 fi $IOSTAT>/dev/null2>&1 if[$?=0];then echo"IOSTATfoundonyoursystem." echo"--6.IOSTAT==========================">>archive/${hostn}_$hour $IOSTAT>>archive/${hostn}_$hour MEMFOUND=1 else echo"Warning...IOSTATnotfoundonyoursystem." MEMFOUND=0 fi $PSELF>/dev/null2>&1 if[$?=0];then echo"PSELFfoundonyoursystem." echo"--7.PSELF==========================">>archive/${hostn}_$hour $PSELF>>archive/${hostn}_$hour MEMFOUND=1 else echo"Warning...PSELFnotfoundonyoursystem." MEMFOUND=0 fi $BOOTLOG>/dev/null2>&1 if[$?=0];then echo"BOOTLOGfoundonyoursystem." echo"--8.BOOTLOG==========================">>archive/${hostn}_$hour $BOOTLOG>>archive/${hostn}_$hour MEMFOUND=1 else echo"Warning...BOOTLOGnotfoundonyoursystem." MEMFOUND=0 fi $SYSLOG>/dev/null2>&1 if[$?=0];then echo"SYSLOGfoundonyoursystem." echo"--9.SYSLOG==========================">>archive/${hostn}_$hour $SYSLOG>>archive/${hostn}_$hour MEMFOUND=1 else echo"Warning...SYSLOGnotfoundonyoursystem." MEMFOUND=0 fi $MESSAGE>/dev/null2>&1 if[$?=0];then echo"MESSAGEfoundonyoursystem." echo"--10.MESSAGE==========================">>archive/${hostn}_$hour $MESSAGE>>archive/${hostn}_$hour MEMFOUND=1 else echo"Warning...MESSAGEnotfoundonyoursystem." MEMFOUND=0 fi ;; esac echo"" echo"Discoverycompleted." echo"Collectioncompleted." echo"TheCollectedresultsavedin./archive/${hostn}_$hour." echo""
Oracle巡检脚本:ORAWatcher.sh
这个是用来巡检Oracle数据库的
#!/usr/bin/ksh echo"" echo"ORAWatcherVersion:1.0.1" echo"" ###################################################################### #数据库连接设置 ###################################################################### sqlstr=$1 test$1 if[$?=1];then echo echo"Info...Youdidnotenteravalueforsqlstr." echo"Info...Usingdefaultvalue=system/system" sqlstr="system/system" fi ###################################################################### #Createlogsubdirectoriesiftheydon'texist ###################################################################### if[!-darchive];then mkdirarchive fi echo"$sqlstr" echo"StartingDataCollection..." echo"" ###################################################################### hostn=`hostname` hour=`date+'%m.%d.%y.%H00.dat'` echo"`date`collect...">archive/${hostn}_oracle_$hour ###################################################################### echo"########################1.数据库版本" echo"select''as\"--1.DatabaseVersion\"fromdual;">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"SelectversionFROMProduct_component_version WhereSUBSTR(PRODUCT,1,6)='Oracle';">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"########################2.控制文件" echo"select''as\"--2.Controlfiles\"fromdual;">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"selectnamefromv\$controlfile;">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"########################3.pfile、spfile" echo"select''as\"--3.Parameterfiles\"fromdual;">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"showparameterpfile;">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"########################4.字符集" echo"select''as\"--4.DBCharacter\"fromdual;">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"colPARAMETERfora20 colvaluefora20 select*fromv\$nls_parameterswhereparameter='NLS_CHARACTERSET';">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"########################5.归档状态" echo"select''as\"--5.DBArchiveMode\"fromdual;">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"setlinesize333 showparameterlog_archive">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"########################6.参数设置" echo"select''as\"--6.ParameterConfig\"fromdual;">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"setlinesize500 setpages2000 showparameter;">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"########################7.回滚段存储位置" echo"select''as\"--7.UndoInfo\"fromdual;">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"setlinesize500 setpages2000 SELECTSEGMENT_NAME,TABLESPACE_NAME,STATUSFROMDBA_ROLLBACK_SEGS;">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"########################8.redolog" echo"select''as\"--8.RedologFiles\"fromdual;">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"setlinesize200 setpages2000 colMEMBERfora50 selecta.member,a.group#,b.thread#,b.bytes,b.members,b.status fromv\$logfilea,v\$logb wherea.group#=b.group#;">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"########################9.查看表空间大小及利用率" echo"select''as\"--9.TablespaceUsage\"fromdual;">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"setlinesize200 setpages2000 colTABLESPACENAMEfora30 selectsubstr(a.TABLESPACE_NAME,1,30)TablespaceName, sum(a.bytes/1024/1024)as\"Totle_size(M)\", sum(nvl(b.free_space1/1024/1024,0))as\"Free_space(M)\", sum(a.bytes/1024/1024)-sum(nvl(b.free_space1/1024/1024,0))as\"Used_space(M)\", round((sum(a.bytes/1024/1024)-sum(nvl(b.free_space1/1024/1024,0))) *100/sum(a.bytes/1024/1024),2)as\"Used_percent%\"fromdba_data_filesa, (selectsum(nvl(bytes,0))free_space1,file_idfromdba_free_space groupbyfile_id)bwherea.file_id=b.file_id(+)groupbya.TABLESPACE_NAME orderby\"Used_percent%\";">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"########################10.数据文件" echo"select''as\"--10.DBFilesInfo\"fromdual;">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"setlinesize300 setpagesize500 colfile_nameformata80 colTABLESPACE_NAMEfora30 selecttablespace_name,file_id,status,bytes/1024/1024FileSizeM,file_namefromdba_data_filesorderbytablespace_name;">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"########################11.查看数据文件的扩展方式" echo"select''as\"--11.DBFilesExtend\"fromdual;">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"setlinesize300 setpagesize500 colFILE_NAMEfora60 colTABLESPACE_NAMEfora30 selectfile_id,file_name,tablespace_name,autoextensible fromdba_data_filesorderbyfile_id;">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"########################12.查看表空间的扩展方式" echo"select''as\"--12.TBSExtend\"fromdual;">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"setlinesize120 selectTABLESPACE_NAME,BLOCK_SIZE,EXTENT_MANAGEMENT,SEGMENT_SPACE_MANAGEMENT fromdba_tablespaces;">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"########################13.临时表空间" echo"select''as\"--13.DBTempTBS\"fromdual;">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"selectFILE_NAME,FILE_ID,TABLESPACE_NAME,BYTES/1024/1024\"BYTES(M)\",USER_BYTES/1024/1024\"USER_BYTES(M)\",statusfromdba_temp_files;">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"########################14.用户默认表空间" echo"select''as\"--14.UserDefaultTBS\"fromdual;">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"setlines200 setpages2000 colusernamefora20 coldefault_tablespacefora30 coltemporary_tablespacefora30 selectusername,default_tablespace,temporary_tablespacefromdba_users;">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"########################15.数据库缓冲区高速缓存命中率" echo"select''as\"--15.DBCacheHit\"fromdual;">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"select1-(phy.value/(cur.value+con.value)) fromv\$sysstatcur,v\$sysstatcon,v\$sysstatphy wherecur.name='dbblockgets' andcon.name='consistentgets' andphy.name='physicalreads';">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"########################16.重写不等待比率" echo"select''as\"--16.Redonowaits\"fromdual;">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"select(req.value*5000)/entries.value fromv\$sysstatreq,v\$sysstatentries wherereq.name='redologspacerequests' andentries.name='redoentires';">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"########################17.库高速缓存命中率" echo"select''as\"--17.LibraryCacheHit\"fromdual;">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"selectnamespace,gethitratiofromv\$librarycache;">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"########################18.数据字典高速缓存Getmisses对gets的目标比例" echo"select''as\"--18.DBDiccache\"fromdual;">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"selectsum(getmisses)/sum(gets)fromv\$rowcache;">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"########################19.用户对像(表、索引、大小)" echo"select''as\"--19.Userobjects\"fromdual;">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"colOWNERfora30 colSEGMENT_NAMEfora33 colPARTITION_NAMEfora22 colSEGMENT_TYPEfora11 colTABLESPACE_NAMEfora30 setlines333 setpages5000 selectOWNER,SEGMENT_NAME,PARTITION_NAME,SEGMENT_TYPE,TABLESPACE_NAME,bytes/1024/1024astable_size_M fromDba_SegmentswhereSEGMENT_TYPE='TABLE'orderbyOWNER;">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"########################20.检查是否有失效的索引" echo"select''as\"--20.CheckinvalidInd\"fromdual;">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"setlines333 setpages50 selectindex_name,owner,status,tablespace_name fromdba_indexes whereownernotin('SYS','SYSTEM') andstatus!='VALID' andtablespace_nameisnotnull unionall selectindex_name,index_ownerowner,status,tablespace_name fromdba_ind_partitions whereindex_ownernotin('SYS','SYSTEM') andstatus<>'USABLE' andtablespace_nameisnotnull; select''asafromdual;">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"########################21.检查数据库会话连接占用率" echo"select''as\"--21.CheckDBSessions\"fromdual;">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"colTOT_SESSIONSfora15 selectcur_sessions,tot_sessions,a.cur_sessions/b.tot_sessions*100\"sessionsused%\" from(selectcount(*)cur_sessionsfromv\$session)a, (selectvaluetot_sessionsfromv\$parameterwherename='sessions')b;">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"########################22.检查数据库会话连接历史最高值" echo"select''as\"--22.HighwaterofSession\"fromdual;">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"selectHIGHWATER fromdba_high_water_mark_statistics wherename='SESSIONS';">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"########################23.检查数据库Job状态" echo"select''as\"--23.CheckStatusofJob\"fromdual;">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour echo"setlinesize333 colwhatfora30 colNEXT_DATEfora30 colINTERVALfora30 selectjob,what,next_date,INTERVAL,BROKEN fromdba_jobs whereBROKEN!='N';">my_sql.sql sqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hour ###################################################################### echo"Collectioncompleted." echo"TheCollectedresultsavedin./archive/${hostn}_oracle_$hour." echo""
脚本使用
1. 创建目录并授权
#mkdir-p/home/oracle/scripts #chown-Roracle.oinstall/home/oracle/scripts/ #chmod-R755/home/oracle/scripts/
2. 两脚本都用oracle用户执行
切换到oracle用户,执行两个脚本:
$./OSWatcher.sh $./ORAWatcher.sh
3. 查看巡检内容
注意:ORAWatcher.sh脚本中数据库的默认连接串是:system/system,如果system密码不是这个,可以这样执行:./ORAWatcher.sh system/password
相关文章
标签:Oracle