Académique Documents
Professionnel Documents
Culture Documents
_database_id,p14_docid,p14_show_header,p14_show_help,p14_black_frame,p14_font:NO
T,146599.1,1,1,1,helvetica
*/
SELECT SUM(PINS) "EXECUTIONS",
SUM(RELOADS) "CACHE MISSES WHILE EXECUTING"
FROM V$LIBRARYCACHE;
SELECT substr(sql_text,1,40) "SQL",
count(*) ,
sum(executions) "TotExecs"
FROM v$sqlarea
WHERE executions < 5
GROUP BY substr(sql_text,1,40)
HAVING count(*) > 30
ORDER BY 2;
SELECT * FROM X$KSMLRU WHERE ksmlrsiz > 0;
select '0 (<140)' BUCKET, KSMCHCLS, KSMCHIDX, 10*trunc(KSMCHSIZ/10) "From",
count(*) "Count" , max(KSMCHSIZ) "Biggest",
trunc(avg(KSMCHSIZ)) "AvgSize", trunc(sum(KSMCHSIZ)) "Total"
from x$ksmsp
where KSMCHSIZ<140
and KSMCHCLS='free'
group by KSMCHCLS, KSMCHIDX, 10*trunc(KSMCHSIZ/10)
UNION ALL
select '1 (140-267)' BUCKET, KSMCHCLS, KSMCHIDX,20*trunc(KSMCHSIZ/20) ,
count(*) , max(KSMCHSIZ) ,
trunc(avg(KSMCHSIZ)) "AvgSize", trunc(sum(KSMCHSIZ)) "Total"
from x$ksmsp
where KSMCHSIZ between 140 and 267
and KSMCHCLS='free'
group by KSMCHCLS, KSMCHIDX, 20*trunc(KSMCHSIZ/20)
UNION ALL
select '2 (268-523)' BUCKET, KSMCHCLS, KSMCHIDX, 50*trunc(KSMCHSIZ/50) ,
count(*) , max(KSMCHSIZ) ,
trunc(avg(KSMCHSIZ)) "AvgSize", trunc(sum(KSMCHSIZ)) "Total"
from x$ksmsp
where KSMCHSIZ between 268 and 523
and KSMCHCLS='free'
group by KSMCHCLS, KSMCHIDX, 50*trunc(KSMCHSIZ/50)
UNION ALL
select '3-5 (524-4107)' BUCKET, KSMCHCLS, KSMCHIDX, 500*trunc(KSMCHSIZ/500) ,
count(*) , max(KSMCHSIZ) ,
trunc(avg(KSMCHSIZ)) "AvgSize", trunc(sum(KSMCHSIZ)) "Total"
from x$ksmsp
where KSMCHSIZ between 524 and 4107
and KSMCHCLS='free'
group by KSMCHCLS, KSMCHIDX, 500*trunc(KSMCHSIZ/500)
UNION ALL
select '6+ (4108+)' BUCKET, KSMCHCLS, KSMCHIDX, 1000*trunc(KSMCHSIZ/1000) ,
count(*) , max(KSMCHSIZ) ,
trunc(avg(KSMCHSIZ)) "AvgSize", trunc(sum(KSMCHSIZ)) "Total"
from x$ksmsp
where KSMCHSIZ >= 4108
and KSMCHCLS='free'
group by KSMCHCLS, KSMCHIDX, 1000*trunc(KSMCHSIZ/1000);
sname = 'SYSSTATS_MAI
ase when blocks <100 then 0 else (1-((num_rows*avg_row_len )/((case when blocks
=0 then 1 else blocks end)*16384)))*100 end) frag_per
select OWNER,TABLE_NAME,NUM_ROWS,BLOCKS,AVG_ROW_LEN,CHAIN_CNT,LAST_ANALYZED
from dba_tables
where OWNER not in
('SYS','SYSTEM','WMSYS','WKSYS','XDB','QS','QS_CBADM','QS_CS','QS_ES','QS_OS','
QS_WS','ODM','ODM_MTR','OLAPSYS','ORDSYS','OUTLN',
'DBSNMP','SYSMAN','MGMT_VIEW','SYS','SYSTEM','MDSYS','ORDSYS','EXFSYS','DMSYS'
,'SCOTT','WMSYS','TSMSYS','BI','PM','MDDATA','IX','CTXSYS','ANONYMOUS',
'SH','OUTLN','DIP','OE','HR','XDB','ORDPLUGINS','SI_INFORMTN_SCHEMA','OLAPSYS')
and NUM_ROWS >=10000
order by NUM_ROWS;
Prompt **End Report Tables that have more than 10000 rows***********************
********
--Prompt **Report on Indexes ***************************************************
set
set
col
col
col
col
col
col
col
linesize 350
pagesize 100
index_owner for a20
table_name for a30
index_name for a30
column_name for a32
column_position for 99
CLUSTERING_FACTOR for 999,999,999,999,999
LEAF_BLOCKS for 999,999,999
linesize 350
pagesize 100
index_owner for a20
table_name for a30
index_name for a30
column_name for a32
column_position for 99
CLUSTERING_FACTOR for 999,999,999,999,999
LEAF_BLOCKS for 999,999,999
linesize 191
pagesize 100
username for a16
cpu_time_secs for 999,999,999,999
elapsed_time_secs for 999,999,999,999,999
Elap_Exec for 999,999,999,999
ROWS_PROCESSED for 999,999,999,999,999
set
col
col
col
col
col
pagesize 100
username for a16
cpu_time_secs for 999,999,999,999
elapsed_time_secs for 999,999,999,999,999
Elap_Exec for 999,999,999,999
LAST_LOAD_TIME for a20
linesize 250
pagesize 100
buffer_gets for 999,999,999,999
dr_per_exec for 999,999,999,999
gets_per_exec 999,999,999,999
"Percent_disk" for 99.999
sql_text for a64
set
set
col
col
col
col
col
col
linesize 126
pagesize 100
buffer_gets for 999,999,999,999
rows_per_exec for 999,999,999,999
gets_per_exec for 999,999,999,999
ROWS_PROCESSED for 999,999,999,999
"Percent_disk" for 99.999
sql_text for a64
Prompt *Output SQL and Plans for long running SQL statements; 10g and higher****
******************************
set linesize 200
set serveroutput on size 20000000
DECLARE
SQLID V$SQL.SQL_ID%TYPE;
CHILD V$SQL.CHILD_NUMBER%TYPE;
v_sqlplan VARCHAR2(200);
v_sqltext v$sqltext.sql_text%type;
/* Get the identifiers for the slow SQL, limit output to the slowest 20, this sh
ould catch 95% of the */
cursor ids_for_plans is
select distinct sql_id,CHILD_NUMBER from (
select a.sql_id,a.CHILD_NUMBER
from v$sql a, v$sqltext b
where
a.address=b.address
and
(
ELAPSED_TIME*0.000001>5
or executions > 1000
) order by ELAPSED_TIME desc
) where rownum <=20;
/*Get the SQL based on the slow SQL identifiers */
cursor cur_sqltext (v_sqlid V$SQL.SQL_ID%TYPE, v_child V$SQL.CHILD_NUMBE
R%TYPE) is
select b.sql_text
from v$sql a, v$sqltext b
where
a.address=b.address and
a.sql_id=v_sqlid
and a.child_number=v_child
order by b.piece;
/*Get the Plan based on the slow SQL identifiers */
cursor cur_output (v_sqlid V$SQL.SQL_ID%TYPE, v_child V$SQL.CHILD_NUMBER%TYPE) i
s
select * from table(dbms_xplan.display_cursor(v_SQLID,v_CHILD));
BEGIN
open ids_for_plans;
loop
/* Get the SQLID and cursor Child number */
fetch ids_for_plans into SQLID,CHILD;
--dbms_output.put_line(SQLID);
--dbms_output.put_line(CHILD);
/*Display the SQL */
open cur_sqltext (SQLID,CHILD);
loop
fetch cur_sqltext into v_sqltext;
--dbms_output.put_line('The SQL is: ');
dbms_output.put_line(v_sqltext );
exit when cur_sqltext%NOTFOUND;
end loop;
close cur_sqltext;
/* Display the Plan */
open cur_output(SQLID,CHILD);
loop
fetch cur_output into v_sqlplan;
--dbms_output.put_line('The Plan is: ');
dbms_output.put_line(v_sqlplan );
exit when cur_output%NOTFOUND;
end loop;
close cur_output;
dbms_output.put_line('-------------------------------------------------');
dbms_output.put_line('-------------------------------------------------');
exit when ids_for_plans%NOTFOUND;
END LOOP;
close ids_for_plans;
END;
.
run;
Prompt *End Output SQL and Plans for long running SQL statements****************
******************
--------------------------Prompt -->The rest of this diagnostic script depends on the database being licen
sed to run the
Prompt -->Oracle tuning and Diagnostic package which are purchased from Oracle a
t an additional cost of @$3000.00 each
Prompt -->There is no record in the database of whether they have been purchased
or not,
Prompt -->A receipt of their purchase from Oracle is the proof they have been li
censed.
Prompt
accept additional_packages_installed default no prompt 'Is this database license
d to run these packages? [yes/no; default = no]'
set linesize 200
set serveroutput on size 20000000
/*
WHENEVER SQLERROR EXIT SQL.SQLCODE
begin
SELECT COLUMN_DOES_NOT_EXIST FROM DUAL;
END;
/
*/
WHENEVER SQLERROR EXIT SQL.SQLCODE
DECLARE
var1 number:=0;
var2 number;
cursor cursor_error is
SELECT 1/dummy FROM DUAL;
begin
if to_char('&additional_packages_installed') = to_char('no')
then var1:=2;
dbms_output.put_line(var1);
if var1>1 then
open cursor_error;
dbms_output.put_line('The gather info script has been
intentionally abort');
dbms_output.put_line('because needed Oracle licensing
is not present');
fetch cursor_error into var2;
end if;
end if;
END;
.
run;
Prompt *Start Output SQL and Plans for long running SQL statements from the AWR
respository*********************************
set linesize 500
set serveroutput on size 20000000
DECLARE
SQLID DBA_HIST_SQLSTAT.SQL_ID%TYPE;
v_elapsed
DBA_HIST_SQLSTAT.ELAPSED_TIME_DELTA%TYPE;
v_cpu_tot DBA_HIST_SQLSTAT.CPU_TIME_DELTA%TYPE;
v_Disk_reads_tot DBA_HIST_SQLSTAT.DISK_READS_DELTA%TYPE;
v_buffer_gets_tot DBA_HIST_SQLSTAT.BUFFER_GETS_DELTA%TYPE;
v_executions_tot DBA_HIST_SQLSTAT.EXECUTIONS_DELTA%TYPE;
v_sqlplan VARCHAR2(200);
v_sqltext v$sqltext.sql_text%type;
/* Get the identifiers for the slow SQL, limit output to the slowest 20, this sh
ould catch 95% of the */
cursor ids_for_plans is
select distinct sql_id from (
select b.SQL_ID
from dba_hist_sql_plan a, dba_hist_sqlstat b where
a.sql_id=b.sql_id and
a.object_owner is not null and
a.object_owner not in ('SYS','SYSTEM','WMSYS','WKSYS','
XDB','QS','QS_CBADM','QS_CS','QS_ES','QS_OS','QS_WS','ODM','ODM_MTR','OLAPSYS','
ORDSYS','OUTLN',
'DBSNMP','SYSMAN','MGMT_VIEW','SYS','SYSTEM','MDSYS','OR
DSYS','EXFSYS','DMSYS','SCOTT','WMSYS','TSMSYS','BI','PM','MDDATA','IX','CTXSYS'
,'ANONYMOUS',
'SH','OUTLN','DIP','OE','HR','XDB','ORDPLUGINS','SI_INFO
RMTN_SCHEMA','OLAPSYS','DBMS_XPLAN','DBMS_SPACE')
order by b.ELAPSED_TIME_TOTAL
) where rownum <=20;
/*Get the SQL based on the slow SQL identifiers */
cursor cur_sqlresources (v_sqlid V$SQL.SQL_ID%TYPE) is
select distinct ELAPSED_TIME_DELTA,CPU_TIME_DELTA,DISK_READS_DELTA,BUFFE
R_GETS_DELTA,EXECUTIONS_DELTA from (
select b.SQL_ID,b.ELAPSED_TIME_DELTA,b.CPU_TIME_DELTA,b.
DISK_READS_DELTA,b.BUFFER_GETS_DELTA,b.EXECUTIONS_DELTA
from dba_hist_sqlstat b where
b.sql_id =v_sqlid );
/*Get the Plan based on the slow SQL identifiers */
Prompt *End Output SQL and Plans for long running SQL statements from the AWR re
spository*********************************
Prompt *Start Output AWR and ADDM reports for the 8 highest resource consuming s
nap intervals in the last 7 days*********************************
id number;
name varchar2(100) ;
BEGIN
open database_id;
fetch database_id into v_dbid;
close database_id;
open instance_id;
fetch instance_id into v_iid;
close instance_id;
/*get the snap ids reports */
open snap_id ;
loop
fetch snap_id into v_snap_id_start,v_snap_id_end;
dbms_output.put_line('The begining and end snap ids are: ' || v_snap_id_start ||
' & '||v_snap_id_end);
dbms_output.put_line('AWR Snap**************************************************
**********************');
/*get the AWR reports*/
open awr_output(v_dbid,v_iid,v_snap_id_start,v_s
nap_id_end);
loop
fetch awr_output into v_output_awr;
dbms_output.put_line(v_output_awr);
exit when awr_output%NOTFOUND;
end loop;
close awr_output;
/*get the ADDM reports */
name :='';
dbms_advisor.create_task('ADDM',id,name,'',null);
:task_name := name;
-- set time window
dbms_advisor.set_task_parameter(name, 'START_SNAPSHOT', v_s
nap_id_start);
dbms_advisor.set_task_parameter(name, 'END_SNAPSHOT', v_sna
p_id_end);
-- set instance number
dbms_advisor.set_task_parameter(name, 'INSTANCE', v_iid);
-- set dbid
dbms_advisor.set_task_parameter(name, 'DB_ID', v_dbid);
-- execute task
dbms_advisor.execute_task(name);
open addm_output(name);
for i in 1..1 loop
--dbms_output.put_line('OUTPUTTING THE ADDM REPORT');
dbms_output.put_line('The begining and end snap ids are: ' || v_snap_id_start ||
-- end;
end;
/
Prompt *End Output AWR and ADDM reports for the 8 highest resource consuming sna
ps*********************************
spool off