修改自大神博客:http://www.cnblogs.com/jyzhao/p/5364049.html
脚本巡检的优化:自动化,节省时间。
脚本需加强:巡检结果中有大量的sqlplus连接信息,后期考虑用shell只过滤出有用信息,优化查看。
开始介绍:
1.环境sentos67、redhat6
2.可以将脚本放至/home/oracle/checkdir/ORA_check.sh
3.修改脚本文件权限:
# chown -R oracle:dba /var/ORA_check.sh
# chmod u+x ORA_check.sh
4.vimORA_check.sh
#!/usr/bin/ksh echo "" echo "ORAWatcher Version:1.0.1" echo ""#Create Time:2016-04-08#Update Time:2017-12-14###################################################################### #数据库连接设置 ###################################################################### read -p "Please input system passwd: "DBApasswd sqlstr=system/$DBApasswd ###################################################################### # Create log subdirectories if they don't exist ###################################################################### archive=/home/oracle/checkdir/archive if [ ! -d $archive ]; then mkdir$archive fi echo "Starting ..." echo ""###################################################################### hostn=`hostname` CKtime=`date +%F_%H:%M.log` echo "CHECK_TIME: $CKtime ">$archive/${hostn}_oracle_$CKtime ###################################################################### echo "######################## 1.数据库版本" echo "--1.Database Version" >>$archive/${hostn}_oracle_$CKtime echo "Select version FROM Product_component_version Where SUBSTR(PRODUCT,1,6)='Oracle';">my_sql.sql sqlplus $sqlstr <my_sql.sql>>$archive/${hostn}_oracle_$CKtime echo "">>$archive/${hostn}_oracle_$CKtime echo "######################## 2.控制文件" echo "--2.Control files" >>$archive/${hostn}_oracle_$CKtime echo "select name from v$controlfile;" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>$archive/${hostn}_oracle_$CKtime echo "">>$archive/${hostn}_oracle_$CKtime echo "######################## 3.pfile、spfile" echo "--3.Parameter files" >>$archive/${hostn}_oracle_$CKtime echo "show parameter pfile;" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>$archive/${hostn}_oracle_$CKtime echo "">>$archive/${hostn}_oracle_$CKtime echo "######################## 4.字符集" echo "--4.DB Character" >>$archive/${hostn}_oracle_$CKtime echo "col PARAMETER for a20 col value fora20 select * from v$nls_parameters where parameter='NLS_CHARACTERSET';">my_sql.sql sqlplus $sqlstr <my_sql.sql>>$archive/${hostn}_oracle_$CKtime echo "">>$archive/${hostn}_oracle_$CKtime echo "######################## 5.归档状态" echo "--5.DB Archive Mode" >>$archive/${hostn}_oracle_$CKtime echo "set linesize 333 show parameter log_$archive">my_sql.sql sqlplus $sqlstr <my_sql.sql>>$archive/${hostn}_oracle_$CKtime echo "">>$archive/${hostn}_oracle_$CKtime echo "######################## 6.参数设置" echo "--6.Parameter Config" >>$archive/${hostn}_oracle_$CKtime echo "set linesize 500 set pages 2000show parameter;">my_sql.sql sqlplus $sqlstr <my_sql.sql>>$archive/${hostn}_oracle_$CKtime echo "">>$archive/${hostn}_oracle_$CKtime echo "######################## 7.回滚段存储位置" echo "--7.Undo Info" >>$archive/${hostn}_oracle_$CKtime echo "set linesize 500 set pages 2000SELECT SEGMENT_NAME, TABLESPACE_NAME, STATUS FROM DBA_ROLLBACK_SEGS;">my_sql.sql sqlplus $sqlstr <my_sql.sql>>$archive/${hostn}_oracle_$CKtime echo "">>$archive/${hostn}_oracle_$CKtime echo "######################## 8.redolog" echo "--8.Redolog Files" >>$archive/${hostn}_oracle_$CKtime echo "set linesize 200 set pages 2000col MEMBER fora50 selecta.member,a.group#,b.thread#,b.bytes,b.members,b.status from v$logfile a,v$log b where a.group#=b.group#;">my_sql.sql sqlplus $sqlstr <my_sql.sql>>$archive/${hostn}_oracle_$CKtime echo "">>$archive/${hostn}_oracle_$CKtime echo "######################## 9.查看表空间大小及利用率" echo "--9.Tablespace Usage" >>$archive/${hostn}_oracle_$CKtime echo "set linesize 200 set pages 2000col TABLESPACENAME fora30 select substr(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%" from dba_data_files a,(select sum(nvl(bytes,0)) free_space1,file_id from dba_free_space group by file_id) b where a.file_id = b.file_id(+) group by a.TABLESPACE_NAME order by "Used_percent%";" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>$archive/${hostn}_oracle_$CKtime echo "">>$archive/${hostn}_oracle_$CKtime echo "######################## 10.数据文件" echo "--10.DB Files Info" >>$archive/${hostn}_oracle_$CKtime echo "set linesize 300 SEt pagesize 500col file_name format a80 col TABLESPACE_NAME fora30 select tablespace_name,file_id,status,bytes/1024/1024 FileSizeM,file_name from dba_data_files order by tablespace_name;">my_sql.sql sqlplus $sqlstr <my_sql.sql>>$archive/${hostn}_oracle_$CKtime echo "">>$archive/${hostn}_oracle_$CKtime echo "######################## 11.查看数据文件的扩展方式" echo "--11.DB Files Extend" >>$archive/${hostn}_oracle_$CKtime echo "set linesize 300 set pagesize 500col FILE_NAME fora60 col TABLESPACE_NAME fora30 selectfile_id,file_name,tablespace_name,autoextensible from dba_data_files order by file_id;">my_sql.sql sqlplus $sqlstr <my_sql.sql>>$archive/${hostn}_oracle_$CKtime echo "">>$archive/${hostn}_oracle_$CKtime echo "######################## 12.查看表空间的扩展方式" echo "--12.TBS Extend" >>$archive/${hostn}_oracle_$CKtime echo "set linesize 120 selectTABLESPACE_NAME, BLOCK_SIZE, EXTENT_MANAGEMENT, SEGMENT_SPACE_MANAGEMENT from dba_tablespaces;">my_sql.sql sqlplus $sqlstr <my_sql.sql>>$archive/${hostn}_oracle_$CKtime echo "">>$archive/${hostn}_oracle_$CKtime echo "######################## 13.临时表空间" echo "--13.DB Temp TBS" >>$archive/${hostn}_oracle_$CKtime echo "select FILE_NAME, FILE_ID, TABLESPACE_NAME, BYTES/1024/1024 "BYTES(M)", USER_BYTES/1024/1024 "USER_BYTES(M)", status from dba_temp_files;" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>$archive/${hostn}_oracle_$CKtime echo "">>$archive/${hostn}_oracle_$CKtime echo "######################## 14.用户默认表空间" echo "--14.User Default TBS" >>$archive/${hostn}_oracle_$CKtime echo "set lines 200 set pages 2000col username fora20 col default_tablespace fora30 col temporary_tablespace fora30 select username, default_tablespace, temporary_tablespace from dba_users;">my_sql.sql sqlplus $sqlstr <my_sql.sql>>$archive/${hostn}_oracle_$CKtime echo "">>$archive/${hostn}_oracle_$CKtime echo "######################## 15.数据库缓冲区高速缓存命中率" echo "--15.DB Cache Hit" >>$archive/${hostn}_oracle_$CKtime echo "select 1-(phy.value/(cur.value+con.value)) from v$sysstat cur, v$sysstat con, v$sysstat phy where cur.name = 'db block gets'and con.name = 'consistent gets'and phy.name = 'physical reads';">my_sql.sql sqlplus $sqlstr <my_sql.sql>>$archive/${hostn}_oracle_$CKtime echo "">>$archive/${hostn}_oracle_$CKtime echo "######################## 16.重写不等待比率" echo "--16.Redo nowaits" >>$archive/${hostn}_oracle_$CKtime echo "select (req.value*5000)/entries.value from v$sysstat req,v$sysstat entries where req.name = 'redo log space requests'and entries.name = 'redo entires';">my_sql.sql sqlplus $sqlstr <my_sql.sql>>$archive/${hostn}_oracle_$CKtime echo "">>$archive/${hostn}_oracle_$CKtime echo "######################## 17.库高速缓存命中率" echo "--17.Library Cache Hit" >>$archive/${hostn}_oracle_$CKtime echo "select namespace,gethitratio from v$librarycache;" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>$archive/${hostn}_oracle_$CKtime echo "">>$archive/${hostn}_oracle_$CKtime echo "######################## 18.数据字典高速缓存Getmisses对gets的目标比例" echo "--18.DB Dic cache" >>$archive/${hostn}_oracle_$CKtime echo "select sum(getmisses)/sum(gets) from v$rowcache;" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>$archive/${hostn}_oracle_$CKtime echo "">>$archive/${hostn}_oracle_$CKtime echo "######################## 19.用户对像(表、索引、大小)" echo "--19.User objects" >>$archive/${hostn}_oracle_$CKtime echo "col OWNER for a30 col SEGMENT_NAME fora33 col PARTITION_NAME fora22 col SEGMENT_TYPE fora11 col TABLESPACE_NAME fora30 set lines 333set pages 5000 select OWNER ,SEGMENT_NAME,PARTITION_NAME,SEGMENT_TYPE,TABLESPACE_NAME,bytes/1024/1024as table_size_M from Dba_Segments where SEGMENT_TYPE='TABLE' order by OWNER;">my_sql.sql sqlplus $sqlstr <my_sql.sql>>$archive/${hostn}_oracle_$CKtime echo "">>$archive/${hostn}_oracle_$CKtime echo "######################## 20.检查是否有失效的索引" echo "--20.Check invalid Ind" >>$archive/${hostn}_oracle_$CKtime echo "set lines 333 set pages 50 selectindex_name, owner, status, tablespace_name from dba_indexes where owner not in('SYS','SYSTEM') and status != 'VALID'and tablespace_name is not nullunion all selectindex_name, index_owner owner, status, tablespace_name from dba_ind_partitions where index_owner not in ('SYS','SYSTEM') and status <> 'USABLE'and tablespace_name is not null; select '' as a from dual;">my_sql.sql sqlplus $sqlstr <my_sql.sql>>$archive/${hostn}_oracle_$CKtime echo "">>$archive/${hostn}_oracle_$CKtime echo "######################## 21.检查数据库会话连接占用率" echo "--21.Check DB Sessions" >>$archive/${hostn}_oracle_$CKtime echo "col TOT_SESSIONS for a15 select cur_sessions, tot_sessions, a.cur_sessions/b.tot_sessions*100 "sessions used%" from (select count(*) cur_sessions from v$session) a, (select value tot_sessions from v$parameter where name = 'sessions') b;">my_sql.sql sqlplus $sqlstr <my_sql.sql>>$archive/${hostn}_oracle_$CKtime echo "">>$archive/${hostn}_oracle_$CKtime echo "######################## 22.检查数据库会话连接历史最高值" echo "--22.Highwater of Session" >>$archive/${hostn}_oracle_$CKtime echo "select HIGHWATER from dba_high_water_mark_statistics where name = 'SESSIONS';">my_sql.sql sqlplus $sqlstr <my_sql.sql>>$archive/${hostn}_oracle_$CKtime echo "">>$archive/${hostn}_oracle_$CKtime echo "######################## 23.检查数据库Job状态" echo "--23.Check Status of Job" >>$archive/${hostn}_oracle_$CKtime echo "set linesize 333 col what fora30 col NEXT_DATE fora30 col INTERVAL fora30 selectjob, what, next_date, INTERVAL, BROKEN from dba_jobs where BROKEN != 'N';">my_sql.sql sqlplus $sqlstr <my_sql.sql>>$archive/${hostn}_oracle_$CKtime echo "">>$archive/${hostn}_oracle_$CKtime ##################################################################### echo "Check completed." echo "The Collected result saved in $archive/${hostn}_oracle_$CKtime." echo ""
执行过程:
[oracle@rac2 checkdir]$ sh ORA_check.sh ORAWatcher Version:1.0.1 Please input system passwd: ipii314 Starting ... ######################## 1.数据库版本 ######################## 2.控制文件 ######################## 3.pfile、spfile ######################## 4.字符集 ######################## 5.归档状态 ######################## 6.参数设置 ######################## 7.回滚段存储位置 ######################## 8.redolog ######################## 9.查看表空间大小及利用率 ######################## 10.数据文件 ######################## 11.查看数据文件的扩展方式 ######################## 12.查看表空间的扩展方式 ######################## 13.临时表空间 ######################## 14.用户默认表空间 ######################## 15.数据库缓冲区高速缓存命中率 ######################## 16.重写不等待比率 ######################## 17.库高速缓存命中率 ######################## 18.数据字典高速缓存Getmisses对gets的目标比例 ######################## 19.用户对像(表、索引、大小) ######################## 20.检查是否有失效的索引 ######################## 21.检查数据库会话连接占用率 ######################## 22.检查数据库会话连接历史最高值 ######################## 23.检查数据库Job状态 Check completed. The Collected result saved in /home/oracle/checkdir/archive/rac2_oracle_2017-12-14_22:56.log. //巡检结果保存位置