database_health.sh 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. #!/bin/sh
  2. export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
  3. export ORACLE_SID=`echo ${1} | tr "[a-z]" "[A-Z]"`
  4. export PATH=$ORACLE_HOME/bin:$PATH
  5. $ORACLE_HOME/bin/sqlplus -s /nolog <<EOF
  6. connect / as sysdba
  7. TTITLE CENTER -> 'DATABASE :'${ORACLE_SID}
  8. SELECT NAME,OPEN_MODE FROM V\$DATABASE;
  9. TTITLE CENTER -> 'DATABASE : DATAGUARD STATUS'
  10. SELECT SWITCHOVER_STATUS FROM V\$DATABASE;
  11. SELECT thread#, max(SEQUENCE#) FROM V\$ARCHIVED_LOG where APPLIED='YES' group by thread#;
  12. archive log list
  13. TTITLE CENTER -> 'DATABASE : ASM DISKGROUP'
  14. select NAME,(100-FREE_MB/TOTAL_MB*100) from V\$asm_diskgroup;
  15. TTITLE CENTER -> 'DATABASE : RMAN BACKUP STATUS'
  16. col STATUS format a9
  17. col hrs format 999.99
  18. set pages 800
  19. select
  20. SESSION_KEY, INPUT_TYPE, STATUS,
  21. to_char(START_TIME,'mm/dd/yy hh24:mi') start_time,
  22. to_char(END_TIME,'mm/dd/yy hh24:mi') end_time,
  23. elapsed_seconds/3600 hrs
  24. from V\$RMAN_BACKUP_JOB_DETAILS
  25. where END_TIME > sysdate -1
  26. order by session_key;
  27. TTITLE CENTER -> 'DATABASE : TABLESPACE REPORT'
  28. set linesize 132 tab off trimspool on
  29. set pagesize 105
  30. set pause off
  31. set echo off
  32. set feedb on
  33. column "TOTAL ALLOC (MB)" format 9,999,990.00
  34. column "TOTAL PHYS ALLOC (MB)" format 9,999,990.00
  35. column "USED (MB)" format 9,999,990.00
  36. column "FREE (MB)" format 9,999,990.00
  37. column "% USED" format 990.00
  38. select a.tablespace_name,
  39. a.bytes_alloc/(1024*1024) "TOTAL ALLOC (MB)",
  40. a.physical_bytes/(1024*1024) "TOTAL PHYS ALLOC (MB)",
  41. nvl(b.tot_used,0)/(1024*1024) "USED (MB)",
  42. (nvl(b.tot_used,0)/a.bytes_alloc)*100 "% USED"
  43. from ( select tablespace_name,
  44. sum(bytes) physical_bytes,
  45. sum(decode(autoextensible,'NO',bytes,'YES',maxbytes)) bytes_alloc
  46. from dba_data_files
  47. group by tablespace_name ) a,
  48. ( select tablespace_name, sum(bytes) tot_used
  49. from dba_segments
  50. group by tablespace_name ) b
  51. where a.tablespace_name = b.tablespace_name (+)
  52. --and (nvl(b.tot_used,0)/a.bytes_alloc)*100 > 10
  53. and a.tablespace_name not in (select distinct tablespace_name from dba_temp_files)
  54. and a.tablespace_name not like 'UNDO%'
  55. order by 1;
  56. TTITLE CENTER -> 'DATABASE : BLOCKING SESSION REPORT'
  57. set pages 800
  58. select sid,sql_id,status,module,blocking_session from V\$session where blocking_session is not null;
  59. TTITLE CENTER -> 'DATABASE : LONG RUNNING SESSION REPORT'
  60. set pages 800
  61. select sid,TOTALWORK,ELAPSED_SECONDS,SQL_ID,SOFAR,OPNAME from V\$session_longops where time_remaining>0;
  62. TTITLE CENTER -> 'DATABASE : ALERT LOG ORA ERRORS REPORT'
  63. col RECORD_ID for 9999999 head ID
  64. col ORIGINATING_TIMESTAMP for a20 head Date
  65. col MESSAGE_TEXT for a120 head Message
  66. set lines 800
  67. set pages 800
  68. SET VERIFY OFF
  69. SET TERMOUT OFF
  70. column 1 new_value 1
  71. SELECT '' "1" FROM dual WHERE ROWNUM = 0;
  72. --define query = '&1'
  73. SET TERMOUT ON
  74. select
  75. record_id,
  76. to_char(originating_timestamp,'DD.MM.YYYY HH24:MI:SS'),
  77. message_text
  78. from
  79. x\$dbgalertext
  80. where
  81. lower(MESSAGE_TEXT) like lower(DECODE('ORA-', '', '%', '%ORA-%'))
  82. and originating_timestamp > sysdate - 1;
  83. SET HEAD OFF
  84. select 'Filter on alert log message => '||NVL('ORA-','%') from dual;
  85. SET HEAD ON
  86. undefine 1
  87. EOF
  88. echo "U01 FILESYSTEM USAGE"
  89. df -HlP | grep '/u01' | awk '{ print $5 " " $6 }'