值得收藏,分析两个主机和Oracle数据库巡检脚本

    作者:课课家教育更新于: 2019-08-05 09:20:25

    数据库的基本结构分三个层次,反映了观察数据库的三种不同角度。以 内模式为 框架所组成的数据库叫做物理数据库;以 概念模式为框架所组成的数据叫概念数据库;以外模式为框架所组成的数据库叫用户数据库。

    分享一个之前我用来巡检主机和Oracle的脚本,不过输出结果不是很美观,内容还是可以的...

    主机巡检脚本:OSWatcher.sh

    PS:这里的第10项,普通用户检查/var/log/messages很可能没有读权限,如有需要巡检此系统日志,建议切换root用户执行此脚本。

    1. #!/bin/bash 
    2. echo "" 
    3. ###################################################################### 
    4. #设置命令的路径,防止命令找不到路径 
    5. PATH=$PATH:/usr/sbin/ 
    6. export PATH 
    7. echo "the PATH is:$PATH" 
    8. ###################################################################### 
    9. PLATFORM=`/bin/uname` 
    10. ###################################################################### 
    11. # Create log subdirectories if they don't exist 
    12. ###################################################################### 
    13. if [ ! -d archive ]; then 
    14.  mkdir archive 
    15. fi  
    16. case $PLATFORM in 
    17.  Linux
    18.  DF='df -h' 
    19.  MEMINFO='free -m' 
    20.  MPSTAT='mpstat 1 3' 
    21.  TOP='eval top -b -n 1 | head -50' 
    22.  VMSTAT='vmstat 1 3' 
    23.  IOSTAT='iostat -d -x -k 1 5' 
    24.  PSELF='ps -elf' 
    25.  BOOTLOG='tail -500 /var/log/boot.log' 
    26.  SYSLOG='dmesg' 
    27.  MESSAGE='tail -500 /var/log/messages' 
    28.  ;; 
    29. esac 
    30. hostn=`hostname` 
    31. hour=`date +'%m.%d.%y.%H00.dat'` 
    32. echo "`date` Collect">archive/${hostn}_$hour 
    33. ###################################################################### 
    34. # Test for discovery of os utilities. Notify if not found. 
    35. ###################################################################### 
    36. echo "" 
    37. echo "Starting Data Collection..." 
    38. echo "" 
    39. case $PLATFORM in 
    40.  Linux) 
    41.  $DF > /dev/null 2>&1 
    42.  if [ $? = 0 ]; then 
    43.  echo "DF found on your system." 
    44.  echo "--1.DF==========================">>archive/${hostn}_$hour 
    45.  $DF>>archive/${hostn}_$hour 
    46.  MEMFOUND=1 
    47.  else 
    48.  echo "Warning... DF not found on your system." 
    49.  MEMFOUND=0 
    50.  fi 
    51.   
    52.  $MEMINFO > /dev/null 2>&1 
    53.  if [ $? = 0 ]; then 
    54.  echo "meminfo found on your system." 
    55.  echo "--2.MEMINFO==========================">>archive/${hostn}_$hour 
    56.  $MEMINFO>>archive/${hostn}_$hour 
    57.  MEMFOUND=1 
    58.  else 
    59.  echo "Warning... /proc/meminfo not found on your system." 
    60.  MEMFOUND=0 
    61.  fi 
    62.   
    63.  $MPSTAT > /dev/null 2>&1 
    64.  if [ $? = 0 ]; then 
    65.  echo "MPSTAT found on your system." 
    66.  echo "--3.MPSTAT==========================">>archive/${hostn}_$hour 
    67.  $MPSTAT>>archive/${hostn}_$hour 
    68.  MEMFOUND=1 
    69.  else 
    70.  echo "Warning... MPSTAT not found on your system." 
    71.  MEMFOUND=0 
    72.  fi 
    73.   
    74.  $TOP > /dev/null 2>&1 
    75.  if [ $? = 0 ]; then 
    76.  echo "TOP found on your system." 
    77.  echo "--4.TOP==========================">>archive/${hostn}_$hour 
    78.  $TOP>>archive/${hostn}_$hour 
    79.  MEMFOUND=1 
    80.  else 
    81.  echo "Warning... TOP not found on your system." 
    82.  MEMFOUND=0 
    83.  fi 
    84.   
    85.  $VMSTAT > /dev/null 2>&1 
    86.  if [ $? = 0 ]; then 
    87.  echo "VMSTAT found on your system." 
    88.  echo "--5.VMSTAT==========================">>archive/${hostn}_$hour 
    89.  $VMSTAT>>archive/${hostn}_$hour 
    90.  MEMFOUND=1 
    91.  else 
    92.  echo "Warning... VMSTAT not found on your system." 
    93.  MEMFOUND=0 
    94.  fi 
    95.   
    96.  $IOSTAT > /dev/null 2>&1 
    97.  if [ $? = 0 ]; then 
    98.  echo "IOSTAT found on your system." 
    99.  echo "--6.IOSTAT==========================">>archive/${hostn}_$hour 
    100.  $IOSTAT>>archive/${hostn}_$hour 
    101.  MEMFOUND=1 
    102.  else 
    103.  echo "Warning... IOSTAT not found on your system." 
    104.  MEMFOUND=0 
    105.  fi 
    106.   
    107.  $PSELF > /dev/null 2>&1 
    108.  if [ $? = 0 ]; then 
    109.  echo "PSELF found on your system." 
    110.  echo "--7.PSELF==========================">>archive/${hostn}_$hour 
    111.  $PSELF>>archive/${hostn}_$hour 
    112.  MEMFOUND=1 
    113.  else 
    114.  echo "Warning... PSELF not found on your system." 
    115.  MEMFOUND=0 
    116.  fi 
    117.   
    118.  $BOOTLOG > /dev/null 2>&1 
    119.  if [ $? = 0 ]; then 
    120.  echo "BOOTLOG found on your system." 
    121.  echo "--8.BOOTLOG==========================">>archive/${hostn}_$hour 
    122.  $BOOTLOG>>archive/${hostn}_$hour 
    123.  MEMFOUND=1 
    124.  else 
    125.  echo "Warning... BOOTLOG not found on your system." 
    126.  MEMFOUND=0 
    127.  fi 
    128.   
    129.  $SYSLOG > /dev/null 2>&1 
    130.  if [ $? = 0 ]; then 
    131.  echo "SYSLOG found on your system." 
    132.  echo "--9.SYSLOG==========================">>archive/${hostn}_$hour 
    133.  $SYSLOG>>archive/${hostn}_$hour 
    134.  MEMFOUND=1 
    135.  else 
    136.  echo "Warning... SYSLOG not found on your system." 
    137.  MEMFOUND=0 
    138.  fi 
    139.   
    140.  $MESSAGE > /dev/null 2>&1 
    141.  if [ $? = 0 ]; then 
    142.  echo "MESSAGE found on your system." 
    143.  echo "--10.MESSAGE==========================">>archive/${hostn}_$hour 
    144.  $MESSAGE>>archive/${hostn}_$hour 
    145.  MEMFOUND=1 
    146.  else 
    147.  echo "Warning... MESSAGE not found on your system." 
    148.  MEMFOUND=0 
    149.  fi 
    150.   
    151.  ;; 
    152. esac  
    153. echo "" 
    154. echo "Discovery completed." 
    155. echo "Collection completed." 
    156. echo "The Collected result saved in ./archive/${hostn}_$hour." 
    157. echo "" 

    Oracle巡检脚本:ORAWatcher.sh

    这个是用来巡检Oracle数据库的

    1. #!/usr/bin/ksh 
    2. echo "" 
    3. echo "ORAWatcher Version:1.0.1" 
    4. echo ""  
    5. ###################################################################### 
    6. #数据库连接设置 
    7. ###################################################################### 
    8. sqlstr=$1 
    9. test $1 
    10. if [ $? = 1 ]; then 
    11.  echo 
    12.  echo "Info...You did not enter a value for sqlstr." 
    13.  echo "Info...Using default value = system/system" 
    14.  sqlstr="system/system"  
    15. fi  
    16. ###################################################################### 
    17. # Create log subdirectories if they don't exist 
    18. ###################################################################### 
    19. if [ ! -d archive ]; then 
    20.  mkdir archive 
    21. fi  
    22. echo "$sqlstr" 
    23. echo "Starting Data Collection..." 
    24. echo "" 
    25. ###################################################################### 
    26. hostn=`hostname` 
    27. hour=`date +'%m.%d.%y.%H00.dat'` 
    28. echo "`date` collect...">archive/${hostn}_oracle_$hour 
    29. ###################################################################### 
    30. echo "######################## 1.数据库版本" 
    31. echo "select ' ' as \\"--1.Database Version\\" from dual;" >my_sql.sql 
    32. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    33. echo "Select version FROM Product_component_version  
    34. Where SUBSTR(PRODUCT,1,6)='Oracle';" >my_sql.sql 
    35. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    36. echo "######################## 2.控制文件" 
    37. echo "select ' ' as \\"--2.Control files\\" from dual;" >my_sql.sql 
    38. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    39. echo "select name from v\\$controlfile;" >my_sql.sql 
    40. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    41. echo "######################## 3.pfile、spfile" 
    42. echo "select ' ' as \\"--3.Parameter files\\" from dual;" >my_sql.sql 
    43. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    44. echo "show parameter pfile;" >my_sql.sql 
    45. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    46. echo "######################## 4.字符集" 
    47. echo "select ' ' as \\"--4.DB Character\\" from dual;" >my_sql.sql 
    48. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    49. echo "col PARAMETER for a20 
    50. col value for a20 
    51. select * from v\\$nls_parameters where parameter='NLS_CHARACTERSET';" >my_sql.sql 
    52. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    53. echo "######################## 5.归档状态" 
    54. echo "select ' ' as \\"--5.DB Archive Mode\\" from dual;" >my_sql.sql 
    55. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    56. echo "set linesize 333 
    57. show parameter log_archive" >my_sql.sql 
    58. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    59. echo "######################## 6.参数设置" 
    60. echo "select ' ' as \\"--6.Parameter Config\\" from dual;" >my_sql.sql 
    61. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    62. echo "set linesize 500 
    63. set pages 2000 
    64. show parameter;" >my_sql.sql 
    65. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    66. echo "######################## 7.回滚段存储位置" 
    67. echo "select ' ' as \\"--7.Undo Info\\" from dual;" >my_sql.sql 
    68. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    69. echo "set linesize 500 
    70. set pages 2000 
    71. SELECT SEGMENT_NAME, TABLESPACE_NAME, STATUS FROM DBA_ROLLBACK_SEGS;" >my_sql.sql 
    72. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    73. echo "######################## 8.redolog" 
    74. echo "select ' ' as \\"--8.Redolog Files\\" from dual;" >my_sql.sql 
    75. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    76. echo "set linesize 200 
    77. set pages 2000 
    78. col MEMBER for a50 
    79. select a.member,a.group#,b.thread#,b.bytes,b.members,b.status 
    80. from v\\$logfile a,v\\$log b 
    81. where a.group#=b.group#;" >my_sql.sql 
    82. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    83. echo "######################## 9.查看表空间大小及利用率" 
    84. echo "select ' ' as \\"--9.Tablespace Usage\\" from dual;" >my_sql.sql 
    85. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    86. echo "set linesize 200 
    87. set pages 2000 
    88. col TABLESPACENAME for a30 
    89. select substr(a.TABLESPACE_NAME,1,30) TablespaceName, 
    90. sum(a.bytes/1024/1024) as \\"Totle_size(M)\\", 
    91. sum(nvl(b.free_space1/1024/1024,0)) as \\"Free_space(M)\\", 
    92. sum(a.bytes/1024/1024)-sum(nvl(b.free_space1/1024/1024,0)) as \\"Used_space(M)\\", 
    93. round((sum(a.bytes/1024/1024)-sum(nvl(b.free_space1/1024/1024,0))) 
    94. *100/sum(a.bytes/1024/1024),2) as \\"Used_percent%\\" from dba_data_files a, 
    95. (select sum(nvl(bytes,0)) free_space1,file_id from dba_free_space 
    96. group by file_id) b where a.file_id = b.file_id(+) group by a.TABLESPACE_NAME 
    97. order by \\"Used_percent%\\";" >my_sql.sql 
    98. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    99. echo "######################## 10.数据文件" 
    100. echo "select ' ' as \\"--10.DB Files Info\\" from dual;" >my_sql.sql 
    101. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    102. echo "set linesize 300 
    103. set pagesize 500 
    104. col file_name format a80 
    105. col TABLESPACE_NAME for a30 
    106. select tablespace_name,file_id,status,bytes/1024/1024 FileSizeM,file_name from dba_data_files order by tablespace_name;" >my_sql.sql 
    107. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    108. echo "######################## 11.查看数据文件的扩展方式" 
    109. echo "select ' ' as \\"--11.DB Files Extend\\" from dual;" >my_sql.sql 
    110. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    111. echo "set linesize 300 
    112. set pagesize 500 
    113. col FILE_NAME for a60 
    114. col TABLESPACE_NAME for a30 
    115. select file_id,file_name,tablespace_name,autoextensible  
    116. from dba_data_files order by file_id;" >my_sql.sql 
    117. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    118. echo "######################## 12.查看表空间的扩展方式" 
    119. echo "select ' ' as \\"--12.TBS Extend\\" from dual;" >my_sql.sql 
    120. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    121. echo "set linesize 120 
    122. select TABLESPACE_NAME, BLOCK_SIZE, EXTENT_MANAGEMENT, SEGMENT_SPACE_MANAGEMENT  
    123. from dba_tablespaces;" >my_sql.sql 
    124. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    125. echo "######################## 13.临时表空间" 
    126. echo "select ' ' as \\"--13.DB Temp TBS\\" from dual;" >my_sql.sql 
    127. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    128. 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 
    129. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    130. echo "######################## 14.用户默认表空间" 
    131. echo "select ' ' as \\"--14.User Default TBS\\" from dual;" >my_sql.sql 
    132. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    133. echo "set lines 200 
    134. set pages 2000 
    135. col username for a20 
    136. col default_tablespace for a30 
    137. col temporary_tablespace for a30 
    138. select username, default_tablespace, temporary_tablespace from dba_users;" >my_sql.sql 
    139. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    140. echo "######################## 15.数据库缓冲区高速缓存命中率" 
    141. echo "select ' ' as \\"--15.DB Cache Hit\\" from dual;" >my_sql.sql 
    142. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    143. echo "select 1-(phy.value/(cur.value+con.value)) 
    144. from v\\$sysstat cur, v\\$sysstat con, v\\$sysstat phy 
    145. where cur.name = 'db block gets'  
    146. and con.name = 'consistent gets'  
    147. and phy.name = 'physical reads';" >my_sql.sql 
    148. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    149. echo "######################## 16.重写不等待比率" 
    150. echo "select ' ' as \\"--16.Redo nowaits\\" from dual;" >my_sql.sql 
    151. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    152. echo "select (req.value*5000)/entries.value 
    153. from v\\$sysstat req,v\\$sysstat entries 
    154. where req.name = 'redo log space requests' 
    155. and entries.name = 'redo entires';" >my_sql.sql 
    156. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    157. echo "######################## 17.库高速缓存命中率" 
    158. echo "select ' ' as \\"--17.Library Cache Hit\\" from dual;" >my_sql.sql 
    159. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    160. echo "select namespace,gethitratio from v\\$librarycache;" >my_sql.sql 
    161. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    162. echo "######################## 18.数据字典高速缓存Getmisses对gets的目标比例" 
    163. echo "select ' ' as \\"--18.DB Dic cache\\" from dual;" >my_sql.sql 
    164. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    165. echo "select sum(getmisses)/sum(gets) from v\\$rowcache;" >my_sql.sql 
    166. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    167. echo "######################## 19.用户对像(表、索引、大小)" 
    168. echo "select ' ' as \\"--19.User objects\\" from dual;" >my_sql.sql 
    169. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    170. echo "col OWNER for a30 
    171. col SEGMENT_NAME for a33 
    172. col PARTITION_NAME for a22 
    173. col SEGMENT_TYPE for a11 
    174. col TABLESPACE_NAME for a30 
    175. set lines 333 
    176. set pages 5000 
    177. select OWNER ,SEGMENT_NAME,PARTITION_NAME,SEGMENT_TYPE,TABLESPACE_NAME,bytes/1024/1024 as table_size_M  
    178. from Dba_Segments where SEGMENT_TYPE='TABLE' order by OWNER;" >my_sql.sql 
    179. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    180.   
    181. echo "######################## 20.检查是否有失效的索引" 
    182. echo "select ' ' as \\"--20.Check invalid Ind\\" from dual;" >my_sql.sql 
    183. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    184. echo "set lines 333 
    185. set pages 50 
    186. select index_name, owner, status, tablespace_name  
    187.  from dba_indexes 
    188.  where owner not in('SYS','SYSTEM') 
    189.  and status != 'VALID' 
    190.  and tablespace_name is not null  
    191. union all  
    192. select index_name, index_owner owner, status, tablespace_name 
    193.  from dba_ind_partitions 
    194.  where index_owner not in ('SYS','SYSTEM') 
    195.  and status <> 'USABLE' 
    196.  and tablespace_name is not null; 
    197. select '' as a from dual;" >my_sql.sql 
    198. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    199. echo "######################## 21.检查数据库会话连接占用率" 
    200. echo "select ' ' as \\"--21.Check DB Sessions\\" from dual;" >my_sql.sql 
    201. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    202. echo "col TOT_SESSIONS for a15 
    203. select cur_sessions, tot_sessions, a.cur_sessions/b.tot_sessions*100 \\"sessions used%\\" 
    204. from (select count(*) cur_sessions from v\\$session) a, 
    205. (select value tot_sessions from v\\$parameter where name = 'sessions') b;" >my_sql.sql 
    206. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    207. echo "######################## 22.检查数据库会话连接历史最高值" 
    208. echo "select ' ' as \\"--22.Highwater of Session\\" from dual;" >my_sql.sql 
    209. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    210. echo "select HIGHWATER 
    211.  from dba_high_water_mark_statistics 
    212.  where name = 'SESSIONS';" >my_sql.sql 
    213. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    214. echo "######################## 23.检查数据库Job状态" 
    215. echo "select ' ' as \\"--23.Check Status of Job\\" from dual;" >my_sql.sql 
    216. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    217. echo "set linesize 333 
    218. col what for a30 
    219. col NEXT_DATE for a30  
    220. col INTERVAL for a30 
    221. select job, what, next_date, INTERVAL, BROKEN 
    222.  from dba_jobs 
    223.  where BROKEN != 'N';" >my_sql.sql 
    224. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
    225. ###################################################################### 
    226. echo "Collection completed." 
    227. echo "The Collected result saved in ./archive/${hostn}_oracle_$hour." 
    228. echo "" 

    脚本使用

    1. 创建目录并授权

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

    值得收藏,分析两个主机和Oracle数据库巡检脚本_数据库_数据管理_数据结构

    2. 两脚本都用oracle用户执行

    切换到oracle用户,执行两个脚本:

    1. $./OSWatcher.sh 
    2. $./ORAWatcher.sh 

    3. 查看巡检内容

     

     

     

     

    注意:ORAWatcher.sh脚本中数据库的默认连接串是:system/system,如果system密码不是这个,可以这样执行:./ORAWatcher.sh system/password

     数据库通常分为层次式数据库、网络式数据库和关系式数据库三种。而不同的数据库是按不同的 数据结构来联系和组织的。

课课家教育

未登录