如何分析两个主机和Oracle数据库巡检脚本
如何分析两个主机和Oracle数据库巡检脚本,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
分享一个之前我用来巡检主机和Oracle的脚本,不过输出结果不是很美观,内容还是可以的...
主机巡检脚本:OSWatcher.sh
ps:这里的第10项,普通用户检查/var/log/messages很可能没有读权限,如有需要巡检此系统日志,建议切换root用户执行此脚本。
#!/bin/bashecho""#######################################################################设置命令的路径,防止命令找不到路径PATH=$PATH:/usr/sbin/exportPATHecho"thePATHis:$PATH"######################################################################PLATFORM=`/bin/uname`########################################################################Createlogsubdirectoriesiftheydon'texist######################################################################if[!-darchive];thenmkdirarchiveficase$PLATFORMinLinux)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';;esachostn=`hostname`hour=`date+'%m.%d.%y.%H00.dat'`echo"`date`Collect">archive/${hostn}_$hour#######################################################################Testfordiscoveryofosutilities.Notifyifnotfound.######################################################################echo""echo"StartingDataCollection..."echo""case$PLATFORMinLinux)$DF>/dev/null2>&1if[$?=0];thenecho"DFfoundonyoursystem."echo"--1.DF==========================">>archive/${hostn}_$hour$DF>>archive/${hostn}_$hourMEMFOUND=1elseecho"Warning...DFnotfoundonyoursystem."MEMFOUND=0fi$MEMINFO>/dev/null2>&1if[$?=0];thenecho"meminfofoundonyoursystem."echo"--2.MEMINFO==========================">>archive/${hostn}_$hour$MEMINFO>>archive/${hostn}_$hourMEMFOUND=1elseecho"Warning.../proc/meminfonotfoundonyoursystem."MEMFOUND=0fi$MPSTAT>/dev/null2>&1if[$?=0];thenecho"MPSTATfoundonyoursystem."echo"--3.MPSTAT==========================">>archive/${hostn}_$hour$MPSTAT>>archive/${hostn}_$hourMEMFOUND=1elseecho"Warning...MPSTATnotfoundonyoursystem."MEMFOUND=0fi$TOP>/dev/null2>&1if[$?=0];thenecho"TOPfoundonyoursystem."echo"--4.TOP==========================">>archive/${hostn}_$hour$TOP>>archive/${hostn}_$hourMEMFOUND=1elseecho"Warning...TOPnotfoundonyoursystem."MEMFOUND=0fi$VMSTAT>/dev/null2>&1if[$?=0];thenecho"VMSTATfoundonyoursystem."echo"--5.VMSTAT==========================">>archive/${hostn}_$hour$VMSTAT>>archive/${hostn}_$hourMEMFOUND=1elseecho"Warning...VMSTATnotfoundonyoursystem."MEMFOUND=0fi$IOSTAT>/dev/null2>&1if[$?=0];thenecho"IOSTATfoundonyoursystem."echo"--6.IOSTAT==========================">>archive/${hostn}_$hour$IOSTAT>>archive/${hostn}_$hourMEMFOUND=1elseecho"Warning...IOSTATnotfoundonyoursystem."MEMFOUND=0fi$PSELF>/dev/null2>&1if[$?=0];thenecho"PSELFfoundonyoursystem."echo"--7.PSELF==========================">>archive/${hostn}_$hour$PSELF>>archive/${hostn}_$hourMEMFOUND=1elseecho"Warning...PSELFnotfoundonyoursystem."MEMFOUND=0fi$BOOTLOG>/dev/null2>&1if[$?=0];thenecho"BOOTLOGfoundonyoursystem."echo"--8.BOOTLOG==========================">>archive/${hostn}_$hour$BOOTLOG>>archive/${hostn}_$hourMEMFOUND=1elseecho"Warning...BOOTLOGnotfoundonyoursystem."MEMFOUND=0fi$SYSLOG>/dev/null2>&1if[$?=0];thenecho"SYSLOGfoundonyoursystem."echo"--9.SYSLOG==========================">>archive/${hostn}_$hour$SYSLOG>>archive/${hostn}_$hourMEMFOUND=1elseecho"Warning...SYSLOGnotfoundonyoursystem."MEMFOUND=0fi$MESSAGE>/dev/null2>&1if[$?=0];thenecho"MESSAGEfoundonyoursystem."echo"--10.MESSAGE==========================">>archive/${hostn}_$hour$MESSAGE>>archive/${hostn}_$hourMEMFOUND=1elseecho"Warning...MESSAGEnotfoundonyoursystem."MEMFOUND=0fi;;esacecho""echo"Discoverycompleted."echo"Collectioncompleted."echo"TheCollectedresultsavedin./archive/${hostn}_$hour."echo""
Oracle巡检脚本:ORAWatcher.sh
这个是用来巡检Oracle数据库的
#!/usr/bin/kshecho""echo"ORAWatcherVersion:1.0.1"echo""#######################################################################数据库连接设置######################################################################sqlstr=$1test$1if[$?=1];thenechoecho"Info...Youdidnotenteravalueforsqlstr."echo"Info...Usingdefaultvalue=system/system"sqlstr="system/system"fi#######################################################################Createlogsubdirectoriesiftheydon'texist######################################################################if[!-darchive];thenmkdirarchivefiecho"$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.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"SelectversionFROMProduct_component_versionWhereSUBSTR(PRODUCT,1,6)='Oracle';">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"########################2.控制文件"echo"select''as\"--2.Controlfiles\"fromdual;">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"selectnamefromv\$controlfile;">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"########################3.pfile、spfile"echo"select''as\"--3.Parameterfiles\"fromdual;">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"showparameterpfile;">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"########################4.字符集"echo"select''as\"--4.DBCharacter\"fromdual;">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"colPARAMETERfora20colvaluefora20select*fromv\$nls_parameterswhereparameter='NLS_CHARACTERSET';">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"########################5.归档状态"echo"select''as\"--5.DBArchiveMode\"fromdual;">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"setlinesize333showparameterlog_archive">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"########################6.参数设置"echo"select''as\"--6.ParameterConfig\"fromdual;">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"setlinesize500setpages2000showparameter;">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"########################7.回滚段存储位置"echo"select''as\"--7.UndoInfo\"fromdual;">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"setlinesize500setpages2000SELECTSEGMENT_NAME,TABLESPACE_NAME,STATUSFROMDBA_ROLLBACK_SEGS;">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"########################8.redolog"echo"select''as\"--8.RedologFiles\"fromdual;">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"setlinesize200setpages2000colMEMBERfora50selecta.member,a.group#,b.thread#,b.bytes,b.members,b.statusfromv\$logfilea,v\$logbwherea.group#=b.group#;">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"########################9.查看表空间大小及利用率"echo"select''as\"--9.TablespaceUsage\"fromdual;">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"setlinesize200setpages2000colTABLESPACENAMEfora30selectsubstr(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_spacegroupbyfile_id)bwherea.file_id=b.file_id(+)groupbya.TABLESPACE_NAMEorderby\"Used_percent%\";">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"########################10.数据文件"echo"select''as\"--10.DBFilesInfo\"fromdual;">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"setlinesize300setpagesize500colfile_nameformata80colTABLESPACE_NAMEfora30selecttablespace_name,file_id,status,bytes/1024/1024FileSizeM,file_namefromdba_data_filesorderbytablespace_name;">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"########################11.查看数据文件的扩展方式"echo"select''as\"--11.DBFilesExtend\"fromdual;">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"setlinesize300setpagesize500colFILE_NAMEfora60colTABLESPACE_NAMEfora30selectfile_id,file_name,tablespace_name,autoextensiblefromdba_data_filesorderbyfile_id;">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"########################12.查看表空间的扩展方式"echo"select''as\"--12.TBSExtend\"fromdual;">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"setlinesize120selectTABLESPACE_NAME,BLOCK_SIZE,EXTENT_MANAGEMENT,SEGMENT_SPACE_MANAGEMENTfromdba_tablespaces;">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"########################13.临时表空间"echo"select''as\"--13.DBTempTBS\"fromdual;">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"selectFILE_NAME,FILE_ID,TABLESPACE_NAME,BYTES/1024/1024\"BYTES(M)\",USER_BYTES/1024/1024\"USER_BYTES(M)\",statusfromdba_temp_files;">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"########################14.用户默认表空间"echo"select''as\"--14.UserDefaultTBS\"fromdual;">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"setlines200setpages2000colusernamefora20coldefault_tablespacefora30coltemporary_tablespacefora30selectusername,default_tablespace,temporary_tablespacefromdba_users;">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"########################15.数据库缓冲区高速缓存命中率"echo"select''as\"--15.DBCacheHit\"fromdual;">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"select1-(phy.value/(cur.value+con.value))fromv\$sysstatcur,v\$sysstatcon,v\$sysstatphywherecur.name='dbblockgets'andcon.name='consistentgets'andphy.name='physicalreads';">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"########################16.重写不等待比率"echo"select''as\"--16.Redonowaits\"fromdual;">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"select(req.value*5000)/entries.valuefromv\$sysstatreq,v\$sysstatentrieswherereq.name='redologspacerequests'andentries.name='redoentires';">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"########################17.库高速缓存命中率"echo"select''as\"--17.LibraryCacheHit\"fromdual;">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"selectnamespace,gethitratiofromv\$librarycache;">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"########################18.数据字典高速缓存Getmisses对gets的目标比例"echo"select''as\"--18.DBDiccache\"fromdual;">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"selectsum(getmisses)/sum(gets)fromv\$rowcache;">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"########################19.用户对像(表、索引、大小)"echo"select''as\"--19.Userobjects\"fromdual;">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"colOWNERfora30colSEGMENT_NAMEfora33colPARTITION_NAMEfora22colSEGMENT_TYPEfora11colTABLESPACE_NAMEfora30setlines333setpages5000selectOWNER,SEGMENT_NAME,PARTITION_NAME,SEGMENT_TYPE,TABLESPACE_NAME,bytes/1024/1024astable_size_MfromDba_SegmentswhereSEGMENT_TYPE='TABLE'orderbyOWNER;">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"########################20.检查是否有失效的索引"echo"select''as\"--20.CheckinvalidInd\"fromdual;">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"setlines333setpages50selectindex_name,owner,status,tablespace_namefromdba_indexeswhereownernotin('SYS','SYSTEM')andstatus!='VALID'andtablespace_nameisnotnullunionallselectindex_name,index_ownerowner,status,tablespace_namefromdba_ind_partitionswhereindex_ownernotin('SYS','SYSTEM')andstatus<>'USABLE'andtablespace_nameisnotnull;select''asafromdual;">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"########################21.检查数据库会话连接占用率"echo"select''as\"--21.CheckDBSessions\"fromdual;">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"colTOT_SESSIONSfora15selectcur_sessions,tot_sessions,a.cur_sessions/b.tot_sessions*100\"sessionsused%\"from(selectcount(*)cur_sessionsfromv\$session)a,(selectvaluetot_sessionsfromv\$parameterwherename='sessions')b;">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"########################22.检查数据库会话连接历史最高值"echo"select''as\"--22.HighwaterofSession\"fromdual;">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"selectHIGHWATERfromdba_high_water_mark_statisticswherename='SESSIONS';">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"########################23.检查数据库Job状态"echo"select''as\"--23.CheckStatusofJob\"fromdual;">my_sql.sqlsqlplus$sqlstr<my_sql.sql>>archive/${hostn}_oracle_$hourecho"setlinesize333colwhatfora30colNEXT_DATEfora30colINTERVALfora30selectjob,what,next_date,INTERVAL,BROKENfromdba_jobswhereBROKEN!='N';">my_sql.sqlsqlplus$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数据库巡检脚本的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。