0% found this document useful (0 votes)
41 views23 pages

Oracle Database Health Check SQL

Uploaded by

JODE
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
41 views23 pages

Oracle Database Health Check SQL

Uploaded by

JODE
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd

/*******************************************************************

* File: olm_ora_check.sql
* Type: SQL*Plus script
* Author: OLM Technical Support Services
* Begin_Date: 04-JAN-05
*
* Description: OLM Oracle Database health check report SQL
*
* Modifications:
* 08-JAN-05
*
*******************************************************************/

set verify off feedback off serveroutput on size 1000000 pages 10000
set trimout on trimspool on linesize 2000
set heading on

col OBJECT_NAME for a30


col event for a30
col script for a100
col aux_name for a20
col member for a50
col �Ƿ�‫ װ‬for a30
col segment_name for a30
col segment_type for a15
col owner for a15
col �û��� for a15
col username for a15
col ��ռ��� for a10
col default_tablespace for a15
col temporary_tablespace for a15
col file_name for a50
col Լ������ for a10
col �Զ��չ for a8
col id for 99
col account_status for a20
col group# for 99
col archived for a8
col PARAMETER for a40
col ѡ����� for a40
COL ������� FOR A30
col ����ֵ for a55

spool SE_oracle_check_out.txt
PROMPT
PROMPT һ�������Ϣ

--Windows NT systeminfo

--host top
--host vmstat 4 5
--host iostat

-- HP���‫ � �װ‬glance����ʹ��glance��IBM���‫ � �װ‬svmon����ʹ��svmon

--�����
-- $ uname -a
--�����
ͺ
--HP # model

--�‫˰ں‬汾
--HP # getconf KERNEL_BITS
--AIX # /usr/sbin/bootinfo -K
--Solaris # isainfo -kv

--����ϵͳ�汾
--AIX $ oslevel -r
--HP, Linux, Solaris $ uname -a
--Tru64 $ /usr/sbin/sizer -v

--������Ϣ
--HP $ bdf
--others $ df -k

--�����‫�ڴ‬
--AIX $ /usr/sbin/lsattr -E -l sys0 -a realmem, lsattr -El mem0
--Linux $ /usr/sbin/dmesg | grep "Physical:"
--HP $ grep MemTotal /proc/meminfo
--Solaris $ /usr/sbin/prtconf | grep "Memory size"
--Tru64 $ /bin/vmstat -P | grep "Total Physical Memory"

--�‫� � � � � � �ڴ‬
-- $ vmstat 20 5

--�������С
--AIX $ /usr/sbin/lsps -a
--HP $ /usr/sbin/swapinfo -a, swapinfo -m
--Linux, Tru64 $ /sbin/swapon -s
--Solaris $ /usr/sbin/swap -1

--CPU ��Ϣ
--Solaris # psrinfo -v|grep "Status of processor"|wc -l
--AIX # lsdev -Cc processor, lsattr -El proc0
--���� # lsdev -C|grep Process|wc -l

--CPU������
--Solaris $ sar -u -M 20 5
--Others $ sar -u 20 5

--�������
--AIX $ netstat -in, netstat -rn

create or replace procedure olm_tts_print_table( p_query in varchar2 )


AUTHID CURRENT_USER
is
l_theCursor integer default dbms_sql.open_cursor;
l_columnValue varchar2(4000);
l_status integer;
l_descTbl dbms_sql.desc_tab;
l_colCnt number;
begin
execute immediate
'alter session set
nls_date_format=''yyyy-mm-dd hh24:mi:ss'' ';
dbms_sql.parse( l_theCursor, p_query, dbms_sql.native );
dbms_sql.describe_columns
( l_theCursor, l_colCnt, l_descTbl );

for i in 1 .. l_colCnt loop


dbms_sql.define_column
(l_theCursor, i, l_columnValue, 4000);
end loop;

l_status := dbms_sql.execute(l_theCursor);

while ( dbms_sql.fetch_rows(l_theCursor) > 0 ) loop


for i in 1 .. l_colCnt loop
dbms_sql.column_value
( l_theCursor, i, l_columnValue );
dbms_output.put_line
( rpad( l_descTbl(i).col_name, 30 )
|| ': ' ||
l_columnValue );
end loop;
dbms_output.put_line( '-----------------' );
end loop;
execute immediate
'alter session set nls_date_format=''dd-MON-rr'' ';
exception
when others then
execute immediate
'alter session set nls_date_format=''dd-MON-rr'' ';
raise;
end;
/

PROMPT
PROMPT ����ʵ��ſ���Ϣ
PROMPT ==============================

PROMPT
PROMPT --show database
select name ,open_mode,log_mode from v$database;

PROMPT
PROMPT --show instance
select instance_number,instance_name ,status from gv$instance;

PROMPT
PROMPT --show cpu parameter
show parameter cpu_c

PROMPT
PROMPT --show SGA
show sga;

PROMPT
PROMPT --show PGA
SELECT * FROM V$PGASTAT;

PROMPT
PROMPT ����‫ �ݿ‬database��Ϣ
PROMPT ==============================

exec olm_tts_print_table('select * from v$database')

PROMPT
PROMPT �ġ���‫ �ݿ‬ʵ����Ϣ
PROMPT ==============================
exec olm_tts_print_table('select * from v$instance')

----alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss' ;

PROMPT
PROMPT �塢��‫ �ݿ‬ѡ����Ϣ
PROMPT ==============================
prompt ѡ����‫װ‬
COL PARAMETER FOR A20
col value for a10
SELECT PARAMETER,VALUE FROM V$OPTION ;

col ����ֵ for a55


PROMPT
PROMPT ����‫ � �ݿ‬ȱʡ��ʼ������
PROMPT ==============================
COL name FOR A20
col value for a20
SELECT name "para_name",value "para_value" FROM V$PARAMETER where ISDEFAULT='FALSE'
order by name;

PROMPT
PROMPT �ߡ� � � � � � ļ�
PROMPT ==============================
COL NAME FOR a30
SELECT * FROM V$controlfile;

PROMPT
PROMPT �ˡ���‫ � � � �־‬Ϣ
PROMPT ==============================

col member for a30


select a.thread#, a.group#, b.member, b.status, a.bytes/1024/1024
from v$Log a,v$logfile b
where a.group#=b.group# order by thread#
/

PROMPT
PROMPT �š�����ļ�
PROMPT ==============================
COL FILE_NAME FOR a20
col BYTES for 999999999999
SELECT FILE_ID ID,FILE_NAME,TABLESPACE_NAME "TBS_name",BYTES,autoextensible
"auto_extend"
FROM dba_data_files order by tablespace_name;

PROMPT
PROMPT ʮ����ʱ�ļ�
PROMPT ==============================
col FILE_NAME for a30
col BYTES for 99999999999
SELECT FILE_ID ID,FILE_NAME,TABLESPACE_NAME "TBS_name",BYTES,autoextensible
"auto_extend"
FROM dba_temp_files;

PROMPT
PROMPT ʮһ����ռ���Ϣ
PROMPT ==============================

set heading on
col "��ռ���" for a10
--col "��ռ�ʹ����%" heading 'ʹ����' for 999
col "��ռ�ʹ����%" heading 'used_ratio' for 999
--col "��ռ����" heading '���' for 9999999999
col "��ռ����" heading 'total_size' for 99999999999999999
--col "ʣ��ռ��СM" heading 'ʣ��' for 99999999
col "ʣ��ռ��СM" heading 'free_size' for 999999999999999
--col "����ģʽ" heading '����ģʽ' for a10
col "����ģʽ" heading 'manager_mode' for a10
select
a.tablespace_name "TBS_name",a.total "TOTAL_SIZE",
b.free "FREE_SIZE" ,
ceil((1-b.free/a.total)*100) "TBS_UESD_RATIO%",
c.extent_management "MANAGER_MODE"
from
(select
tablespace_name,
sum(nvl(bytes,0))/1024/1024 total
from
dba_data_files
group by tablespace_name
) a,
(select
tablespace_name,
sum(nvl(bytes,0))/1024/1024 free
from
dba_free_space
group by tablespace_name
) b ,
dba_tablespaces c
where
a.tablespace_name=b.tablespace_name
and a.tablespace_name=c.tablespace_name
order by (1-b.free/a.total)*100 desc
/

PROMPT
PROMPT ʮһ�����С��Ϣ
PROMPT ==============================
PROMPT ���ʹ���߼�����exp���‫ � � � � � �ݣ‬СԼ���‫ں‬ϼƴ�С��
col total for 99999999999999999
select nvl(t.owner,'total') "user",
to_char(sum(bytes),'9999999,999,999,999') "used byte"
from dba_segments t
group by rollup(t.owner)
order by 2
/

prompt ʮ������ռ���п����
PROMPT ==============================
prompt ���ҵ��ܸߵ�ֵ��ʹ�úϲ��������д�����п�ʱ������‫��ת‬Ϊ���‫���ع‬
select tablespace_name,count(*) cnt from dba_free_space group by tablespace_name
order by cnt desc
/

PROMPT ʮ��‫�ع‬οռ�����
PROMPT ==============================

col segment_name heading 'Segment' for a18


col tablespace_name heading 'TBS' for a5
col INITIAL_EXTENT heading 'Initial' for 9999999999
col NEXT_EXTENT heading 'Next' for 9999999999
col Min_extents heading 'Min' for 99
col Max_extents heading 'Max' for 99999
col ds.bytes/1024/1024 heading 'Bytes(M)' for 9999.00
col status for a6
select
rb.segment_name,
rb.INITIAL_EXTENT,
rb.NEXT_EXTENT,
rb.MIN_EXTENTS,
rb.MAX_EXTENTS,
rs.optsize,
rb.tablespace_name,
rs.status,
ds.bytes/1024/1024
from dba_rollback_segs rb,
v$rollstat rs,
dba_segments ds
where
rb.segment_id=rs.usn
and rb.segment_name=ds.segment_name
/

PROMPT
PROMPT ʮ�ġ�NLS��������
PROMPT ==============================
SELECT * FROM NLS_Database_Parameters;

PROMPT
PROMPT ʮ�塢��‫��ݿ‬û���ȫ��
PROMPT ==============================
set pages 100 lines 132

column ACCOUNT_STATUS heading 'status' format a10


column username heading 'User' format a8
column default_tablespace heading 'Default' format a22
column temporary_tablespace heading 'Temporary' format a12
column granted_role heading 'Granted Roles' format a37
col profile for a8

clear breaks
break on username on account_status on default_tablespace on temporary_tablespace
on profile

select username,
ACCOUNT_STATUS,
default_tablespace,
temporary_tablespace,
granted_role
from dba_users u,dba_role_privs r
where u.username = r.grantee
order by username
/

PROMPT ʮ������������‫�־‬鵵 Ƶ����


PROMPT ==============================
select to_char(first_time,'yyyy-mm-dd'),thread#,count(*)
from v$log_history
where first_time>sysdate-90
group by to_char(first_time,'yyyy-mm-dd'),thread#
having count(*)>20
order by thread#
/

PROMPT
PROMPT ʮ�ߡ�ʧЧ����
PROMPT ==============================
SELECT OWNER "user_name",OBJECT_NAME,OBJECT_TYPE,CREATED,LAST_DDL_TIME FROM
DBA_OBJECTS WHERE STATUS = 'INVALID'
ORDER BY OWNER,OBJECT_NAME;

PROMPT
PROMPT ʮ�ˡ����õĴ�����
PROMPT ==============================
SELECT owner "user_name",trigger_name,status FROM dba_triggers where status =
'DISABLED';

PROMPT
PROMPT ʮ�š����õ�Լ��
col STATUS format a10
SELECT owner "user_name",constraint_name,decode(constraint_type,'P','premary
key','F','forign key',constraint_type) "constrain mode"
,status
FROM dba_constraints where status = 'DISABLED'
/

PROMPT
PROMPT ��ʮ����Ч������
PROMPT ==============================
SELECT owner "user_name",index_name,status FROM dba_indexes where status =
'UNUSABLE'
/

ͬprompt ��ʮһ�����������һ
ͬ ��ռ�Ķ���
PROMPT ==============================

col owner for a12


col tname for a26
col iname for a26
col tbsname for a15

clear breaks
break on owner on tbsname on tname

select a.owner,
a.tablespace_name tbsname ,
a.table_name tname,
b.index_name iname
from
dba_tables a
,dba_indexes b
where
a.tablespace_name=b.tablespace_name
and b.table_name=a.table_name
and a.owner=b.owner
and b.owner NOT in ('SYS','SYSTEM')
order by owner
/

PROMPT
PROMPT ��ʮ������Ҫ�����
󶨱�SQL( ��� ‫)������ݿ‬
PROMPT ==============================

create or replace function


olm_tts_table_constants( p_query in varchar2 ) return varchar2
as
l_query long;
l_char varchar2(2);
l_in_quotes boolean default FALSE;
begin

select count(*) into n from user_tables where table_name=upper(olm_tts_t1);


if n>0 then
execute immediate 'drop table '||t_name||' cascade constraints';
end if;

end;
/

create table olm_tts_t1 as select sql_text from v$sqlarea;

alter table olm_tts_t1 add sql_text_wo_constants varchar2(1000);

create or replace function


olm_tts_remove_constants( p_query in varchar2 ) return varchar2
as
l_query long;
l_char varchar2(2);
l_in_quotes boolean default FALSE;
begin

for i in 1 .. length( p_query )


loop
l_char := substr(p_query,i,1);
if ( l_char = '''' and l_in_quotes )
then
l_in_quotes := FALSE;
elsif ( l_char = '''' and NOT l_in_quotes )
then
l_in_quotes := TRUE;
l_query := l_query || '''#';
end if;
if ( NOT l_in_quotes ) then
l_query := l_query || l_char;
end if;
end loop;
l_query := translate( l_query, '0123456789', '@@@@@@@@@@' );
for i in 0 .. 8 loop
l_query := replace( l_query, lpad('@',10-i,'@'), '@' );
l_query := replace( l_query, lpad(' ',10-i,' '), ' ' );
end loop;
return upper(l_query);
end;
/
update olm_tts_t1 set sql_text_wo_constants = olm_tts_remove_constants(sql_text);
commit;

COL sql_text_wo_constants FOR A60


COL sql_text FOR A60

select count(*) "hard_parse_number",sql_text_wo_constants from olm_tts_t1 group by


sql_text_wo_constants having count(*) > 100 and rownum <=10 order by 1 desc;
/

PROMPT ��ʮ�� ��Ӧ�����


PROMPT ==============================

PROMPT
PROMPT 1��������‫��ڴ‬ʮ��SQL
set linesize 250
col SQL_TEXT for a56
select * from (
select trunc(t.BUFFER_GETS/t.EXECUTIONS) "buffer/exes",
t.EXECUTIONS "executs",t.SQL_TEXT
from v$sql t where t.EXECUTIONS > 0 order by 1 desc )
where rownum <= 10;

PROMPT
PROMPT 2��TOP 5 �ȴ�event
col event for a28
select EVENT,TOTAL_WAITS, TOTAL_TIMEOUTS, TIME_WAITED, AVERAGE_WAIT from (
select * from v$system_event where event not like '%rdbms%' and event not like
'%message%' and event not like
'SQL*Net%' order by total_waits desc
)
where rownum <=5
/

PROMPT
PROMPT 3�����̶�����SQL
prompt disk_readsһ��ҪС��300�źã�������������̫
�����������õĸ�
set linesize 250
select st.sql_text
from v$sql s, v$sqlarea st
where s.address=st.address
and s.hash_value=st.hash_value
and s.disk_reads > 300000
order by s.disk_reads asc
/

col buffer_gets for 999,999,999,999


col disk_reads for 999,999,999,999
col "% Bad" for 99.999
col sql_text for a64
select
buffer_gets,disk_reads,executions,b.piece,b.sql_text,
((disk_reads*37)+buffer_gets)/tot.sumed*100 "% Bad"
from v$sql a, v$sqltext b,
(select sum((disk_reads*37)+buffer_gets) sumed from v$sql) tot
where a.address=b.address and rownum <=5
order by disk_reads*37 + buffer_gets ,b.piece asc
/

PROMP
PROMPT 4���������������‫�ص‬SQL
set linesize 250
select
sess.username,
sql.sql_text,
sort1.blocks
from v$session sess,
v$sqlarea sql,
v$sort_usage sort1
where
sess.serial# = sort1.session_num
and sort1.sqladdr = sql.address
and sort1.sqlhash = sql.hash_value
and sort1.blocks > 200
order by sort1.blocks asc
/

PROMPT
PROMPT 5��SGA������
PROMPT cache hitҪ����90%--libraryҪ����95%--rowcacheҪ����85%
select * from
(SELECT 1 - (phy.value-phyd.value)/( (cur.value + con.value-phyd.value)) "data
cache ratio"
FROM v$sysstat cur, v$sysstat con, v$sysstat phy,v$sysstat phyd
WHERE cur.name = 'db block gets' AND con.name = 'consistent gets'
AND phy.name = 'physical reads' and phyd.NAME = 'physical reads direct' ),
(select sum(pinhits)/sum(pins) "SQL share pool ratio" from v$librarycache) ,
(select 1-SUM(GETMISSES)/SUM(GETS) "library ratio" from V$ROWCACHE)
/
PROMPT
prompt 6���‫�������ڴ‬
select a.value "Disk Sorts",
b.value "Memory Sorts",
round((100 * b.value) /
decode((a.value + b.value), 0, 1, (a.value + b.value)),
2) "Pct Memory Sorts"
from v$sysstat a, v$sysstat b
where a.name = 'sorts (disk)'
and b.name = 'sorts (memory)'
/

prompt
prompt 7���鿴��‫��ݿ‬еı���,ij����ĸ�session��
set linesize 250
select
a.owner,a.object_name,b.xidusn,b.xidslot,b.xidsqn,b.session_id,b.oracle_username,
b.os_user_name,b.process,b.locked_mode,c.machine,c.status,c.server,c.sid,c.serial#,
c.program
from all_objects a,v$locked_object b,sys.gv_$session c
where ( a.object_id = b.object_id ) and (b.process = c.process ) order by 1,2
/

*prompt
*prompt 8��current run sql statment
*select osuser, username, sql_text from v$session a, v$sqltext b
*where a.sql_address =b.address order by address, piece
*/

PROMPT
PROMPT ��ʮ�ġ�������Ϣ

PROMPT
PROMPT 1��TOP 5 �ȴ�event
col event for a28
select EVENT,TOTAL_WAITS, TOTAL_TIMEOUTS, TIME_WAITED, AVERAGE_WAIT from (
select * from v$system_event where event not like '%rdbms%' and event not like
'%message%' and event not like
'SQL*Net%' order by total_waits desc) where rownum <=5
/

PROMPT
PROMPT 2���鿴�ȵ�����ļ�(�ӵ����ȡʱ���ж�)
SELECT t.file_name, t.tablespace_name,
round(s.singleblkrdtim / s.singleblkrds, 2) AS CS, s.READTIM, s.WRITETIM
FROM v$filestat s, dba_data_files t
WHERE s.file# = t.file_id and rownum<=10 order by cs desc
/

PROMPT
PROMPT 2���鿴 redo��‫�־‬л�Ƶ��
PROMPT
PROMPT 2.1���鿴 redo��‫�־‬л�Ƶ��
select sequence#,to_char(first_time,'yyyymmdd_hh24:mi:ss')
firsttime,round((first_time-lag(first_time) over(order by
first_time))*24*60,2) minutes from v$log_history where first_time > sysdate - 1
order by first_time ,minutes
/

PROMPT
PROMPT 2.2�����lgwr i/o���� (time_waited/total_waits����ʾƽ��lgwrд�����ʱ��
��>1��ʾд�����)
select total_waits,time_waited,average_wait,time_waited/total_waits as avg from
v$system_event where event = 'log file
parallel write'
/

PROMPT
PROMPT 2.3�����������redo���������Ϣ
col value format 999999999999999.99
col name format a20
select name,value from v$sysstat where name like '%redo%'
/

PROMPT
PROMPT 2.4����ѯredo block size
select max(lebsz) from x$kccle;
/

PROMPT
PROMPT 2.5���鿴 redo allocation latch
col name for a30
select name,gets,misses,misses/gets from v$latch_children where name='redo
allocation'
/

PROMPT
PROMPT 2.6���鿴��redo��‫ص‬ȴ��¼�
col event format a40
select event,total_waits,total_timeouts,average_wait from v$system_event where
upper(event) like'%REDO%'
/

PROMPT
PROMPT 2.7���鿴 session redo event
select event,total_waits,total_timeouts,average_wait from v$session_event where
upper(event) like'%REDO%';

PROMPT
PROMPT 2.8���鿴 user commit����
select to_number(value,99999999999) from v$sysstat where name='user commits';

PROMPT
PROMPT 3�����undo
PROMPT

PROMPT
PROMPT 3.1�� �‫�ع‬ε��������
col ratio format 999999.999
select name, waits, gets, waits/gets "ratio" from v$rollstat a, v$rollname b where
a.usn = b.usn
/

PROMPT
PROMPT 3.1���鿴 redo��‫�־‬л�Ƶ�ʼ��undo
show parameter undo_
PROMPT 3.1�����undo rollback segment ʹ�����
col name for a12
select name,rssize,extents,latch,xacts,writes,gets,waits from v$rollstat
a,v$rollname b where a.usn=b.usn order by waits
desc
/

select a.redoblocks/b.trancount from (select value redoblocks from v$sysstat where


name='redo blocks written') a ,(select
value trancount from v$sysstat where name='user commits') b
/

PROMPT
PROMPT 3.1������ÿ���Ӳ����undoblk���
PROMPT Undospace=UR*UPS*blocksize + overload(10%),����undo tablespace��С
select sum(undoblks)/sum((end_time-begin_time)*24*60*60) from v$undostat;

show parameter block_size


show parameter undo_retention

PROMPT
PROMPT 3.1����ѯundo������Ϣ
COL undob FORMAT 99990;
COL trans FORMAT 99990;
COL snapshot2old FORMAT 9999999990;
SELECT undoblks "UndoB", txncount "Trans"
,maxquerylen "LongestQuery", maxconcurrency "MaxConcurrency"
,ssolderrcnt "Snapshot2Old", nospaceerrcnt "FreeSpaceWait"
FROM v$undostat
/

PROMPT
PROMPT 3.1����ѯrollback ����ϸ��Ϣ(�������,�չ����,ƽ�������
�����)
COL n.name FORMAT a6;
SELECT n.name "RBS", s.extends "Extends", s.shrinks "Shrinks"
,s.wraps "Wraps", s.aveshrink "AveShrink"
,s.aveactive "AveActive"
FROM v$rollname n JOIN v$rollstat s USING(usn)
WHERE n.name != 'SYSTEM'
/

PROMPT
PROMPT 3.1����ѯ��ǰrollback segmentʹ�����
COL n.name FORMAT a8;
SELECT n.name "RBS", s.status, s.waits, s.gets, to_char(s.writes,'9999999999999')
,s.xacts "Active Trans"
FROM v$rollname n JOIN v$rollstat s USING(usn)
WHERE n.name != 'SYSTEM'
/
PROMPT
PROMPT 3.1����ѯʹ��rollback segmentʱ�ȴ����
SELECT ROUND(SUM(waits/gets)*100,2)||'%' "Contention" FROM
v$rollstat
/

PROMPT
PROMPT 3.1����ѯʹ��rollback segmentʱ�ȴ���ʼ���ƽ�ֻ�
������
�����
COL contention FORMAT 9999999990;
SELECT AVG(xacts) "Trans per RBS"
,ROUND(SUM(waits/gets)*100,2)||'%' "Contention"
FROM v$rollstat
/

PROMPT
PROMPT 24 ����i/o
PROMPT ------------------------------
PROMPT

PROMPT
PROMPT 4.1 ��‫�ر‬ռ��i/o����1
set linesize 250
col name format a10
col file format a40
col pyw format 99999999999999
col pyr format 99999999999999
col pbw format 99999999999999
col pbr format 99999999999999
select df.tablespace_name name,df.file_name "file",f.phyrds pyr,
f.phyblkrd pbr,f.phywrts pyw, f.phyblkwrt pbw from v$filestat f, dba_data_files df
where f.file# = df.file_id
order by df.tablespace_name
/

PROMPT 4.1 ����ļ�ϵͳ��i/o����2


set linesize 250
col name format a40
select substr(a.file#,1,2) "#", substr(a.name,1,30) "name",
a.status,a.bytes,b.phyrds,b.phywrts from v$datafile a, v$filestat b
where a.file# = b.file#
/

PROMPT
PROMPT 4.1 ��� sga ��������‫������������־‬ʣ�Ӧ��С��1%
set linesize 240
col name format a10
select name,gets,misses,immediate_gets,immediate_misses,
decode(gets, 0, 0, misses / gets * 100) ratio1,
decode(immediate_gets + immediate_misses,0,0,
immediate_misses / (immediate_gets + immediate_misses) * 100) ratio2
from v$latch
where name in ('redo allocation', 'redo copy')
/

PROMPT
PROMPT 4.1 ����‫��ڴ‬Ӳ�̵�������ʣ����ʹ��С�� .10����� sort_area_size
set linesize 240
col name format a8
col name format 99999999999999
select name, value from v$sysstat where name in ('sorts (memory)', 'sorts (disk)')
and rownum <=5
/

PROMPT
PROMPT 4.1 ��Ƭ�̶�
set linesize 250
select tablespace_name,count(tablespace_name) from dba_free_space group by
tablespace_name having count(tablespace_name)>10
/

PROMPT
PROMPT 4.1 segmentʹ�����
set linesize 250
COL username FORMAT a10;
COL segtype FORMAT a10;
SELECT username, segtype, extents "Extents Allocated"
,blocks "Blocks Allocated"
FROM v$tempseg_usage
/

PROMPT
PROMPT 4.1 temporary segmentʹ����� �鿴����ļ���Ϣ,���ļ��϶���Ը����Ҫ�ֶν������� ���top
10
set linesize 240
col datafile format a20
SELECT fs.phyrds "Reads", fs.phywrts "Writes"
,fs.avgiotim "Average I/O Time", df.name "Datafile"
FROM v$datafile df, v$filestat fs WHERE df.file# = fs.file#
and rownum <=10 order by fs.phyrds
/

PROMPT
PROMPT �鿴��������ļ�i/o���,���ļ�̫��,���Ը�дΪtop 10
set linesize 250
COL ts FORMAT a10 HEADING "Tablespace";
COL reads FORMAT 999999999;
COL writes FORMAT 999999999;
COL br FORMAT 999999999 HEADING "BlksRead";
COL bw FORMAT 999999999 HEADING "BlksWrite";
COL rtime FORMAT 999999999;
COL wtime FORMAT 999999999;
SELECT ts.name AS ts, fs.phyrds "Reads", fs.phywrts "Writes"
,fs.phyblkrd AS br, fs.phyblkwrt AS bw
,fs.readtim "RTime", fs.writetim "WTime"
FROM v$tablespace ts, v$datafile df, v$filestat fs
WHERE ts.ts# = df.ts# AND df.file# = fs.file#
UNION
SELECT ts.name AS ts, ts.phyrds "Reads", ts.phywrts "Writes"
,ts.phyblkrd AS br, ts.phyblkwrt AS bw
,ts.readtim "RTime", ts.writetim "WTime"
FROM v$tablespace ts, v$tempfile tf, v$tempstat ts
WHERE ts.ts# = tf.ts# AND tf.file# = ts.file# and rownum <=10 ORDER BY 1
/

PROMPT
PROMPT 4.2����ʹ��CPU����û�session ,cpu used by this session
set linesize 250
col PROG format a38
col OSUSER format a10
select a.sid,spid,status,substr(a.program,1,40) prog,a.terminal,osuser,value/60/100
value
from v$session a,v$process b,v$sesstat c
where c.statistic#=12 and c.sid=a.sid and a.paddr=b.addr
and rownum <=10
order by value desc;

PROMPT
PROMPT 25��activity session or sql statment
PROMPT ==============================

PROMPT 5.1���鿴���й��SQL��䣺
set linesize 250
SELECT SQL_TEXT FROM V$SQL where rownum <=10

PROMPT
PROMPT 5.2�����log_buffer��ʹ�����ֵ���С��1%���������log_buffer �Ĵ�С)
set linesize 250
select rbar.name,rbar.value,re.name,re.value,(rbar.value*100)/re.value||'%' "radio"
from v$sysstat rbar,v$sysstat re
where rbar.name='redo buffer allocation retries'
and re.name='redo entries';

PROMPT
PROMPT 5.2��������sql
Select a.sid, --�ỰID
a.serial#, --�Ựserial#
a.status, --�Ự̬‫״‬
a.last_call_et as "Seconds", --�Ự����ʱ��
a.username, --����Ự��oracle�û�
a.machine, --����Ự�Ĺ���վ
a.osuser, --����Ự�IJ���ϵͳ�û�
a.program, --����Ự�Ŀͻ�����
b.piece, --SQL�����к�
b.sql_text as "SQL" --�û�����ִ�е�sql���
from sys.v_$session a,sys.v_$sqltext b
where a.username is not null and a.last_call_et > 600 and
b.hash_value(+)=a.sql_hash_value and rownum <=10 order by a.sid,a.serial#,b.piece;

PROMPT
PROMPT 5.2�� ��ʱ�����лỰ��Ϣ��ȱʡ600�룬���޸ģ� (���ʱ��: "xdate")
prompt ��ʱ����͵ȴ���ĻỰ��Ϣ��ȱʡ600�룬���޸ģ� (���ʱ��: "xdate")
set linesize 250
Select 'Waiting' as "STATUS", --�ȴ���Դ�ĻỰ
a.sid,a.serial#,a.status as "SESSION_STATUS",
a.last_call_et as "Seconds", --�ȴ�����ʱ��
c.owner||'.'||c.object_name as "OBJECT",
a.username,a.machine,a.osuser,a.program
from sys.v_$session a,
dba_objects c,
sys.v_$Locked_object d
where a.username is not null and
a.last_call_et > 1 and
a.lockwait is not null and
d.session_id(+)=a.sid and
c.object_id = d.object_id
union
Select 'Locking' as "STATUS", --��‫��ס‬Դ�ĻỰ
a.sid,a.serial#,a.status as "SESSION_STATUS",
a.last_call_et as "Seconds", --��������ʱ��
c.owner||'.'||c.object_name as "OBJECT", --����‫�ס‬Ķ���
a.username,a.machine,a.osuser,a.program
from sys.v_$session a,
dba_objects c,
sys.v_$Locked_object d
where a.username is not null and
a.last_call_et > 1 and
a.lockwait is null and
d.session_id(+)=a.sid and
c.object_id = d.object_id
order by status,sid,serial#,object;

PROMPT
PROMPT 5.2�� ���� sql
set linesize 250
select object_name ,machine ,
s.program ,s.sid,s.serial#,p.spid as
from v$locked_object l,dba_objects o ,v$session s ,v$process p
where l.object_id=o.object_id
and l.session_id=s.sid
and s.paddr=p.addr;

PROMPT
PROMPT 5.2�� ˭����˭�‫�ڵ‬
set linesize 250
SELECT a.inst_id,
b.sid,
b.SERIAL#,
c.spid,
'alter system kill session ''' || b.sid || ',' || b.SERIAL# || ''';',
DECODE(a.request, 0, 'Holder: ', 'Waiter: ') || a.sid sess,
a.id1,
a.id2,
a.lmode,
a.request,
a.type,
b.EVENT,
b.P1TEXT,
b.p1,
b.p2text,
b.p2,
b.P3TEXT,
b.p3,
b.STATUS,
b.machine,
b.taddr
FROM gV$LOCK a, gv$session b, gv$process c
WHERE (a.id1, a.id2, a.type) IN
(SELECT c.id1, c.id2, c.type FROM gV$LOCK c WHERE c.request > 0)
and a.INST_ID = b.INST_ID
and a.SID = b.SID
and b.INST_ID = c.INST_ID(+)
and b.PADDR = c.ADDR(+)
ORDER BY a.id1, a.request

PROMPT
PROMPT 5.2�� ��ȡtop 10 ��segment
set linesize 250
col objct_name for a30
select * from
(select
ob.owner, ob.object_name, sum(b.tch) Touchs
from x$bh b , dba_objects ob
where b.obj = ob.data_object_id
and b.ts# > 0
group by ob.owner, ob.object_name
order by sum(tch) desc)
where rownum <=10

PROMPT
PROMPT 5.1 ����������object
set linesize 250
select * from (select owner,object_name,value from v$segment_statistics where
statistic_name='physical reads' order by value desc) w
here rownum<=10

PROMPT
PROMPT 5.1 �鿴�ȵ�����ļ�(�ӵ����ȡʱ���ж�)
set linesize 250

SELECT t.file_name,
t.tablespace_name,
round(s.singleblkrdtim / s.singleblkrds, 2) AS CS,
s.READTIM,
s.WRITETIM
FROM v$filestat s, dba_data_files t
WHERE s.file# = t.file_id and rownum<=10 order by cs desc

PROMPT
PROMPT 5.1 ��redo �����‫�־‬л�Ƶ��
set linesize 250
select sequence#,to_char(first_time,'yyyymmdd_hh24:mi:ss')
firsttime,round((first_time-lag(first_time) over(order by first_time))*24
*60,2) minutes from v$log_history where first_time > sysdate - 1 order by
first_time ,minutes;

PROMPT
PROMPT 5.1 ���lgwr i/o���� (time_waited/total_waits����ʾƽ��lgwrд�����ʱ��
��>1��ʾд�����)
set linesize 250
select total_waits,time_waited,average_wait,time_waited/total_waits as avg from
v$system_event where event = 'log file parallel writ
e';

PROMPT
PROMPT ��ʮ�塢���ͽ���
PROMPT

prompt
prompt #��ѯ��������library cache�У���������ִ�д�������sql(����*ִ��)
set linesize 250
COL sql_text FORMAT A90;
SELECT * FROM(
SELECT parse_calls*executions "Product", parse_calls
"Parses"
,executions "Execs", sql_text FROM v$sqlarea ORDER BY 1 DESC)
WHERE ROWNUM <= 10;

prompt
prompt #�鿴 shared pool��,row cache��ϸ��Ϣ
set linesize 250
SELECT COUNT "Entries", GETS "Requests", GETMISSES "Misses"
,MODIFICATIONS "DML Activity", parameter "Area"
FROM v$rowcache;

prompt
prompt #�鿴 shared pool����
set linesize 250
SELECT (SELECT ROUND(value/1024/1024,0) FROM v$parameter
WHERE name = 'shared_pool_size') "Current Mb"
, shared_pool_size_for_estimate "Projected Mb"
, ROUND(shared_pool_size_factor*100) "%"
, ESTD_LC_SIZE "Library Mb"
, ESTD_LC_TIME_SAVED "Parse Savings"
,to_char(ESTD_LC_MEMORY_OBJECT_HITS,'999999999999') "Hits"
FROM v$shared_pool_advice
ORDER BY 1;

prompt
prompt #�鿴 library cache �‫)���������(�������ڴ‬
set linesize 250
SELECT lc_namespace "Library"
,LC_INUSE_MEMORY_OBJECTS "Objects"
,LC_INUSE_MEMORY_SIZE "Objects Mb"
,LC_FREEABLE_MEMORY_OBJECTS "Freeable Objects"
,LC_FREEABLE_MEMORY_SIZE "Freeable Mb"
FROM v$library_cache_memory;

prompt
prompt �鿴 pga����
set linesize 250
SELECT (SELECT ROUND(value/1024/1024,0) FROM v$parameter
WHERE name = 'pga_aggregate_target') "Current Mb"
, ROUND(pga_target_for_estimate/1024/1024,0) "Projected Mb"
, ROUND(estd_pga_cache_hit_percentage) "%"
FROM v$pga_target_advice
ORDER BY 2;

prompt
prompt tabase read buffer cache hit ratio =1 � (physical reads / (db block gets +
consistent gets))
set linesize 250
SELECT to_char(value,'9999999999999'), name FROM V$SYSSTAT WHERE name IN
('physical reads', 'db block gets', 'consistent gets');

prompt
prompt #��ѯ��‫�������ݿ‬
set linesize 250
SELECT 'Database Buffer Cache Hit Ratio ' "Ratio"
, ROUND((1-
((SELECT SUM(value) FROM V$SYSSTAT WHERE name = 'physical reads')
/ ((SELECT SUM(value) FROM V$SYSSTAT WHERE name = 'db block gets')
+ (SELECT SUM(value) FROM V$SYSSTAT WHERE name = 'consistent gets')
))) * 100)||'%' "Percentage"
FROM DUAL;

prompt
prompt #�鿴 cache������pool,�������
COL pool FORMAT a10;
SELECT a.name "Pool", a.physical_reads, a.db_block_gets
, a.consistent_gets
,(SELECT ROUND((1-(physical_reads / (db_block_gets + consistent_gets)))*100)
FROM v$buffer_pool_statistics
WHERE db_block_gets+consistent_gets != 0
AND name = a.name) "Ratio"
FROM v$buffer_pool_statistics a;

prompt
prompt # �鿴��‫�ݿ‬cache��keep����Щobject
set linesize 250
COL table_name FORMAT A16
COL index_name FORMAT A16
SELECT table_name AS "Table", NULL, buffer_pool, cache FROM
user_tables
WHERE buffer_pool != 'DEFAULT' OR TRIM(cache)='Y'
UNION
SELECT table_name, index_name, NULL, buffer_pool FROM
user_indexes
WHERE buffer_pool != 'DEFAULT'
ORDER BY 1, 2 NULLS FIRST;

prompt
prompt #��ѯrollback ����ϸ��Ϣ(�������,�չ����,ƽ�������
�����)
set linesize 250
COL n.name FORMAT a8;
SELECT n.name "RBS", s.extends "Extends", s.shrinks
"Shrinks"
,s.wraps "Wraps", s.aveshrink "AveShrink"
,s.aveactive "AveActive"
FROM v$rollname n JOIN v$rollstat s USING(usn)
WHERE n.name != 'SYSTEM';

prompt
prompt #��ѯ��ǰrollback segmentʹ�����
COL n.name FORMAT a8;
SELECT n.name "RBS", s.status, s.waits, s.gets, to_char(s.writes,'9999999999999')
,s.xacts "Active Trans"
FROM v$rollname n JOIN v$rollstat s USING(usn)
WHERE n.name != 'SYSTEM';

prompt
prompt ��ѯʹ��rollback segmentʱ�ȴ����
set linesize 250
SELECT ROUND(SUM(waits/gets)*100,2)||'%' "Contention" FROM
v$rollstat;

prompt
prompt ��ѯʹ��rollback segmentʱ�ȴ���ʼ���ƽ�ֻ�
������
�����
set linesize 250
COL contention FORMAT 9999999990;
SELECT AVG(xacts) "Trans per RBS"
,ROUND(SUM(waits/gets)*100,2)||'%' "Contention"
FROM v$rollstat;

prompt
prompt 27.�鿴��������ָ����Ϣ(�ȴ��¼�,latch��,����,����,indexʹ����)
prompt =================================
prompt �鿴��‫�����ݿ‬chain
set linesize 250
SELECT 'Chained Rows ' "Ratio"
, ROUND(
(SELECT SUM(value) FROM V$SYSSTAT
WHERE name = 'table fetch continued row')
/ (SELECT SUM(value) FROM V$SYSSTAT
WHERE name IN ('table scan rows gotten', 'table fetch by
rowid'))
* 100, 3)||'%' "Percentage"
FROM DUAL;
prompt
prompt ���‫)��������(����������ڴ‬
set linesize 250
SELECT 'Sorts in Memory ' "Ratio"
, ROUND(
(SELECT SUM(value) FROM V$SYSSTAT WHERE name = 'sorts (memory)')
/ (SELECT SUM(value) FROM V$SYSSTAT
WHERE name IN ('sorts (memory)', 'sorts (disk)')) * 100, 5)
||'%' "Percentage"
FROM DUAL;

prompt
prompt �����ļ�����ȡ���Զ��չ
set linesize 250
col file_name format a60
select file_name from
(SELECT file_name,BYTES,autoextensible FROM dba_data_files
UNION ALL
SELECT file_name,BYTES,autoextensible FROM DBA_TEMP_FILES)
t where autoextensible = 'YES'
ORDER BY BYTES DESC
/

set heading off


prompt ����timed_statistics��������Ϊtrue����ǰֵΪFALSE
set linesize 250
select * from v$parameter where name = 'timed_statistics'
and value = 'FALSE';
prompt

prompt ����optimizer_index_caching��������Ϊ90����ǰֵΪ0
select * from v$parameter where name = 'optimizer_index_c
aching' and value = '0';
prompt

prompt ����optimizer_index_cost_adj��������Ϊ10��50����ǰֵΪ100��
select * from v$parameter where name = 'optimizer_
index_cost_adj' and value = '100';
prompt

prompt ����db_file_multiblock_read_count��������СһЩ����ǰֵΪ16
select * from v$parameter
where name = 'db_file_multiblock_read_count' and value > '16';
prompt

prompt ��Oracle9i�У�����PGA�Ĺ���ʽΪAUTO
select '��Oracle9i�У�����PGA�Ĺ���ʽΪAUTO��' from v$parameter
where name = 'workarea_size_policy' and value <> 'AUTO';
prompt

prompt racle9i�н���UNDO�Ĺ���ʽΪAUTO
select * from v$parameter
where name = 'undo_management' and value <> 'AUTO';
prompt

set heading on
prompt Ĭ�ϱ�ռ 䲻 ӦΪSYSTEM���û�
select username from dba_users
where default_tablespace = 'SYSTEM' and username not in ('SYS', 'OUTLN','SYSTEM');
prompt

prompt ��ʱ��ռ 䲻 ӦΪSYSTEM���û�


select username from dba_users where temporary_tablespace = 'SYSTEM';
prompt

prompt ��ʱ��ռ 䲻 ӦΪPERFANET���û�


select username from dba_users where temporary_tablespace in
(select tablespace_name from dba_tablespaces where contents =
'PERMANENT' );
prompt

PROMPT ϵͳ��ռ��з�SYS�Ķ���
select OWNER,SEGMENT_NAME,SEGMENT_TYPE--,
--decode(segment_type,
--'TABLE','alter table '||OWNER||'.'||SEGMENT_NAME||' MOVE TABLESPACE
&'||'TABLESPACE;' ,
--'INDEX','alter index '||OWNER||'.'||SEGMENT_NAME||' REBUILD TABLESPACE
&'||'TABLESPACE NOLOGGING;',
--null) SCRIPT
from dba_segments t
where t.tablespace_name = 'SYSTEM'
AND OWNER NOT IN ('SYS','OUTLN','SYSTEM','WMSYS')
/
PROMPT

PROMPT ======================================
PROMPT =========end end end end end =========
PROMPT ======================================
drop function olm_tts_remove_constants ;
drop olm_tts_table_constants ;
drop table olm_tts_t1;
drop procedure olm_tts_print_table;

PROMPT
PROMPT
spool off
exit
--ed &report_name

You might also like