溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何分析兩個主機和Oracle數(shù)據(jù)庫巡檢腳本

發(fā)布時間:2021-11-29 16:23:40 來源:億速云 閱讀:128 作者:柒染 欄目:數(shù)據(jù)庫

如何分析兩個主機和Oracle數(shù)據(jù)庫巡檢腳本,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

分享一個之前我用來巡檢主機和Oracle的腳本,不過輸出結(jié)果不是很美觀,內(nèi)容還是可以的...

主機巡檢腳本:OSWatcher.sh

ps:這里的第10項,普通用戶檢查/var/log/messages很可能沒有讀權(quán)限,如有需要巡檢此系統(tǒng)日志,建議切換root用戶執(zhí)行此腳本。

#!/bin/bash echo "" ###################################################################### #設(shè)置命令的路徑,防止命令找不到路徑 PATH=$PATH:/usr/sbin/ export PATH echo "the PATH is:$PATH" ###################################################################### PLATFORM=`/bin/uname` # ###################################################################### # Create log subdirectories if they don't exist ###################################################################### if [ ! -d archive ]; then  mkdir archive fi  case $PLATFORM in  Linux)  DF='df -h'  MEMINFO='free -m'  MPSTAT='mpstat 1 3'  TOP='eval top -b -n 1 | head -50'  VMSTAT='vmstat 1 3'  IOSTAT='iostat -d -x -k 1 5'  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 ###################################################################### # Test for discovery of os utilities. Notify if not found. ###################################################################### echo "" echo "Starting Data Collection..." echo "" case $PLATFORM in  Linux)  $DF > /dev/null 2>&1  if [ $? = 0 ]; then  echo "DF found on your system."  echo "--1.DF==========================">>archive/${hostn}_$hour  $DF>>archive/${hostn}_$hour  MEMFOUND=1  else  echo "Warning... DF not found on your system."  MEMFOUND=0  fi    $MEMINFO > /dev/null 2>&1  if [ $? = 0 ]; then  echo "meminfo found on your system."  echo "--2.MEMINFO==========================">>archive/${hostn}_$hour  $MEMINFO>>archive/${hostn}_$hour  MEMFOUND=1  else  echo "Warning... /proc/meminfo not found on your system."  MEMFOUND=0  fi    $MPSTAT > /dev/null 2>&1  if [ $? = 0 ]; then  echo "MPSTAT found on your system."  echo "--3.MPSTAT==========================">>archive/${hostn}_$hour  $MPSTAT>>archive/${hostn}_$hour  MEMFOUND=1  else  echo "Warning... MPSTAT not found on your system."  MEMFOUND=0  fi    $TOP > /dev/null 2>&1  if [ $? = 0 ]; then  echo "TOP found on your system."  echo "--4.TOP==========================">>archive/${hostn}_$hour  $TOP>>archive/${hostn}_$hour  MEMFOUND=1  else  echo "Warning... TOP not found on your system."  MEMFOUND=0  fi    $VMSTAT > /dev/null 2>&1  if [ $? = 0 ]; then  echo "VMSTAT found on your system."  echo "--5.VMSTAT==========================">>archive/${hostn}_$hour  $VMSTAT>>archive/${hostn}_$hour  MEMFOUND=1  else  echo "Warning... VMSTAT not found on your system."  MEMFOUND=0  fi    $IOSTAT > /dev/null 2>&1  if [ $? = 0 ]; then  echo "IOSTAT found on your system."  echo "--6.IOSTAT==========================">>archive/${hostn}_$hour  $IOSTAT>>archive/${hostn}_$hour  MEMFOUND=1  else  echo "Warning... IOSTAT not found on your system."  MEMFOUND=0  fi    $PSELF > /dev/null 2>&1  if [ $? = 0 ]; then  echo "PSELF found on your system."  echo "--7.PSELF==========================">>archive/${hostn}_$hour  $PSELF>>archive/${hostn}_$hour  MEMFOUND=1  else  echo "Warning... PSELF not found on your system."  MEMFOUND=0  fi    $BOOTLOG > /dev/null 2>&1  if [ $? = 0 ]; then  echo "BOOTLOG found on your system."  echo "--8.BOOTLOG==========================">>archive/${hostn}_$hour  $BOOTLOG>>archive/${hostn}_$hour  MEMFOUND=1  else  echo "Warning... BOOTLOG not found on your system."  MEMFOUND=0  fi    $SYSLOG > /dev/null 2>&1  if [ $? = 0 ]; then  echo "SYSLOG found on your system."  echo "--9.SYSLOG==========================">>archive/${hostn}_$hour  $SYSLOG>>archive/${hostn}_$hour  MEMFOUND=1  else  echo "Warning... SYSLOG not found on your system."  MEMFOUND=0  fi    $MESSAGE > /dev/null 2>&1  if [ $? = 0 ]; then  echo "MESSAGE found on your system."  echo "--10.MESSAGE==========================">>archive/${hostn}_$hour  $MESSAGE>>archive/${hostn}_$hour  MEMFOUND=1  else  echo "Warning... MESSAGE not found on your system."  MEMFOUND=0  fi    ;; esac  echo "" echo "Discovery completed." echo "Collection completed." echo "The Collected result saved in ./archive/${hostn}_$hour." echo ""

Oracle巡檢腳本:ORAWatcher.sh

這個是用來巡檢Oracle數(shù)據(jù)庫的

#!/usr/bin/ksh echo "" echo "ORAWatcher Version:1.0.1" echo ""  ###################################################################### #數(shù)據(jù)庫連接設(shè)置 ###################################################################### sqlstr=$1 test $1 if [ $? = 1 ]; then  echo  echo "Info...You did not enter a value for sqlstr."  echo "Info...Using default value = system/system"  sqlstr="system/system"  fi  ###################################################################### # Create log subdirectories if they don't exist ###################################################################### if [ ! -d archive ]; then  mkdir archive fi  echo "$sqlstr" echo "Starting Data Collection..." echo "" ###################################################################### hostn=`hostname` hour=`date +'%m.%d.%y.%H00.dat'` echo "`date` collect...">archive/${hostn}_oracle_$hour ###################################################################### echo "######################## 1.數(shù)據(jù)庫版本" echo "select ' ' as \"--1.Database Version\" from dual;" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour echo "Select version FROM Product_component_version  Where SUBSTR(PRODUCT,1,6)='Oracle';" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour echo "######################## 2.控制文件" echo "select ' ' as \"--2.Control files\" from dual;" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour echo "select name from v\$controlfile;" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour echo "######################## 3.pfile、spfile" echo "select ' ' as \"--3.Parameter files\" from dual;" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour echo "show parameter pfile;" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour echo "######################## 4.字符集" echo "select ' ' as \"--4.DB Character\" from dual;" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour echo "col PARAMETER for a20 col value for a20 select * from v\$nls_parameters where parameter='NLS_CHARACTERSET';" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour echo "######################## 5.歸檔狀態(tài)" echo "select ' ' as \"--5.DB Archive Mode\" from dual;" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour echo "set linesize 333 show parameter log_archive" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour echo "######################## 6.參數(shù)設(shè)置" echo "select ' ' as \"--6.Parameter Config\" from dual;" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour echo "set linesize 500 set pages 2000 show parameter;" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour echo "######################## 7.回滾段存儲位置" echo "select ' ' as \"--7.Undo Info\" from dual;" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour echo "set linesize 500 set pages 2000 SELECT SEGMENT_NAME, TABLESPACE_NAME, STATUS FROM DBA_ROLLBACK_SEGS;" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour echo "######################## 8.redolog" echo "select ' ' as \"--8.Redolog Files\" from dual;" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour echo "set linesize 200 set pages 2000 col MEMBER for a50 select a.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_$hour echo "######################## 9.查看表空間大小及利用率" echo "select ' ' as \"--9.Tablespace Usage\" from dual;" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour echo "set linesize 200 set pages 2000 col TABLESPACENAME for a30 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_$hour echo "######################## 10.數(shù)據(jù)文件" echo "select ' ' as \"--10.DB Files Info\" from dual;" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour echo "set linesize 300 set pagesize 500 col file_name format a80 col TABLESPACE_NAME for a30 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_$hour echo "######################## 11.查看數(shù)據(jù)文件的擴展方式" echo "select ' ' as \"--11.DB Files Extend\" from dual;" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour echo "set linesize 300 set pagesize 500 col FILE_NAME for a60 col TABLESPACE_NAME for a30 select file_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_$hour echo "######################## 12.查看表空間的擴展方式" echo "select ' ' as \"--12.TBS Extend\" from dual;" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour echo "set linesize 120 select TABLESPACE_NAME, BLOCK_SIZE, EXTENT_MANAGEMENT, SEGMENT_SPACE_MANAGEMENT  from dba_tablespaces;" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour echo "######################## 13.臨時表空間" echo "select ' ' as \"--13.DB Temp TBS\" from dual;" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 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_$hour echo "######################## 14.用戶默認表空間" echo "select ' ' as \"--14.User Default TBS\" from dual;" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour echo "set lines 200 set pages 2000 col username for a20 col default_tablespace for a30 col temporary_tablespace for a30 select username, default_tablespace, temporary_tablespace from dba_users;" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour echo "######################## 15.數(shù)據(jù)庫緩沖區(qū)高速緩存命中率" echo "select ' ' as \"--15.DB Cache Hit\" from dual;" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 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_$hour echo "######################## 16.重寫不等待比率" echo "select ' ' as \"--16.Redo nowaits\" from dual;" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 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_$hour echo "######################## 17.庫高速緩存命中率" echo "select ' ' as \"--17.Library Cache Hit\" from dual;" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour echo "select namespace,gethitratio from v\$librarycache;" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour echo "######################## 18.數(shù)據(jù)字典高速緩存Getmisses對gets的目標(biāo)比例" echo "select ' ' as \"--18.DB Dic cache\" from dual;" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour echo "select sum(getmisses)/sum(gets) from v\$rowcache;" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour echo "######################## 19.用戶對像(表、索引、大?。?quot; echo "select ' ' as \"--19.User objects\" from dual;" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour echo "col OWNER for a30 col SEGMENT_NAME for a33 col PARTITION_NAME for a22 col SEGMENT_TYPE for a11 col TABLESPACE_NAME for a30 set lines 333 set pages 5000 select OWNER ,SEGMENT_NAME,PARTITION_NAME,SEGMENT_TYPE,TABLESPACE_NAME,bytes/1024/1024 as table_size_M  from Dba_Segments where SEGMENT_TYPE='TABLE' order by OWNER;" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour   echo "######################## 20.檢查是否有失效的索引" echo "select ' ' as \"--20.Check invalid Ind\" from dual;" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour echo "set lines 333 set pages 50 select index_name, owner, status, tablespace_name   from dba_indexes  where owner not in('SYS','SYSTEM')  and status != 'VALID'  and tablespace_name is not null  union all  select index_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_$hour echo "######################## 21.檢查數(shù)據(jù)庫會話連接占用率" echo "select ' ' as \"--21.Check DB Sessions\" from dual;" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 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_$hour echo "######################## 22.檢查數(shù)據(jù)庫會話連接歷史最高值" echo "select ' ' as \"--22.Highwater of Session\" from dual;" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour echo "select HIGHWATER  from dba_high_water_mark_statistics  where name = 'SESSIONS';" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour echo "######################## 23.檢查數(shù)據(jù)庫Job狀態(tài)" echo "select ' ' as \"--23.Check Status of Job\" from dual;" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour echo "set linesize 333 col what for a30 col NEXT_DATE for a30  col INTERVAL for a30 select job, what, next_date, INTERVAL, BROKEN  from dba_jobs  where BROKEN != 'N';" >my_sql.sql sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour ###################################################################### echo "Collection completed." echo "The Collected result saved in ./archive/${hostn}_oracle_$hour." echo ""

腳本使用

1. 創(chuàng)建目錄并授權(quán)

# mkdir -p /home/oracle/scripts # chown -R oracle.oinstall /home/oracle/scripts/ # chmod -R 755 /home/oracle/scripts/

如何分析兩個主機和Oracle數(shù)據(jù)庫巡檢腳本

如何分析兩個主機和Oracle數(shù)據(jù)庫巡檢腳本

2. 兩腳本都用oracle用戶執(zhí)行

切換到oracle用戶,執(zhí)行兩個腳本:

$./OSWatcher.sh $./ORAWatcher.sh

如何分析兩個主機和Oracle數(shù)據(jù)庫巡檢腳本

如何分析兩個主機和Oracle數(shù)據(jù)庫巡檢腳本

3. 查看巡檢內(nèi)容

如何分析兩個主機和Oracle數(shù)據(jù)庫巡檢腳本
如何分析兩個主機和Oracle數(shù)據(jù)庫巡檢腳本

注意:ORAWatcher.sh腳本中數(shù)據(jù)庫的默認連接串是:system/system,如果system密碼不是這個,可以這樣執(zhí)行:./ORAWatcher.sh system/password

看完上述內(nèi)容,你們掌握如何分析兩個主機和Oracle數(shù)據(jù)庫巡檢腳本的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI