REM Database Health monitoring script. REM REM Segments Max extents & Current extent comparison REM set line 180 set pagesize 10000 set feedback off prompt col Time format a50 heading "System Time" select to_char(sysdate,'DD-MON-YYYY:HH24:MI:SS') Time from dual; prompt prompt prompt prompt**---------------Objects Reaching Max extents-----------------------** prompt col segment_name format a40 heading "Object Name" col max_extents format 9999999999 heading "Max Extents" col curr_extents format 99999999999 heading "Curent Extents" select a.segment_name,a.max_extents,b.curr_extents from dba_segments a,(select segment_name,max(extent_id) curr_extents from dba_extents group by segment_name) b where a.segment_name = b.segment_name and (a.max_extents - b.curr_extents) <= 10; prompt prompt**---------------User Session Information----------------------------** prompt col sid format 9999 heading "SID" col serial# format 9999999 heading "SERIAL NO" col logon_time format 9999999 heading "Login Time" col username format a12 col osuser format a24 col program format a38 select s.sid,s.serial#,p.spid,s.username,s.osuser,s.program,to_char(s.LOGON_TIME,'DD-MON-YY:HH24:MI:SS') "Log on Time",round((s.LAST_CALL_ET/(60*60*24)),2)"Wait in Days" from v$session s,v$process p where s.paddr = p.addr and s.username is not null order by 8 desc; prompt prompt**---------------File Information-------------------------------------** prompt col file_name format a55 heading "File Name" col SizeInMB format 99999999 heading "Total Size (MB)" col MAXSIZE format 99999999 heading "Maximum Size (MB)" select file_name,BYTES/(1024*1024) SizeInMB,AUTOEXTENSIBLE,MAXBYTES/(1024*1024) MAXSIZE from dba_data_files; prompt prompt**---------------Tablespace Information-------------------------------** prompt col tablespace_name format a25 heading "Tablespace Name" col logging format a10 col status format a12 col extent_management format a30 heading "Local/Dict" select tablespace_name,status,contents,decode(logging,LOGGING,'YES','NO') Logging,extent_management from dba_tablespaces; SELECT Total.name "Tablespace Name", Free_space, (total_space-Free_space) Used_space, total_space FROM (select tablespace_name, sum(bytes/1024/1024) Free_Space from sys.dba_free_space group by tablespace_name ) Free, (select b.name, sum(bytes/1024/1024) TOTAL_SPACE from sys.v_$datafile a, sys.v_$tablespace B where a.ts# = b.ts# group by b.name ) Total WHERE Free.Tablespace_name = Total.name; prompt prompt**---------------Tablespace Fragmentation Status----------------** prompt col TABLESPACE_NAME format a25 heading "Tablespace Name" select TABLESPACE_NAME Name,TOTAL_EXTENTS "Total Extents",EXTENTS_COALESCED,decode(PERCENT_EXTENTS_COALESCED,100,'NO','YES') "Frag" from dba_free_space_coalesced; prompt prompt**---------------Latch Contention-------------------------------** prompt col name format a40 heading "Latch Name" SELECT name, gets, misses, round((gets-misses)/decode(gets,0,1,gets),3) hit_ratio, sleeps, round(sleeps/decode(misses,0,1,misses),3) "sleeps/misses" from v$latch where gets != 0 order by name; select name,immediate_gets,immediate_misses,(immediate_gets)/(immediate_gets+immediate_misses) Hit_Ratio from v$latch where immediate_gets != 0; prompt prompt**---------------Shared Pool Statistics-------------------------------** prompt col namespace format a22 select namespace,gets,gethits,round(gethitratio,2) gethitratio,pins,pinhits,round(pinhitratio,2) pinhitratio,reloads,invalidations from v$librarycache; prompt prompt**---------------Roll back segment Statistics-------------------------------** prompt col segment_name format a30 heading "Segment Name" col status format a15 select segment_name,a.status,initial_extent/(1024) "Initial KB",next_extent/(1024)"NextKB",max_extents,min_extents,optsize/102 "Opt Size KB",curext "Current Extents" from dba_rollback_segs a,v$rollstat b where a.segment_id = b.usn; prompt prompt**---------------Top 20 Events and System Statistics-------------------------------** prompt col event format a40 heading "Event Name" col Stat format a40 heading "Stat Name" select * from ( select name "Stat",value from v$sysstat order by value desc ) where rownum <= 20 ; select * from ( select event,total_waits from v$system_event order by total_waits desc ) where rownum <= 20; prompt prompt**---------------Buffer Cache statistics-------------------------------** prompt select (1-(a.value/(b.value+c.value))) *100 "Buffer Cache Hit ratio" from v$sysstat a,v$sysstat b,v$sysstat c where a.name = 'physical reads' and b.name = 'consistent gets' and c.name = 'db block gets'; col name format a20 heading "Buffer Pool Name" select name,free_buffer_wait,write_complete_wait,buffer_busy_wait,db_block_gets,consistent_gets,physical_reads,physical_writes from v$buffer_pool_statistics; prompt prompt prompt prompt**---------------File I/O statistics-------------------------------** prompt col file# format 99 heading "File No" select file#,PHYRDS "Physical Reads",PHYWRTS "Physical Writes",READTIM "Read Time",WRITETIM "Write Time",AVGIOTIM "Avg Time" from v$filestat; set feedback on