2026-03-12 20:23:15

This commit is contained in:
root
2026-03-12 21:23:47 +01:00
parent eab4b36eca
commit 93039b8489
3332 changed files with 699614 additions and 0 deletions

2478
vg/Exadata_commands.txt Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,114 @@
--------------------------------------------------------------------------------
-- ENABLLING LOGGING
BEGIN
SYS.DBMS_CUBE_LOG.ENABLE(NULL, NULL, 3, 'CUBE_BUILD_LOG');
END ;
/
--------------------------------------------------------------------------------
-- LOAD DIMENSIONS
BEGIN
EXECUTE IMMEDIATE ' ALTER SESSION ENABLE PARALLEL DML ' ;
EXECUTE IMMEDIATE ' ALTER TABLE CRM_DW_OWN.DIM_CONTACT_PARTNERSHIP PARALLEL 12 ' ;
DBMS_CUBE.BUILD(
'
CRM_DW_OWN.CONTACT_PARTNERSHIPS_DIM USING
(
LOAD NO SYNCH,
COMPILE SORT
),
CRM_DW_OWN.FIRM_DIM USING
(
LOAD NO SYNCH,
COMPILE SORT
),
CRM_DW_OWN.OFFICE_DIM USING
(
LOAD NO SYNCH,
COMPILE SORT
),
CRM_DW_OWN.RETAILPRODUCT_DIM USING
(
LOAD NO SYNCH,
COMPILE SORT
),
CRM_DW_OWN.TERRITORY_2_DIM USING
(
LOAD NO SYNCH,
COMPILE SORT
),
CRM_DW_OWN.TERRITORY_3_DIM USING
(
LOAD NO SYNCH,
COMPILE SORT
),
CRM_DW_OWN.TERRITORY_4_DIM USING
(
LOAD NO SYNCH,
COMPILE SORT
),
CRM_DW_OWN.TERRITORY_5_DIM USING
(
LOAD NO SYNCH,
COMPILE SORT
),
CRM_DW_OWN.TERRITORY_DIM USING
(
LOAD NO SYNCH,
COMPILE SORT
)',
'CCCCCCCCC', -- refresh method
false, -- refresh after errors
2, -- parallelism
false, -- atomic refresh
false, -- automatic order
false -- add dimensions
);
EXECUTE IMMEDIATE ' ALTER TABLE CRM_DW_OWN.DIM_CONTACT_PARTNERSHIP NOPARALLEL ' ;
END;
/
--------------------------------------------------------------------------------
-- LOAD TRANSCTION_CUBE
BEGIN
EXECUTE IMMEDIATE ' ALTER SESSION ENABLE PARALLEL DML ' ;
EXECUTE IMMEDIATE ' ALTER TABLE CRM_DW_OWN.FACT_TRANSACTIONS PARALLEL 8 ' ;
DBMS_CUBE.BUILD(
' CRM_DW_OWN.TRANSACTION_CUBE USING
( LOAD PRUNE,
SOLVE
)',
'S', -- refresh method
false, -- refresh after errors
6, -- parallelism
false, -- atomic refresh
true, -- automatic order
false -- add dimensions
);
EXECUTE IMMEDIATE ' ALTER TABLE CRM_DW_OWN.FACT_TRANSACTIONS NOPARALLEL ' ;
END;
/
--------------------------------------------------------------------------------
-- UPDATE BUILD_TYPE
UPDATE CRM_DW_OWN.BUILD_TYPE
SET BUILD_FLAG = 'T',
UPDATE_DT = SYSTIMESTAMP
WHERE (TARGET_NAME = 'CRM_DW_OWN.DIM_FIRM' AND BUILD_FLAG = 'F')
OR (TARGET_NAME = 'CRM_DW_OWN.DIM_OFFICE' AND BUILD_FLAG = 'F')
OR (TARGET_NAME = 'CRM_DW_OWN.DIM_CONTACT_PARTNERSHIP' AND BUILD_FLAG = 'F')
OR (TARGET_NAME = 'CRM_DW_OWN.FACT_TRANSACTIONS' AND BUILD_FLAG = 'F');
COMMIT ;

BIN
vg/TPT_public.zip Normal file

Binary file not shown.

42
vg/TimesTen_commands.txt Normal file
View File

@@ -0,0 +1,42 @@
Check for connection DSN name in following odbc.ini files.
############################
# ODBC ini file locations
############################
/opt/TimesTen/tt112230/info/sys.odbc.ini
############################
# Start/Stop/Restart Timesten MAIN daemon
# -force Starts or stops the TimesTen main daemon, even when warnings are returned.
ttDaemonAdmin [-force] {-start | -stop | -restart}
############################
# Start/Stop/Restart Timesten Server daemon
# -force immediately stops the server processes.
ttDaemonAdmin [ -startserver | -restartserver ]
ttDaemonAdmin [-force] -stopserver
ttDaemonAdmin
############################
# Display Timesten status
ttStatus {-h | -help | -?}
ttStatus {-V | -version}
ttStatus [-v] [-r secs] [-[no]pretty]
ttStatus [-r secs] [-[no]pretty] {DSN | -connStr connection_string | dspath}
############################
# Transaction
############################
ttIsql -connStr "DSN=aceds;"
Command> call ttLogHolds;
Command>
############################
# Display Query Plan
############################
ttIsql -connStr "DSN=aceds;"
Command> call ttSQLCmdQueryPlan(25215090200);

3854
vg/_README.htm Normal file

File diff suppressed because it is too large Load Diff

BIN
vg/_README.xls Normal file

Binary file not shown.

338
vg/amm_info.sql Normal file
View File

@@ -0,0 +1,338 @@
@@header
set term off
/*
*
* Author : Vishal Gupta
* Purpose : Display Tablespace usage
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -------------------------------------------------
* 26-Jan-15 Vishal Gupta Renamed oper_count heading to "Resize Oper Count"
* 24-FEB-14 Vishal Gupta Modified to make instance specific columns dynamic.
* 28-MAY-12 Vishal Gupta Fixed to differentiate between instance specific
* and generic (*.param) parameter values in spfile
* 14-MAR-12 Vishal Gupta Modified to make it RAC friendly
* 15-SEP-08 Vishal Gupta Created
*
*/
set term on
define _IF_INST1_EXISTS="--"
define _IF_INST2_EXISTS="--"
define _IF_INST3_EXISTS="--"
define _IF_INST4_EXISTS="--"
define _IF_INST5_EXISTS="--"
define _IF_INST6_EXISTS="--"
define _IF_INST7_EXISTS="--"
define _IF_INST8_EXISTS="--"
define _IF_INST9_EXISTS="--"
define _IF_INST10_EXISTS="--"
define _IF_INST11_EXISTS="--"
define _IF_INST12_EXISTS="--"
define _IF_INST13_EXISTS="--"
define _IF_INST14_EXISTS="--"
define _IF_INST15_EXISTS="--"
define _IF_INST16_EXISTS="--"
col INST1_EXISTS new_value _IF_INST1_EXISTS noprint
col INST2_EXISTS new_value _IF_INST2_EXISTS noprint
col INST3_EXISTS new_value _IF_INST3_EXISTS noprint
col INST4_EXISTS new_value _IF_INST4_EXISTS noprint
col INST5_EXISTS new_value _IF_INST5_EXISTS noprint
col INST6_EXISTS new_value _IF_INST6_EXISTS noprint
col INST7_EXISTS new_value _IF_INST7_EXISTS noprint
col INST8_EXISTS new_value _IF_INST8_EXISTS noprint
col INST9_EXISTS new_value _IF_INST9_EXISTS noprint
col INST10_EXISTS new_value _IF_INST10_EXISTS noprint
col INST11_EXISTS new_value _IF_INST11_EXISTS noprint
col INST12_EXISTS new_value _IF_INST12_EXISTS noprint
col INST13_EXISTS new_value _IF_INST13_EXISTS noprint
col INST14_EXISTS new_value _IF_INST14_EXISTS noprint
col INST15_EXISTS new_value _IF_INST15_EXISTS noprint
col INST16_EXISTS new_value _IF_INST16_EXISTS noprint
set term off
SELECT MIN(DECODE(inst_id,1,' ', '--')) INST1_EXISTS
, MIN(DECODE(inst_id,2,' ', '--')) INST2_EXISTS
, MIN(DECODE(inst_id,3,' ', '--')) INST3_EXISTS
, MIN(DECODE(inst_id,4,' ', '--')) INST4_EXISTS
, MIN(DECODE(inst_id,5,' ', '--')) INST5_EXISTS
, MIN(DECODE(inst_id,6,' ', '--')) INST6_EXISTS
, MIN(DECODE(inst_id,7,' ', '--')) INST7_EXISTS
, MIN(DECODE(inst_id,8,' ', '--')) INST8_EXISTS
, MIN(DECODE(inst_id,9,' ', '--')) INST9_EXISTS
, MIN(DECODE(inst_id,10,' ', '--')) INST10_EXISTS
, MIN(DECODE(inst_id,11,' ', '--')) INST11_EXISTS
, MIN(DECODE(inst_id,12,' ', '--')) INST12_EXISTS
, MIN(DECODE(inst_id,13,' ', '--')) INST13_EXISTS
, MIN(DECODE(inst_id,14,' ', '--')) INST14_EXISTS
, MIN(DECODE(inst_id,15,' ', '--')) INST15_EXISTS
, MIN(DECODE(inst_id,16,' ', '--')) INST16_EXISTS
FROM gv$instance
GROUP BY version
;
set term on
PROMPT
PROMPT #############################################################
PROMPT ####### #######
PROMPT ####### Automatic Memory Management Settings #######
PROMPT ####### #######
PROMPT #############################################################
PROMPT
COLUMN inst_id HEADING "Inst#" FORMAT 99999
COLUMN name HEADING "Name" FORMAT a21
COLUMN current_value1 HEADING "Current" FORMAT a7
COLUMN current_value2 HEADING "Current" FORMAT a7
COLUMN current_value3 HEADING "Current" FORMAT a7
COLUMN current_value4 HEADING "Current" FORMAT a7
COLUMN current_value5 HEADING "Current" FORMAT a7
COLUMN current_value6 HEADING "Current" FORMAT a7
COLUMN current_value7 HEADING "Current" FORMAT a7
COLUMN current_value8 HEADING "Current" FORMAT a7
COLUMN current_value9 HEADING "Current" FORMAT a7
COLUMN current_value10 HEADING "Current" FORMAT a7
COLUMN current_value11 HEADING "Current" FORMAT a7
COLUMN current_value12 HEADING "Current" FORMAT a7
COLUMN current_value13 HEADING "Current" FORMAT a7
COLUMN current_value14 HEADING "Current" FORMAT a7
COLUMN current_value15 HEADING "Current" FORMAT a7
COLUMN current_value16 HEADING "Current" FORMAT a7
COLUMN spfile_value1 HEADING "SPFile" FORMAT a7
COLUMN spfile_value2 HEADING "SPFile" FORMAT a7
COLUMN spfile_value3 HEADING "SPFile" FORMAT a7
COLUMN spfile_value4 HEADING "SPFile" FORMAT a7
COLUMN spfile_value5 HEADING "SPFile" FORMAT a7
COLUMN spfile_value6 HEADING "SPFile" FORMAT a7
COLUMN spfile_value7 HEADING "SPFile" FORMAT a7
COLUMN spfile_value8 HEADING "SPFile" FORMAT a7
COLUMN spfile_value9 HEADING "SPFile" FORMAT a7
COLUMN spfile_value10 HEADING "SPFile" FORMAT a7
COLUMN spfile_value11 HEADING "SPFile" FORMAT a7
COLUMN spfile_value12 HEADING "SPFile" FORMAT a7
COLUMN spfile_value13 HEADING "SPFile" FORMAT a7
COLUMN spfile_value14 HEADING "SPFile" FORMAT a7
COLUMN spfile_value15 HEADING "SPFile" FORMAT a7
COLUMN spfile_value16 HEADING "SPFile" FORMAT a7
COLUMN end_column HEADING " " FORMAT a1
set colsep '|'
set head off
SELECT '- '
&&_IF_INST1_EXISTS || ' <---Inst 1 --->'
&&_IF_INST2_EXISTS || ' <---Inst 2 --->'
&&_IF_INST3_EXISTS || ' <---Inst 3 --->'
&&_IF_INST4_EXISTS || ' <---Inst 4 --->'
&&_IF_INST5_EXISTS || ' <---Inst 5 --->'
&&_IF_INST6_EXISTS || ' <---Inst 6 --->'
&&_IF_INST7_EXISTS || ' <---Inst 7 --->'
&&_IF_INST8_EXISTS || ' <---Inst 8 --->'
FROM DUAL;
set head on
select RPAD(pp.name,20) name
&&_IF_INST1_EXISTS , MAX(DECODE(pp.inst_id, 1, pp.display_value,NULL)) current_value1
&&_IF_INST1_EXISTS , MAX(DECODE(pp.inst_id, 1, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value1
&&_IF_INST2_EXISTS , MAX(DECODE(pp.inst_id, 2, pp.display_value,NULL)) current_value2
&&_IF_INST2_EXISTS , MAX(DECODE(pp.inst_id, 2, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value2
&&_IF_INST3_EXISTS , MAX(DECODE(pp.inst_id, 3, pp.display_value,NULL)) current_value3
&&_IF_INST3_EXISTS , MAX(DECODE(pp.inst_id, 3, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value3
&&_IF_INST4_EXISTS , MAX(DECODE(pp.inst_id, 4, pp.display_value,NULL)) current_value4
&&_IF_INST4_EXISTS , MAX(DECODE(pp.inst_id, 4, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value4
&&_IF_INST5_EXISTS , MAX(DECODE(pp.inst_id, 5, pp.display_value,NULL)) current_value5
&&_IF_INST5_EXISTS , MAX(DECODE(pp.inst_id, 5, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value5
&&_IF_INST6_EXISTS , MAX(DECODE(pp.inst_id, 6, pp.display_value,NULL)) current_value6
&&_IF_INST6_EXISTS , MAX(DECODE(pp.inst_id, 6, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value6
&&_IF_INST7_EXISTS , MAX(DECODE(pp.inst_id, 7, pp.display_value,NULL)) current_value7
&&_IF_INST7_EXISTS , MAX(DECODE(pp.inst_id, 7, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value7
&&_IF_INST8_EXISTS , MAX(DECODE(pp.inst_id, 8, pp.display_value,NULL)) current_value8
&&_IF_INST8_EXISTS , MAX(DECODE(pp.inst_id, 8, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value8
, ' ' end_column
from gv$system_parameter pp
JOIN gv$instance i ON pp.inst_id = i.inst_id
LEFT OUTER JOIN gv$spparameter sp ON pp.inst_id = sp.inst_id AND sp.sid = i.instance_name and pp.name = sp.name
LEFT OUTER JOIN gv$spparameter sp_generic ON sp_generic.inst_id = pp.inst_id AND sp_generic.sid = '*' and sp_generic.name = pp.name
WHERE ( pp.name in ('memory_target','memory_max_target'
,'sga_target','sga_max_size'
,'lock_sga','pre_page_sga','use_large_pages'
,'pga_aggregate_target'
,'java_pool_size','shared_pool_size','large_pool_size'
,'db_cache_size'
)
)
GROUP BY pp.name
UNION ALL
-- Get Host physical memory
select RPAD(os.stat_name,20) name
&&_IF_INST1_EXISTS , MAX(DECODE(os.inst_id, 1, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value1
&&_IF_INST1_EXISTS , NULL spfile_value1
&&_IF_INST2_EXISTS , MAX(DECODE(os.inst_id, 2, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value2
&&_IF_INST2_EXISTS , NULL spfile_value2
&&_IF_INST3_EXISTS , MAX(DECODE(os.inst_id, 3, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value3
&&_IF_INST3_EXISTS , NULL spfile_value3
&&_IF_INST4_EXISTS , MAX(DECODE(os.inst_id, 4, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value4
&&_IF_INST4_EXISTS , NULL spfile_value4
&&_IF_INST5_EXISTS , MAX(DECODE(os.inst_id, 5, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value5
&&_IF_INST5_EXISTS , NULL spfile_value5
&&_IF_INST6_EXISTS , MAX(DECODE(os.inst_id, 6, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value6
&&_IF_INST6_EXISTS , NULL spfile_value6
&&_IF_INST7_EXISTS , MAX(DECODE(os.inst_id, 7, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value7
&&_IF_INST7_EXISTS , NULL spfile_value7
&&_IF_INST8_EXISTS , MAX(DECODE(os.inst_id, 8, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value8
&&_IF_INST8_EXISTS , NULL spfile_value8
, ' ' end_column
from gv$osstat os
where os.stat_name = 'PHYSICAL_MEMORY_BYTES'
GROUP BY os.stat_name
ORDER BY 1
/
set head off
SELECT '- '
&&_IF_INST9_EXISTS || ' <---Inst 9 --->'
&&_IF_INST10_EXISTS || ' <---Inst 10--->'
&&_IF_INST11_EXISTS || ' <---Inst 11--->'
&&_IF_INST12_EXISTS || ' <---Inst 12--->'
&&_IF_INST13_EXISTS || ' <---Inst 13--->'
&&_IF_INST14_EXISTS || ' <---Inst 14--->'
&&_IF_INST15_EXISTS || ' <---Inst 15--->'
&&_IF_INST16_EXISTS || ' <---Inst 16--->'
FROM DUAL;
set head on
select RPAD(pp.name,20) name
&&_IF_INST9_EXISTS , MAX(DECODE(pp.inst_id, 9, pp.display_value,NULL)) current_value9
&&_IF_INST9_EXISTS , MAX(DECODE(pp.inst_id, 9, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value9
&&_IF_INST10_EXISTS , MAX(DECODE(pp.inst_id, 10, pp.display_value,NULL)) current_value10
&&_IF_INST10_EXISTS , MAX(DECODE(pp.inst_id, 10, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value10
&&_IF_INST11_EXISTS , MAX(DECODE(pp.inst_id, 11, pp.display_value,NULL)) current_value11
&&_IF_INST11_EXISTS , MAX(DECODE(pp.inst_id, 11, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value11
&&_IF_INST12_EXISTS , MAX(DECODE(pp.inst_id, 12, pp.display_value,NULL)) current_value12
&&_IF_INST12_EXISTS , MAX(DECODE(pp.inst_id, 12, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value12
&&_IF_INST13_EXISTS , MAX(DECODE(pp.inst_id, 13, pp.display_value,NULL)) current_value13
&&_IF_INST13_EXISTS , MAX(DECODE(pp.inst_id, 13, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value13
&&_IF_INST14_EXISTS , MAX(DECODE(pp.inst_id, 14, pp.display_value,NULL)) current_value14
&&_IF_INST14_EXISTS , MAX(DECODE(pp.inst_id, 14, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value14
&&_IF_INST15_EXISTS , MAX(DECODE(pp.inst_id, 15, pp.display_value,NULL)) current_value15
&&_IF_INST15_EXISTS , MAX(DECODE(pp.inst_id, 15, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value15
&&_IF_INST16_EXISTS , MAX(DECODE(pp.inst_id, 16, pp.display_value,NULL)) current_value16
&&_IF_INST16_EXISTS , MAX(DECODE(pp.inst_id, 16, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value16
, ' ' end_column
from gv$system_parameter pp
JOIN gv$instance i ON pp.inst_id = i.inst_id
LEFT OUTER JOIN gv$spparameter sp ON pp.inst_id = sp.inst_id AND sp.sid = i.instance_name and pp.name = sp.name
LEFT OUTER JOIN gv$spparameter sp_generic ON sp_generic.inst_id = pp.inst_id AND sp_generic.sid = '*' and sp_generic.name = pp.name
WHERE ( pp.name in ('memory_target','memory_max_target'
,'sga_target','sga_max_size'
,'lock_sga','pre_page_sga','use_large_pages'
,'pga_aggregate_target'
,'java_pool_size','shared_pool_size','large_pool_size'
)
)
AND i.inst_id > 8
GROUP BY pp.name
UNION ALL
-- Get Host physical memory
select RPAD(os.stat_name,20) name
&&_IF_INST9_EXISTS , MAX(DECODE(os.inst_id, 9, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value9
&&_IF_INST9_EXISTS , NULL spfile_value9
&&_IF_INST10_EXISTS , MAX(DECODE(os.inst_id, 10, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value10
&&_IF_INST10_EXISTS , NULL spfile_value10
&&_IF_INST11_EXISTS , MAX(DECODE(os.inst_id, 11, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value11
&&_IF_INST11_EXISTS , NULL spfile_value11
&&_IF_INST12_EXISTS , MAX(DECODE(os.inst_id, 12, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value12
&&_IF_INST12_EXISTS , NULL spfile_value12
&&_IF_INST13_EXISTS , MAX(DECODE(os.inst_id, 13, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value13
&&_IF_INST13_EXISTS , NULL spfile_value13
&&_IF_INST14_EXISTS , MAX(DECODE(os.inst_id, 14, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value14
&&_IF_INST14_EXISTS , NULL spfile_value14
&&_IF_INST15_EXISTS , MAX(DECODE(os.inst_id, 15, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value15
&&_IF_INST15_EXISTS , NULL spfile_value15
&&_IF_INST16_EXISTS , MAX(DECODE(os.inst_id, 16, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value16
&&_IF_INST16_EXISTS , NULL spfile_value16
, ' ' end_column
from gv$osstat os
where os.stat_name = 'PHYSICAL_MEMORY_BYTES'
AND os.inst_id > 8
GROUP BY os.stat_name
ORDER BY 1
/
set colsep " "
COLUMN component HEADING "Component" FORMAT a24
COLUMN user_specified_size HEADING "User|Specified|(MB)" FORMAT 99,999,999
COLUMN current_size HEADING "Current|(MB)" FORMAT 99,999,999
COLUMN free_size HEADING "Free|(MB)" FORMAT 99,999,999
COLUMN min_size HEADING "Min|(MB)" FORMAT 99,999,999
COLUMN max_size HEADING "Max|(MB)" FORMAT 99,999,999
COLUMN GRANULE_SIZE HEADING "Granule|(MB)" FORMAT 9,999
COLUMN last_oper_type HEADING "Last|Operation|Type" FORMAT a12
COLUMN oper_count HEADING "Resize|Oper|Count" FORMAT 99,999
COLUMN last_oper_time HEADING "Last|Operation|Time" FORMAT a18
BREAK ON REPORT
COMPUTE SUM LABEL 'Total' OF current_size FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF free_size FORMAT 99,999,999 ON REPORT
BREAK ON inst_id SKIP 1
SELECT c.inst_id
, c.component
, ROUND(c.user_specified_size / power(1024,2)) user_specified_size
, ROUND(c.current_size / power(1024,2)) current_size
, ROUND(DECODE(c.component
,'PGA Target',NVL(p.value,0)
, ROUND(NVL(s.bytes,0))
)
/ power(1024,2)
) free_size
, ROUND(c.min_size / power(1024,2)) min_size
, ROUND(c.max_size / power(1024,2)) max_size
, ROUND(c.GRANULE_SIZE / power(1024,2)) GRANULE_SIZE
, c.oper_count
, c.last_oper_type
, to_char(c.last_oper_time,'DD-MON-YY hh24:mi:Ss') last_oper_time
FROM gv$memory_dynamic_components c
LEFT OUTER JOIN GV$SGASTAT s ON s.inst_id = c.inst_id AND s.pool = c.component AND s.name = 'free memory'
LEFT OUTER JOIN gv$pgastat p ON p.inst_id = c.inst_id AND p.name = 'total freeable PGA memory'
WHERE c.current_size <> 0
ORDER BY c.inst_id, c.component
/
undefine _IF_INST1_EXISTS
undefine _IF_INST2_EXISTS
undefine _IF_INST3_EXISTS
undefine _IF_INST4_EXISTS
undefine _IF_INST5_EXISTS
undefine _IF_INST6_EXISTS
undefine _IF_INST7_EXISTS
undefine _IF_INST8_EXISTS
undefine _IF_INST9_EXISTS
undefine _IF_INST10_EXISTS
undefine _IF_INST11_EXISTS
undefine _IF_INST12_EXISTS
undefine _IF_INST13_EXISTS
undefine _IF_INST14_EXISTS
undefine _IF_INST15_EXISTS
undefine _IF_INST16_EXISTS
@@footer

75
vg/apex_queries.sql Normal file
View File

@@ -0,0 +1,75 @@
--------------------------------------------------------------------------------------------
-- Apex Activity Logs
--------------------------------------------------------------------------------------------
select * From apex_040100.WWV_FLOW_ACTIVITY_LOG1$ order by TIME_STAMP desc;
select * From apex_040100.WWV_FLOW_ACTIVITY_LOG2$ order by TIME_STAMP desc;
---------------
-- Hourly Hits
---------------
select TRUNC(al.time_stamp,'HH24'), count(1)
From (select * from apex_040100.WWV_FLOW_ACTIVITY_LOG1$
union all
select * from apex_040100.WWV_FLOW_ACTIVITY_LOG2$
)al
group by TRUNC(al.time_stamp,'HH24')
order by TRUNC(al.time_stamp,'HH24') desc;
-----------------------------------
-- Apex Mail test
-----------------------------------
declare
l_workspace_id apex_workspaces.workspace_id%type;
begin
SELECT app.workspace_id
into l_workspace_id
FROM apex_applications app
WHERE app.application_id = 508;
wwv_flow_api.set_security_group_id(l_workspace_id);
apex_mail.send(p_to => 'vishal@vishalgupta.com (Vishal Gupta),email@domain.com (Firstname Surname)',
p_from => 'from@domain.com',
p_body => 'Testing',
p_body_html => '<html><b>This is testing</b></html>',
p_subj => 'Testing Email',
p_cc => 'cc@domain.com',
p_bcc => null);
APEX_MAIL.PUSH_QUEUE;
end;
/
-----------------------------------
-- Apex Mail Log
-----------------------------------
SELECT * from APEX_040100.WWV_FLOW_MAIL_LOG ORDER BY last_updated_on desc;
SELECT * from APEX_040100.WWV_FLOW_MAIL_QUEUE ORDER BY last_updated_on desc;
SELECT * from APEX_040100.WWV_FLOW_MAIL_ATTACHMENTS ORDER BY last_updated_on desc;
SELECT last_updated_on, last_updated_by, mail_from, mail_to, mail_bcc, mail_cc, mail_subj from APEX_040100.WWV_FLOW_MAIL_LOG ORDER BY LAST_UPDATED_ON DESC;
--------------------------------------------------------------------------------------------
-- Apex email settings
--------------------------------------------------------------------------------------------
- Login to Apex INTERNAL workspace using admin user
- Manage Instances
- Instance settings
- Click on Email tab
SMTP Host Address
SMTP Host Port
SMTP Authentication Username
SMTP Authentication Password
Use SSL/TLS
Administration Email Address
Notification Email Address
Maximum Emails per Workspace

102
vg/archive_dest.sql Normal file
View File

@@ -0,0 +1,102 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display Archive Destination Configuration
* Parameters : NONE
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 21-Apr-15 Vishal Gupta Conditional multiple Oracle version output
* 09-May-14 Vishal Gupta Output layout changes
* 19-Mar-14 Vishal Gupta Created
*
*/
PROMPT *****************************************************************
PROMPT * Archive Destinations
PROMPT *****************************************************************
COLUMN dest_id HEADING "Dest|Id" FORMAT 99
COLUMN dest_name HEADING "Dest Name" FORMAT a20
COLUMN db_unique_name HEADING "UniqueName" FORMAT a15
COLUMN destination HEADING "Destination" FORMAT a25
COLUMN name_space HEADING "Name|Space" FORMAT a8
COLUMN compression HEADING "Compress" FORMAT a8
COLUMN archiver HEADING "Arch|iver" FORMAT a4
COLUMN transmit_mode HEADING "Transmit|Mode"
COLUMN affirm HEADING "AFFIRM" FORMAT a6
COLUMN reopen_secs HEADING "Reopen|(sec)" FORMAT 999999
COLUMN delay_mins HEADING "Delay|(min)" FORMAT 99999
COLUMN max_connections HEADING "Max|Conns" FORMAT 99999
COLUMN net_timeout HEADING "Net|Time|Out|(sec)" FORMAT 9999
COLUMN alternate HEADING "Alertnate" FORMAT a10
COLUMN dependency HEADING "Dependency" FORMAT a10
COLUMN register HEADING "Regi|ster" FORMAT a4
COLUMN log_sequence HEADING "LogSeq" FORMAT 9999999
COLUMN async_blocks HEADING "ASYNC|Blocks" FORMAT 999999
COLUMN valid_now HEADING "Valid|Now" FORMAT a7
COLUMN verify HEADING "Verify" FORMAT a6
COLUMN applied_scn HEADING "Applied SCN" FORMAT 99999999999999
COLUMN applied_time HEADING "Applied Time" FORMAT a18
COLUMN fail_date HEADING "FailDate" FORMAT a15
COLUMN fail_sequence HEADING "FailSeq" FORMAT 9999999
COLUMN failure_count HEADING "Fail|Count" FORMAT 99999
COLUMN max_failure HEADING "Max|Fail" FORMAT 99999
COLUMN error HEADING "Error" FORMAT a30
SELECT ad.dest_id
, ad.dest_name
&&_IF_ORA_10gR1_OR_HIGHER , ad.db_unique_name
, ad.destination
, ad.status
, ad.schedule
, ad.target
&&_IF_ORA_10gR1_OR_HIGHER , ad.valid_type
&&_IF_ORA_10gR1_OR_HIGHER , ad.valid_role
, ad.binding
, ad.name_space
&&_IF_ORA_11gR1_OR_HIGHER , ad.compression
, ad.archiver
, ad.transmit_mode
, ad.affirm
FROM v$archive_dest ad
WHERE status <> 'INACTIVE'
;
SELECT ad.dest_id
, ad.delay_mins
&&_IF_ORA_10gR2_OR_HIGHER , ad.max_connections
, ad.max_failure
, ad.reopen_secs
, ad.net_timeout
, ad.process
, ad.register
, ad.log_sequence
, ad.alternate
, ad.dependency
, ad.async_blocks
, ad.type
&&_IF_ORA_10gR1_OR_HIGHER , ad.valid_now
&&_IF_ORA_10gR1_OR_HIGHER , ad.verify
&&_IF_ORA_11202_OR_HIGHER , ad.applied_scn
--&&_IF_ORA_11202_OR_HIGHER , TO_CHAR(SCN_TO_TIMESTAMP(ad.applied_scn),'DD-MON-YY HH24:MI') applied_time
&&_IF_ORA_11202_OR_HIGHER , TO_CHAR(ad.fail_date,'DD-MON-YY HH24:MI') fail_date
, ad.fail_sequence
, ad.failure_count
, ad.error
FROM v$archive_dest ad
WHERE status <> 'INACTIVE'
;
@@footer

109
vg/archivelog_gap.sql Normal file
View File

@@ -0,0 +1,109 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display archivelog gap
* Parameter : 1 - Thread Number (Default '%')
* 2 - From Sequence (Default '%')
* 3 - To Sequence (Default '%')
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 04-Apr-10 Vishal Gupta Created
*
*/
/************************************
* INPUT PARAMETERS
************************************/
DEFINE thread="&&1"
DEFINE from_sequence="&2"
DEFINE to_sequence="&3"
set term off
COLUMN _thread NEW_VALUE thread NOPRINT
COLUMN _from_sequence NEW_VALUE from_sequence NOPRINT
COLUMN _to_sequence NEW_VALUE to_sequence NOPRINT
SELECT DECODE('&&thread','','%','&&thread') "_thread"
, DECODE('&&from_sequence','','%','&&from_sequence') "_from_sequence"
, DECODE('&&to_sequence','','%','&&to_sequence') "_to_sequence"
FROM DUAL;
set term on
/************************************
* M A I N S C R I P T
************************************/
COLUMN sequence# HEADING "SEQUENCE#" FORMAT 99999999
/*
* Not using WITH clause (aka CTE aka sub-query refactorying
* , as it does not work on standby database in MOUNT mode and not in OPEN mode.
*/
select minmax.thread#
, i.sequence# + minmax.min_sequence# - 1 sequence#
--, l.thread#
--, l.sequence#
, l.applied
, l.deleted
, l.status
, l.archived
, NVL(TO_CHAR(l.first_time,'DD-MON-YY HH24:MI:SS'),' Missing ') first_time
, TO_CHAR(l.next_time,'DD-MON-YY HH24:MI:SS') next_time
, l.fal
, l.creator
, l.registrar
, TO_CHAR(l.completion_time,'DD-MON-YY HH24:MI:SS') completion_time
from (select rownum sequence#
from dual
connect by level <= 1500
) i
join (select dest_id
, thread#
, max(DECODE(applied, 'YES',sequence#,0)) - 3 min_sequence#
, max(sequence#) max_sequence#
--, min(first_time)
--, max(first_time)
From v$archived_log
where dest_id = 1
AND thread# like '&&thread'
and first_time > trunc(sysdate - 1)
group by dest_id, thread#
order by thread#
) minmax on 1 = 1
LEFT OUTER JOIN v$archived_log l on l.thread# = minmax.thread# and l.sequence# = i.sequence# + minmax.min_sequence# - 1
WHERE 1=1
--AND (l.thread# IS NULL OR l.sequence# IS NULL)
and i.sequence# + minmax.min_sequence# - 1 <= minmax.max_sequence#
AND minmax.thread# like '&&thread'
AND i.sequence# + minmax.min_sequence# - 1
BETWEEN DECODE('&&from_sequence','%',minmax.min_sequence#,'&&from_sequence')
AND DECODE('&&to_sequence','%',minmax.max_sequence#,'&&to_sequence')
order by minmax.thread#
, i.sequence#
--order by l.first_change#
;
SELECT l.thread#
, TO_CHAR(sysdate,'DD-MON-YY HH24:MI:SS') current_time
, TO_CHAR(max(l.next_time) ,'DD-MON-YY HH24:MI:SS') max_next_time
FROM v$archived_log l
GROUP BY l.thread#
ORDER BY l.thread#
;
@@footer

95
vg/archivelog_gap2.sql Normal file
View File

@@ -0,0 +1,95 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display archivelog gap
* Parameter : 1 - Thread Number (Default '%')
* 2 - From Sequence (Default '%')
* 3 - To Sequence (Default '%')
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 04-Apr-10 Vishal Gupta Created
*
*/
/************************************
* INPUT PARAMETERS
************************************/
DEFINE thread="&&1"
DEFINE from_sequence="&2"
DEFINE to_sequence="&3"
set term off
COLUMN _thread NEW_VALUE thread NOPRINT
COLUMN _from_sequence NEW_VALUE from_sequence NOPRINT
COLUMN _to_sequence NEW_VALUE to_sequence NOPRINT
SELECT DECODE('&&thread','','%','&&thread') "_thread"
, DECODE('&&from_sequence','','%','&&from_sequence') "_from_sequence"
, DECODE('&&to_sequence','','%','&&to_sequence') "_to_sequence"
FROM DUAL;
set term on
/************************************
* M A I N S C R I P T
************************************/
COLUMN sequence# HEADING "SEQUENCE#" FORMAT 99999999
select minmax.thread#
, i.sequence# + minmax.min_sequence# - 1 sequence#
--, l.thread#
--, l.sequence#
, l.applied
, l.deleted
, l.status
, l.archived
, NVL(TO_CHAR(l.first_time,'DD-MON-YY HH24:MI:SS'),' Missing ') first_time
, TO_CHAR(l.next_time,'DD-MON-YY HH24:MI:SS') next_time
, l.fal
, l.creator
, l.registrar
, TO_CHAR(l.completion_time,'DD-MON-YY HH24:MI:SS') completion_time
from (select rownum sequence#
from dual
connect by level <= 1500
) i
join (select dest_id
, thread#
, max(DECODE(applied, 'YES',sequence#,0)) - 3 min_sequence#
, max(sequence#) max_sequence#
--, min(first_time)
--, max(first_time)
From v$archived_log
where dest_id = 1
AND thread# like '&&thread'
and first_time > trunc(sysdate - 1)
group by dest_id, thread#
order by thread#
) minmax on 1 = 1
LEFT OUTER JOIN v$archived_log l on l.thread# = minmax.thread# and l.sequence# = i.sequence# + minmax.min_sequence# - 1
WHERE 1=1
--AND (l.thread# IS NULL OR l.sequence# IS NULL)
and i.sequence# + minmax.min_sequence# - 1 <= minmax.max_sequence#
AND minmax.thread# like '&&thread'
AND i.sequence# + minmax.min_sequence# - 1
BETWEEN DECODE('&&from_sequence','%',minmax.min_sequence#,'&&from_sequence')
AND DECODE('&&to_sequence','%',minmax.max_sequence#,'&&to_sequence')
order by minmax.thread#
, i.sequence#
--order by l.first_change#
;
@@footer

View File

@@ -0,0 +1,134 @@
@@header
set term off
/*
*
* Author : Vishal Gupta
* Purpose : Display hourly and daily redolog switches by size
* Parameters : None
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 30-Dec-14 Vishal Gupta Added number of days as input parameter
* 18-Mar-14 Vishal Gupta Added separator columns for daily total
* 27-Feb-12 Vishal Gupta Formated the output and parameterized size granuality
* 05-Aug-04 Vishal Gupta First Draft
*
*/
set term on
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE days
DEFINE days="&&1"
set term off
COLUMN _DAYS NEW_VALUE DAYS NOPRINT
SELECT UPPER(DECODE('&&days','','15','&&days')) "_DAYS"
FROM DUAL;
set term on
/************************************
* CONFIGURATION PARAMETERS
************************************/
DEFINE size_label=GB
DEFINE size_divider="1024/1024/1024"
DEFINE round_precision=2
PROMPT
PROMPT ************************************************************************
PROMPT * A R C H I V E L O G S W I T C H S U M M A R Y (By Size)
PROMPT * (Hourly and Daily figures in &&size_label)
PROMPT *
PROMPT * Input Parameters
PROMPT * - Days = '&&days'
PROMPT ************************************************************************
PROMPT
PROMPT - <-------------------------------------------------------- hourly total ----------------------------------------------->
/*
Total h0 h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14 h15 h16 h17 h18 h19 h20 h21 h22 h23
Date Day (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB)
--------- --- ----- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
*/
SET head on FEED off ECHO OFF LINES 1000 TRIMSPOOL ON TRIM on PAGES 1000
COLUMN separator HEADING "!|!|!" FORMAT A1
COLUMN "Date" HEADING "Date" FORMAT A9
COLUMN "Total" HEADING "Day|Total|(&size_label)" FORMAT 99999
COLUMN "Day" HEADING "Day" FORMAT A3
COLUMN h0 HEADING "h0|(&size_label)" FORMAT 9999
COLUMN h1 HEADING "h1|(&size_label)" FORMAT 9999
COLUMN h2 HEADING "h2|(&size_label)" FORMAT 9999
COLUMN h3 HEADING "h3|(&size_label)" FORMAT 9999
COLUMN h4 HEADING "h4|(&size_label)" FORMAT 9999
COLUMN h5 HEADING "h5|(&size_label)" FORMAT 9999
COLUMN h6 HEADING "h6|(&size_label)" FORMAT 9999
COLUMN h7 HEADING "h7|(&size_label)" FORMAT 9999
COLUMN h8 HEADING "h8|(&size_label)" FORMAT 9999
COLUMN h9 HEADING "h9|(&size_label)" FORMAT 9999
COLUMN h10 HEADING "h10|(&size_label)" FORMAT 9999
COLUMN h11 HEADING "h11|(&size_label)" FORMAT 9999
COLUMN h12 HEADING "h12|(&size_label)" FORMAT 9999
COLUMN h13 HEADING "h13|(&size_label)" FORMAT 9999
COLUMN h14 HEADING "h14|(&size_label)" FORMAT 9999
COLUMN h15 HEADING "h15|(&size_label)" FORMAT 9999
COLUMN h16 HEADING "h16|(&size_label)" FORMAT 9999
COLUMN h17 HEADING "h17|(&size_label)" FORMAT 9999
COLUMN h18 HEADING "h18|(&size_label)" FORMAT 9999
COLUMN h19 HEADING "h19|(&size_label)" FORMAT 9999
COLUMN h20 HEADING "h20|(&size_label)" FORMAT 9999
COLUMN h21 HEADING "h21|(&size_label)" FORMAT 9999
COLUMN h22 HEADING "h22|(&size_label)" FORMAT 9999
COLUMN h23 HEADING "h23|(&size_label)" FORMAT 9999
SELECT to_char(trunc(COMPLETION_TIME),'DD-Mon-YY') "Date",
to_char(COMPLETION_TIME, 'Dy') "Day",
'|' separator,
ROUND(SUM(((BLOCKS * BLOCK_SIZE)/&size_divider))) "Total",
'|' separator,
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'00',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h0",
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'01',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h1",
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'02',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h2",
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'03',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h3",
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'04',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h4",
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'05',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h5",
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'06',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h6",
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'07',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h7",
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'08',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h8",
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'09',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h9",
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'10',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h10",
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'11',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h11",
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'12',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h12",
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'13',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h13",
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'14',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h14",
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'15',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h15",
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'16',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h16",
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'17',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h17",
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'18',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h18",
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'19',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h19",
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'20',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h20",
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'21',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h21",
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'22',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h22",
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'23',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h23"
from v$archived_log
where standby_dest = 'NO'
AND CREATOR IN ('ARCH' , 'FGRD','LGWR','RFS')
AND completion_time > sysdate - &days
group by trunc(COMPLETION_TIME), to_char(COMPLETION_TIME, 'Dy')
order by trunc(COMPLETION_TIME)
/
@@footer

View File

@@ -0,0 +1,96 @@
@@header
set term off
/*
*
* Author : Vishal Gupta
* Purpose : Display hourly and daily redolog switches by size
* Parameters : None
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 30-Dec-14 Vishal Gupta Added number of days as input parameter
* 18-Mar-14 Vishal Gupta Added separator columns for daily total
* 27-Feb-12 Vishal Gupta Formated the output and parameterized size granuality
* 05-Aug-04 Vishal Gupta First Draft
*
*/
set term on
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE days
DEFINE days="&&1"
set term off
COLUMN _DAYS NEW_VALUE DAYS NOPRINT
SELECT UPPER(DECODE('&&days','','2','&&days')) "_DAYS"
FROM DUAL;
set term on
/************************************
* CONFIGURATION PARAMETERS
************************************/
DEFINE size_label=MB
DEFINE size_divider="1024/1024"
--DEFINE size_label=GB
--DEFINE size_divider="1024/1024/1024"
DEFINE round_precision=2
PROMPT
PROMPT ************************************************************************
PROMPT * A R C H I V E L O G S W I T C H S U M M A R Y (By Size)
PROMPT * (Hourly and Daily figures in &&size_label)
PROMPT *
PROMPT * Input Parameters
PROMPT * - Days = '&&days'
PROMPT ************************************************************************
PROMPT
SET head on FEED off ECHO OFF LINES 1000 TRIMSPOOL ON TRIM on PAGES 1000
COLUMN separator HEADING "!|!|!" FORMAT A1
COLUMN "Date" HEADING "Date" FORMAT A12
COLUMN "Day" HEADING "Day" FORMAT A3
COLUMN "Total" HEADING "Hourly|Total|(&size_label)" FORMAT 9,999,999
COLUMN "M00" HEADING "Minutes|01-10 |(&size_label) " FORMAT 999,999
COLUMN "M10" HEADING "Minutes|11-20 |(&size_label) " FORMAT 999,999
COLUMN "M20" HEADING "Minutes|21-30 |(&size_label) " FORMAT 999,999
COLUMN "M30" HEADING "Minutes|31-40 |(&size_label) " FORMAT 999,999
COLUMN "M40" HEADING "Minutes|41-50 |(&size_label) " FORMAT 999,999
COLUMN "M50" HEADING "Minutes|51-60 |(&size_label) " FORMAT 999,999
SELECT TO_CHAR(trunc(COMPLETION_TIME,'HH24'),'DD-MON-YY HH24') "Date",
to_char(COMPLETION_TIME, 'Dy') "Day",
'|' separator,
ROUND(SUM(((BLOCKS * BLOCK_SIZE)/&&size_divider))) "Total",
'|' separator,
ROUND(SUM(CASE WHEN TO_NUMBER(to_char(COMPLETION_TIME, 'MI')) BETWEEN 01 AND 10 THEN ROUND((BLOCKS * BLOCK_SIZE)/&&size_divider) ELSE 0 END)) "M00",
ROUND(SUM(CASE WHEN TO_NUMBER(to_char(COMPLETION_TIME, 'MI')) BETWEEN 11 AND 20 THEN ROUND((BLOCKS * BLOCK_SIZE)/&&size_divider) ELSE 0 END)) "M10",
ROUND(SUM(CASE WHEN TO_NUMBER(to_char(COMPLETION_TIME, 'MI')) BETWEEN 21 AND 30 THEN ROUND((BLOCKS * BLOCK_SIZE)/&&size_divider) ELSE 0 END)) "M20",
ROUND(SUM(CASE WHEN TO_NUMBER(to_char(COMPLETION_TIME, 'MI')) BETWEEN 31 AND 40 THEN ROUND((BLOCKS * BLOCK_SIZE)/&&size_divider) ELSE 0 END)) "M30",
ROUND(SUM(CASE WHEN TO_NUMBER(to_char(COMPLETION_TIME, 'MI')) BETWEEN 41 AND 50 THEN ROUND((BLOCKS * BLOCK_SIZE)/&&size_divider) ELSE 0 END)) "M40",
ROUND(SUM(CASE WHEN TO_NUMBER(to_char(COMPLETION_TIME, 'MI')) BETWEEN 51 AND 60 THEN ROUND((BLOCKS * BLOCK_SIZE)/&&size_divider) ELSE 0 END)) "M50",
'|' separator
from v$archived_log
where standby_dest = 'NO'
and CREATOR IN ('ARCH' , 'FGRD')
AND completion_time > sysdate - &days
group by trunc(COMPLETION_TIME,'HH24'), to_char(COMPLETION_TIME, 'Dy')
order by trunc(COMPLETION_TIME,'HH24')
;
@@footer

123
vg/ash.sql Normal file
View File

@@ -0,0 +1,123 @@
@@header
PROMPT ****** NOT FINISHED ***********
/*
*
* Author : Vishal Gupta
* Purpose : Display session from ASH
* Version :
* Parameters :
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 27-Sep-12 Vishal Gupta Created
*
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE sql_id
UNDEFINE plan_hash_value
UNDEFINE days
DEFINE sql_id="&&1"
DEFINE plan_hash_value="&&2"
DEFINE days="&&3"
COLUMN _plan_hash_value NEW_VALUE plan_hash_value NOPRINT
COLUMN _days NEW_VALUE days NOPRINT
set term on
SELECT DECODE('&&plan_hash_value','','%','&&plan_hash_value') "_plan_hash_value"
, DECODE('&&days','','7','&&days') "_days"
FROM DUAL;
set term off
/************************************
* CONFIGURATION PARAMETERS
************************************/
DEFINE COUNT_SMALL_FORMAT=9,999
DEFINE COUNT_SMALL_DIVIDER="1"
DEFINE COUNT_SMALL_HEADING="#"
--DEFINE COUNT_DIVIDER="1000"
--DEFINE COUNT_HEADING="#1000"
DEFINE COUNT_FORMAT=9,999,999,999
DEFINE COUNT_DIVIDER="1"
DEFINE COUNT_HEADING="#"
--DEFINE COUNT_DIVIDER="1000"
--DEFINE COUNT_HEADING="#1000"
DEFINE BYTES_FORMAT="999,999"
--DEFINE BYTES_DIVIDER="1024"
--DEFINE BYTES_HEADING="KB"
DEFINE BYTES_DIVIDER="1024/1024"
DEFINE BYTES_HEADING="MB"
--DEFINE BYTES_DIVIDER="1024/1024/1024"
--DEFINE BYTES_HEADING="GB"
DEFINE TIME_FORMAT=9,999
--DEFINE TIME_DIVIDER="0.001"
--DEFINE TIME_HEADING="msec"
DEFINE TIME_DIVIDER="1"
DEFINE TIME_HEADING="sec"
--DEFINE TIME_DIVIDER="60"
--DEFINE TIME_HEADING="min"
Prompt
Prompt ******************************************************************
Prompt * A S H I N F O
Prompt *
PROMPT * Input Parameters
PROMPT * -
Prompt ******************************************************************
SELECT ash.sample_time
, ash.inst_id
, u.username
, sn.name service_name
, ash.machine
, ash.program
, ash.sql_opname
, ash.sql_id
, ash.sql_child_number
, ash.sql_exec_start
, ash.top_sql_id
, ash.module
, ash.action
, ash.event
FROM gv$active_session_history ash
, dba_users u
, dba_services sn
WHERE ash.service_hash = sn.name_hash
AND ash.user_id = u.user_id
AND ash.sample_time > systimestamp - 5/24
-- and ash.service_hash = '1859414386'
-- and ash.sql_id like '9m4qqj5uzzn3k'
-- AND ash.top_level_sql_id LIKE '%'
and u.username like '%ATTRIB%'
-- and upper(ash.machine) like upper('%beta%')
-- AND upper(sn.name) like upper('SYS$USERS') -- service_name
-- and upper(ash.program) like upper('%SQL%')
-- and upper(ash.module) like upper('%PiNT%')
-- ORDER BY s.end_interval_time
ORDER BY ash.sample_time
@@footer

65
vg/ash_info.sql Normal file
View File

@@ -0,0 +1,65 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display ASH Info
* Compatibility : 11.2 and above
* Parameters : NONE
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 30-Aug-12 Vishal Gupta First cut
* 27-Sep-12 Vishal Gupta Updated output formatting
*
*/
PROMPT
PROMPT *******************
PROMPT * ASH Info
PROMPT *******************
COLUMN inst_id HEADING "I#" FORMAT 99
COLUMN total_size HEADING "Total|Size" FORMAT 999,999,999
COLUMN fixed_size HEADING "Fixed|Size" FORMAT 999,999,999
COLUMN sampling_interval HEADING "Sampling|Interval|(ms)" FORMAT 99999
COLUMN avg_sample_time HEADING "Avg|Sample|Time|(ms)" FORMAT 99999
COLUMN disk_filter_ratio HEADING "Disk|Filter|Ratio" FORMAT 99
COLUMN oldest_sample_time HEADING "Oldest|SampleTime" FORMAT a18
COLUMN latest_sample_time HEADING "Latest|SampleTime" FORMAT a18
COLUMN duration HEADING "Duration" FORMAT a12
COLUMN sampled_bytes HEADING "Sampled|MB" FORMAT 999,999,999
COLUMN sample_count HEADING "Sample|Count" FORMAT 999,999,999
COLUMN sampler_elapsed_time HEADING "Sampler|Elapsed|Time|(ms)" FORMAT 999,999,999,999
COLUMN awr_flush_count HEADING "AWR|Flush|Count" FORMAT 999,999
COLUMN awr_flush_emergency_count HEADING "AWR|Emer|Flush|Count" FORMAT 999,999
COLUMN awr_flush_bytes HEADING "AWR|Flush|MB" FORMAT 999,999
SELECT i.inst_id
, i.total_size
, i.fixed_size
, i.sampling_interval
, ROUND(i.sampler_elapsed_time/i.sample_count) avg_sample_time
, i.disk_filter_ratio
, to_char(i.oldest_sample_time,'DD-MON-YY HH24:MI:SS') oldest_sample_time
, to_char(i.latest_sample_time,'DD-MON-YY HH24:MI:SS') latest_sample_time
, REPLACE(SUBSTR((i.latest_sample_time - i.oldest_sample_time)
,1,INSTR((i.latest_sample_time - i.oldest_sample_time),'.')-1
)
,'+0000000','+'
) duration
, i.sample_count
, ROUND(i.sampled_bytes/1024/1024) sampled_bytes
, i.sampler_elapsed_time
, i.awr_flush_count
, i.awr_flush_emergency_count
, ROUND(i.awr_flush_bytes/1024/1024) awr_flush_bytes
FROM gv$ash_info i
ORDER BY i.inst_id
;
@@footer

98
vg/ash_report.sql Normal file
View File

@@ -0,0 +1,98 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Generate ASH report for instances passed
* Parameters : 1 - From Time ( YYYY-MM-DD HH24:MI:SS format)
* 2 - To Time ( YYYY-MM-DD HH24:MI:SS format)
* 3 - Instance Number ( % for all or comma separated list of instance numbers).
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 17-Feb-14 Vishal Gupta Changed order of input parameters
* 18Feb-12 Vishal Gupta Created
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE FROM_TIMESTAMP
UNDEFINE TO_TIMESTAMP
UNDEFINE INSTANCE_LIST
DEFINE FROM_TIMESTAMP="&&1"
DEFINE TO_TIMESTAMP="&&2"
DEFINE INSTANCE_LIST="&&3"
COLUMN _FROM_TIMESTAMP NEW_VALUE FROM_TIMESTAMP NOPRINT
COLUMN _TO_TIME NEW_VALUE TO_TIMESTAMP NOPRINT
COLUMN _INSTANCE_LIST NEW_VALUE INSTANCE_LIST NOPRINT
set term off
SELECT DECODE('&&FROM_TIMESTAMP','',to_char(sysdate - 1/24,'YYYY-MM-DD HH24:MI:SS'),'&&FROM_TIMESTAMP') "_FROM_TIMESTAMP"
, DECODE('&&TO_TIMESTAMP','',to_char(sysdate ,'YYYY-MM-DD HH24:MI:SS'),'&&TO_TIMESTAMP') "_TO_TIME"
, DECODE('&&INSTANCE_LIST','','%','&&INSTANCE_LIST') "_INSTANCE_LIST"
FROM DUAL;
set term on
PROMPT
PROMPT ***********************************************************************
PROMPT * A S H R E P O R T (Text)
PROMPT *
PROMPT * Input Parameters
PROMPT * - From Timestamp = '&&FROM_TIMESTAMP' ( YYYY-MM-DD HH24:MI:SS format, default sysdate - 1/24)
PROMPT * - To Timestamp = '&&TO_TIMESTAMP' ( YYYY-MM-DD HH24:MI:SS format, default sysdate))
PROMPT * - Instance List = '&&INSTANCE_LIST' ( % for ALL or comma separated list of instance numbers)
PROMPT ***********************************************************************
set pages 0
/*
DBMS_WORKLOAD_REPOSITORY.ASH_GLOBAL_REPORT_TEXT(
l_dbid IN VARCHAR2(1023),
l_inst_num IN VARCHAR2,
l_btime IN DATE,
l_etime IN DATE,
l_options IN NUMBER DEFAULT 0, -- Not currently used by Oracle
l_slot_width IN NUMBER DEFAULT 0, -- Not currently used by Oracle
l_sid IN NUMBER DEFAULT NULL, -- v$session.sid
l_sql_id IN VARCHAR2 DEFAULT NULL, -- V$SQL.SQL_ID (Wildcard allowed)
l_wait_class IN VARCHAR2 DEFAULT NULL, -- v$event_name.wait_class (Wildcard allowed)
l_service_hash IN NUMBER DEFAULT NULL, -- v$active_services.name_hash
l_module IN VARCHAR2 DEFAULT NULL, -- v$session.module (Wildcard allowed)
l_action IN VARCHAR2 DEFAULT NULL, -- v$session.action (Wildcard allowed)
l_client_id IN VARCHAR2 DEFAULT NULL, -- v$session.client_identifier (Wildcard allowed)
l_plsql_entry IN VARCHAR2 DEFAULT NULL,
l_data_src IN NUMBER DEFAULT 0)
RETURN awrrpt_text_type_table PIPELINED;
*/
SELECT * from table(dbms_workload_repository.ash_global_report_text
( l_dbid => (select dbid from v$database)
, l_inst_num => DECODE(upper('&INSTANCE_LIST'),'%',NULL,'&INSTANCE_LIST')
, l_btime => TO_DATE('&&FROM_TIMESTAMP','YYYY-MM-DD HH24:MI:SS')
, l_etime => TO_DATE('&&TO_TIMESTAMP','YYYY-MM-DD HH24:MI:SS')
, l_sid => NULL
, l_sql_id => NULL
, l_wait_class => NULL
, l_service_hash => NULL
, l_module => NULL
, l_action => NULL
, l_client_id => NULL
)
);
UNDEFINE NO_OF_HOURS
UNDEFINE INSTANCE_LIST
@@footer

136
vg/ash_report_html.sql Normal file
View File

@@ -0,0 +1,136 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Generate ASH report for instances passed
* Parameters : 1 - From Time (Optional) ( YYYY-MM-DD HH24:MI:SS format) - Default is (sysdate - 1/24)
* 2 - To Time (Optional) ( YYYY-MM-DD HH24:MI:SS format) - Default is sysdate
* 2 - INST_ID (Optional) ( % for all or comma separated list of instance numbers).
* 4 - ServiceName (Optional) Default is NULL
* 5 - SID (Optional) Default is NULL
* 6 - SQL_ID (Optional) Default is NULL
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 17-Feb-14 Vishal Gupta Changed order of input parameters
* 28-Jan-15 Vishal Gupta Added SID, SQL_ID, ServiceName input parameters
* 04-Oct-12 Vishal Gupta Added default input parameter values
* 18-Feb-12 Vishal Gupta Created
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE FROM_TIMESTAMP
UNDEFINE TO_TIMESTAMP
UNDEFINE INSTANCE_LIST
UNDEFINE SERVICE_NAME
UNDEFINE SID
UNDEFINE SQL_ID
DEFINE FROM_TIMESTAMP="&&1"
DEFINE TO_TIMESTAMP="&&2"
DEFINE INSTANCE_LIST="&&3"
DEFINE SERVICE_NAME="&&4"
DEFINE SID="&&5"
DEFINE SQL_ID="&&6"
COLUMN _FROM_TIMESTAMP NEW_VALUE FROM_TIMESTAMP NOPRINT
COLUMN _TO_TIMESTAMP NEW_VALUE TO_TIMESTAMP NOPRINT
COLUMN _INSTANCE_LIST NEW_VALUE INSTANCE_LIST NOPRINT
COLUMN _SID NEW_VALUE SID NOPRINT
COLUMN _SQL_ID NEW_VALUE SQL_ID NOPRINT
COLUMN _SERVICE_NAME NEW_VALUE SERVICE_NAME NOPRINT
COLUMN _SERVICE_HASH NEW_VALUE SERVICE_HASH NOPRINT
set term off
SELECT DECODE('&&FROM_TIMESTAMP','',to_char(sysdate - 1/24,'YYYY-MM-DD HH24:MI:SS'),'&&FROM_TIMESTAMP') "_FROM_TIMESTAMP"
, DECODE('&&TO_TIMESTAMP','',to_char(sysdate ,'YYYY-MM-DD HH24:MI:SS'),'&&TO_TIMESTAMP') "_TO_TIMESTAMP"
, DECODE('&&INSTANCE_LIST','','%','&&INSTANCE_LIST') "_INSTANCE_LIST"
, DECODE('&&SERVICE_NAME','','%','&&SERVICE_NAME') "_SERVICE_NAME"
, DECODE('&&SERVICE_HASH','','%','&&SERVICE_HASH') "_SERVICE_HASH"
, DECODE('&&SID','','%','&&SID') "_SID"
, DECODE('&&SQL_ID','','%','&&SQL_ID') "_SQL_ID"
FROM DUAL;
set term on
set term off
SELECT s.name_hash "_SERVICE_HASH"
FROM dba_services s
WHERE s.name = '&&SERVICE_NAME';
set term on
PROMPT
PROMPT ***********************************************************************
PROMPT * A S H R E P O R T (HTML)
PROMPT *
PROMPT * Input Parameters
PROMPT * - From Timestamp = '&&FROM_TIMESTAMP' ( YYYY-MM-DD HH24:MI:SS format) - Default is (sysdate - 1/24)
PROMPT * - To Timestamp = '&&TO_TIMESTAMP' ( YYYY-MM-DD HH24:MI:SS format) - Default is (sysdate)
PROMPT * - Instance List = '&&INSTANCE_LIST' ( % for ALL or comma separated list of instance numbers) - Default is %
PROMPT * - SERVICE_NAME = '&&SERVICE_NAME' - Default is %
PROMPT * - SID = '&&SID' - Default is %
PROMPT * - SQL_ID = '&&SQL_ID' - Default is %
PROMPT ***********************************************************************
set pages 0
/*
DBMS_WORKLOAD_REPOSITORY.ASH_GLOBAL_REPORT_TEXT(
l_dbid IN VARCHAR2(1023),
l_inst_num IN VARCHAR2,
l_btime IN DATE,
l_etime IN DATE,
l_options IN NUMBER DEFAULT 0, -- Not currently used by Oracle
l_slot_width IN NUMBER DEFAULT 0, -- Not currently used by Oracle
l_sid IN NUMBER DEFAULT NULL, -- v$session.sid
l_sql_id IN VARCHAR2 DEFAULT NULL, -- V$SQL.SQL_ID (Wildcard allowed)
l_wait_class IN VARCHAR2 DEFAULT NULL, -- v$event_name.wait_class (Wildcard allowed)
l_service_hash IN NUMBER DEFAULT NULL, -- v$active_services.name_hash
l_module IN VARCHAR2 DEFAULT NULL, -- v$session.module (Wildcard allowed)
l_action IN VARCHAR2 DEFAULT NULL, -- v$session.action (Wildcard allowed)
l_client_id IN VARCHAR2 DEFAULT NULL, -- v$session.client_identifier (Wildcard allowed)
l_plsql_entry IN VARCHAR2 DEFAULT NULL,
l_data_src IN NUMBER DEFAULT 0)
RETURN awrrpt_text_type_table PIPELINED;
*/
set term off
spool ash_report.html
SELECT * from table(dbms_workload_repository.ash_global_report_html
( l_dbid => (select dbid from v$database)
, l_inst_num => DECODE(upper('&INSTANCE_LIST'),'%',NULL,'&INSTANCE_LIST')
, l_btime => TO_DATE('&&FROM_TIMESTAMP','YYYY-MM-DD HH24:MI:SS')
, l_etime => TO_DATE('&&TO_TIMESTAMP','YYYY-MM-DD HH24:MI:SS')
, l_sid => DECODE('&&SID','%',NULL,'&&SID')
, l_sql_id => DECODE('&&SQL_ID','%',NULL,'&&SQL_ID')
, l_wait_class => NULL
, l_service_hash => DECODE('&&SERVICE_HASH','%',NULL,'&&SERVICE_HASH')
, l_module => NULL
, l_action => NULL
, l_client_id => NULL
)
);
spool off
set term on
PROMPT
PROMPT Report generated as ash_report.html file. It will automatically open in your default browser.
set pages 5000
host ash_report.html
@@footer

132
vg/ash_sessions.sql Normal file
View File

@@ -0,0 +1,132 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display Session details from ASH
* Compatibility : 10.1 and above
* Parameters : 1 - Number of hours (Default 1 hour)
* 2 - SQLExec Duration (in Seconds) (Default 60 sec)
* 3 - DB User Name (Default '%')
* 4 - Program (Default '%')
* 5 - Service Name (Default '%')
* 6 - Where Clause
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 20-MAR-15 Vishal Gupta Modified input parameter and renamed script
* from ash_sid_details.sql to ash_sessions.sql
* 03-FEB-14 Vishal Gupta Created
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE HOURS
UNDEFINE DURATION
UNDEFINE USERNAME
UNDEFINE PROGRAM
UNDEFINE SERVICE_NAME
UNDEFINE WHERECLAUSE
DEFINE HOURS="&&1"
DEFINE DURATION="&&2"
DEFINE USERNAME="&&3"
DEFINE PROGRAM="&&4"
DEFINE SERVICE_NAME="&&5"
DEFINE WHERECLAUSE="&&6"
COLUMN _HOURS NEW_VALUE HOURS NOPRINT
COLUMN _DURATION NEW_VALUE DURATION NOPRINT
COLUMN _USERNAME NEW_VALUE USERNAME NOPRINT
COLUMN _PROGRAM NEW_VALUE PROGRAM NOPRINT
COLUMN _SERVICE_NAME NEW_VALUE SERVICE_NAME NOPRINT
COLUMN _SERVICE_NAME NEW_VALUE SERVICE_NAME NOPRINT
set term off
SELECT DECODE(UPPER('&&HOURS'),'','1',UPPER('&&HOURS')) "_HOURS"
, DECODE(UPPER('&&DURATION'),'','60',UPPER(DURATION)) "_DURATION"
, DECODE(UPPER('&&USERNAME'),'','%',UPPER('&&USERNAME')) "_USERNAME"
, DECODE(UPPER('&&PROGRAM'),'','%',UPPER('&&PROGRAM')) "_PROGRAM"
, DECODE(UPPER('&&SERVICE_NAME'),'','%',UPPER('&&SERVICE_NAME')) "_SERVICE_NAME"
FROM DUAL;
set term on
/***********************************/
PROMPT ***************************************************
PROMPT * ASH SQL Details
PROMPT *
PROMPT * Input Parameter:
PROMPT * Number of Hours = "&&HOURS"
PROMPT * SQLExec Duration = "&&DURATION" seconds
PROMPT * DB UserName = "&&USERNAME"
PROMPT * Program = "&&PROGRAM"
PROMPT * ServiceName = "&&SERVICE_NAME"
PROMPT * WhereClause = "&&WHERECLAUSE"
PROMPT ***************************************************
COLUMN session_id HEADING "SID" FORMAT 99999
COLUMN inst_id HEADING "I#" FORMAT 99
COLUMN "session_serial#" HEADING "Serial#" FORMAT 999999
COLUMN sample_time_min FORMAT a18
COLUMN sample_time_max FORMAT a18
COLUMN username HEADING "DBUser" FORMAT a18
COLUMN service_name HEADING "ServiceName" FORMAT a21
COLUMN program HEADING "Program" FORMAT a25 TRUNCATE
COLUMN machine HEADING "Machine" FORMAT a25 TRUNCATE
COLUMN module HEADING "Module" FORMAT a25 TRUNCATE
-- Get the SQL Statements from ASH
SELECT /*+ parallel(ash, 10) */
--ash.sql_exec_id,
NVL(ash.qc_session_id,ash.session_id) session_id
, NVL(ash.qc_instance_id,ash.inst_id) inst_id
, NVL(ash.qc_session_serial#,ash.session_serial#) session_serial#
, TO_CHAR(MIN(ash.sample_time),'DD-MON-YY HH24:MI:SS') sample_time_min
, TO_CHAR(max(ash.sample_time) ,'DD-MON-YY HH24:MI:SS') sample_time_max
, u.username
, s.name service_name
, NVL(ash_parent.program,ash.program) program
, ash.machine
, ash.module
FROM gv$active_session_history ash
JOIN dba_users u ON u.user_id = ash.user_id
JOIN dba_services s ON s.name_hash = ash.service_hash
LEFT OUTER JOIN gv$active_session_history ash_parent
ON ash_parent.inst_id = ash.qc_instance_id
AND ash_parent.session_id = ash.qc_session_id
AND ash_parent.session_serial# = ash.qc_session_serial#
AND CAST(ash_parent.sample_time as DATE) = ash.sql_exec_start
WHERE ash.sql_id IS NOT NULL
-- AND NVL(ash.qc_instance_id,ash.inst_id) LIKE '&&INST_ID'
-- AND NVL(ash.qc_session_id,ash.session_id) LIKE '&&SID'
-- AND NVL(ash.qc_session_serial#,ash.session_serial#) LIKE '&&SERIAL'
AND ash.sample_time > sysdate - (&&HOURS/24)
AND (ash_parent.sample_time IS NULL or ash_parent.sample_time > sysdate - (&&HOURS/24))
AND ash.sql_exec_id IS NOT NULL
AND (cast(ash.sample_time as date) - ash.sql_exec_start)* 24*60*60 > '&&DURATION'
-- AND ash.user_id = (select user_id from dba_users where username LIKE '&&USERNAME')
-- AND ash.service_hash = (select name_hash from dba_services where name LIKE '&&SERVICE_NAME')
AND ash.program LIKE '&&PROGRAM'
&&WHERECLAUSE
GROUP BY NVL(ash.qc_session_id,ash.session_id)
, NVL(ash.qc_instance_id,ash.inst_id)
, NVL(ash.qc_session_serial#,ash.session_serial#)
, u.username
, s.name
, NVL(ash_parent.program,ash.program)
, ash.machine
, ash.module
ORDER BY MIN(ash.sample_time) ASC
, max(ash.sample_time) asc
;
@@footer

116
vg/ash_sid_details.sql Normal file
View File

@@ -0,0 +1,116 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display Session details from ASH
* Compatibility : 10.1 and above
* Parameters : 1 - SID
* 2 - INST_ID (optional, default to 1)
* 3 - Serial# (Default %)
* 4 - Number of hours (Default 24)
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 31-Dec-15 Vishal Gupta Added duration in the output
* 03-FEB-14 Vishal Gupta Created
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE SID
UNDEFINE INST_ID
UNDEFINE SERIAL
UNDEFINE HOURS
DEFINE SID="&&1"
DEFINE INST_ID="&&2"
DEFINE SERIAL="&&3"
DEFINE HOURS="&&4"
DEFINE WHERECLAUSE="&&5"
COLUMN _SID NEW_VALUE SID NOPRINT
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
COLUMN _SERIAL NEW_VALUE SERIAL NOPRINT
COLUMN _HOURS NEW_VALUE HOURS NOPRINT
set term off
SELECT DECODE(UPPER('&&SID'),'','%',UPPER('&&SID')) "_SID"
, DECODE(UPPER('&&INST_ID'),'','1',UPPER('&&INST_ID')) "_INST_ID"
, DECODE(UPPER('&&SERIAL'),'','%',UPPER('&&SERIAL')) "_SERIAL"
, DECODE(UPPER('&&HOURS'),'','24',UPPER('&&HOURS')) "_HOURS"
FROM DUAL;
set term on
/***********************************/
PROMPT ***************************************************
PROMPT * ASH SQL Details
PROMPT *
PROMPT * Input Parameter:
PROMPT * SID = "&&SID"
PROMPT * Instance ID = "&&INST_ID"
PROMPT * Serial# = "&&SERIAL"
PROMPT * Number of Hours = "&&HOURS"
PROMPT * WhereClause = "&&WHERECLAUSE"
PROMPT ***************************************************
COLUMN session_id HEADING "SID" FORMAT 99999
COLUMN inst_id HEADING "I#" FORMAT 99
COLUMN "session_serial#" HEADING "Serial#" FORMAT 999999
COLUMN sample_time_min FORMAT a18
COLUMN sample_time_max FORMAT a18
COLUMN duration HEADING "Duration|+D HH:MM:SS" FORMAT a12
COLUMN username HEADING "DBUser" FORMAT a18
COLUMN service_name HEADING "ServiceName" FORMAT a21
COLUMN program HEADING "Program" FORMAT a25 TRUNCATE
COLUMN machine HEADING "Machine" FORMAT a25 TRUNCATE
-- Get the SQL Statements from ASH
SELECT /*+ parallel(ash, 10) */
--ash.sql_exec_id,
NVL(ash.qc_session_id,ash.session_id) session_id
, NVL(ash.qc_instance_id,ash.inst_id) inst_id
, NVL(ash.qc_session_serial#,ash.session_serial#) session_serial#
, TO_CHAR(MIN(ash.sample_time),'DD-MON-YY HH24:MI:SS') sample_time_min
, TO_CHAR(max(ash.sample_time) ,'DD-MON-YY HH24:MI:SS') sample_time_max
, SUBSTR(REPLACE(max(ash.sample_time) - MIN(ash.sample_time),'+00000000','+')
,1,INSTR(REPLACE(max(ash.sample_time) - MIN(ash.sample_time),'+00000000','+'),'.')-1
) duration
, u.username
, s.name service_name
, NVL(ash_parent.program,ash.program) program
, ash.machine
FROM gv$active_session_history ash
JOIN dba_users u ON u.user_id = ash.user_id
JOIN dba_services s ON s.name_hash = ash.service_hash
LEFT OUTER JOIN gv$active_session_history ash_parent
ON ash_parent.inst_id = ash.qc_instance_id
AND ash_parent.session_id = ash.qc_session_id
AND ash_parent.session_serial# = ash.qc_session_serial#
AND CAST(ash_parent.sample_time as DATE) = ash.sql_exec_start
WHERE NVL(ash.qc_instance_id,ash.inst_id) LIKE '&&INST_ID'
AND NVL(ash.qc_session_id,ash.session_id) LIKE '&&SID'
AND NVL(ash.qc_session_serial#,ash.session_serial#) LIKE '&&SERIAL'
AND ash.sample_time > sysdate - (&&HOURS/24)
AND (ash_parent.sample_time IS NULL or ash_parent.sample_time > sysdate - (&&HOURS/24))
&&WHERECLAUSE
GROUP BY NVL(ash.qc_session_id,ash.session_id)
, NVL(ash.qc_instance_id,ash.inst_id)
, NVL(ash.qc_session_serial#,ash.session_serial#)
, u.username
, s.name
, NVL(ash_parent.program,ash.program)
, ash.machine
ORDER BY MIN(ash.sample_time) ASC
, max(ash.sample_time) asc
;
@@footer

122
vg/ash_sid_events.sql Normal file
View File

@@ -0,0 +1,122 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display Session's events from ASH
* Compatibility : 10.1 and above
* Parameters : 1 - SID
* 2 - INST_ID (optional, default to 1)
* 3 - Serial# (Default %)
* 4 - Number of hours (Default 24)
* 5 - WhereClause
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 15-MAY-14 Vishal Gupta Created
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE SID
UNDEFINE INST_ID
UNDEFINE SERIAL
UNDEFINE HOURS
UNDEFINE SQL_ID
UNDEFINE WHERECLAUSE
DEFINE SID="&&1"
DEFINE INST_ID="&&2"
DEFINE SERIAL="&&3"
DEFINE HOURS="&&4"
DEFINE WHERECLAUSE="&&5"
COLUMN _SID NEW_VALUE SID NOPRINT
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
COLUMN _SERIAL NEW_VALUE SERIAL NOPRINT
COLUMN _HOURS NEW_VALUE HOURS NOPRINT
set term off
SELECT DECODE(UPPER('&&SID'),'','%',UPPER('&&SID')) "_SID"
, DECODE(UPPER('&&INST_ID'),'','1',UPPER('&&INST_ID')) "_INST_ID"
, DECODE(UPPER('&&SERIAL'),'','%',UPPER('&&SERIAL')) "_SERIAL"
, DECODE(UPPER('&&HOURS'),'','24',UPPER('&&HOURS')) "_HOURS"
FROM DUAL;
set term on
/***********************************/
PROMPT ***************************************************
PROMPT * ASH Session Events
PROMPT *
PROMPT * Input Parameter:
PROMPT * SID = "&&SID"
PROMPT * Instance ID = "&&INST_ID"
PROMPT * Serial# = "&&SERIAL"
PROMPT * Number of Hours = "&&HOURS"
PROMPT * Where Clause = "&&WHERECLAUSE"
PROMPT ***************************************************
COLUMN session_id HEADING "SID" FORMAT 99999
COLUMN inst_id HEADING "I#" FORMAT 99
COLUMN "session_serial#" HEADING "Serial#" FORMAT 999999
COLUMN FORCE_MATCHING_SIGNATURE FORMAT 99999999999999999999999
COLUMN sql_plan_hash_value HEADING "Plan|Hash|Value" FORMAT 9999999999
COLUMN sql_exec_start FORMAT a20
COLUMN sql_exec_end FORMAT a20
COLUMN duration FORMAT a15
COLUMN sql_opname HEADING "SQL|Operation" FORMAT a15 TRUNCATE
COLUMN sql_child_number HEADING "SQL|Ch#" FORMAT 999
COLUMN current_dop HEADING "DOP" FORMAT 999
COLUMN event HEADING "Event" FORMAT a40 TRUNCATE
COLUMN event_count HEADING "EventCount" FORMAT 99999999999
BREAK ON session_id ON inst_id ON session_serial# ON sql_exec_start ON sql_id ON sql_child_number ON sql_plan_hash_value
-- Get the session events from ASH
SELECT /*+ parallel(ash, 10) */
--ash.sql_exec_id,
NVL(ash.qc_session_id,ash.session_id) session_id
, NVL(ash.qc_instance_id,ash.inst_id) inst_id
, NVL(ash.qc_session_serial#,ash.session_serial#) session_serial#
, TO_CHAR(NVL(ash.sql_exec_start,MIN(ash.sample_time)),'DD-MON-YY HH24:MI:SS') sql_exec_start
, ash.sql_id
, ash.sql_child_number
, ash.sql_plan_hash_value
&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname
, count(1) event_count
, ash.event
FROM gv$active_session_history ash
WHERE ash.sql_id IS NOT NULL
AND NVL(ash.qc_instance_id,ash.inst_id) LIKE '&&INST_ID'
AND NVL(ash.qc_session_id,ash.session_id) LIKE '&&SID'
AND NVL(ash.qc_session_serial#,ash.session_serial#) LIKE '&&SERIAL'
AND ash.sample_time > sysdate - (&&HOURS/24)
AND ash.sql_exec_id IS NOT NULL
&&WHERECLAUSE
GROUP BY NVL(ash.qc_session_id,ash.session_id)
, NVL(ash.qc_instance_id,ash.inst_id)
, NVL(ash.qc_session_serial#,ash.session_serial#)
, ash.sql_exec_id
, ash.sql_exec_start
&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname
, ash.sql_id
, ash.sql_child_number
, ash.sql_plan_hash_value
, ash.force_matching_signature
, ash.event
ORDER BY --max(ash.sample_time) asc
--,
NVL(ash.sql_exec_start,MIN(ash.sample_time)) ASC
, ash.sql_id
, count(1) desc
;
@@footer

127
vg/ash_sid_list.sql Normal file
View File

@@ -0,0 +1,127 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display Session's from ASH
* Compatibility : 10.1 and above
* Parameters : 1 - SID
* 2 - INST_ID (optional, default to 1)
* 3 - Serial# (Default %)
* 4 - Number of hours (Default 24)
* 5 - SQL_ID (Default %)
* 6 - WhereClause
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 05-SEP-14 Vishal Gupta Removed filter for SQL_EXEC_START IS NOT NULL
* 03-FEB-14 Vishal Gupta Created
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE SID
UNDEFINE INST_ID
UNDEFINE SERIAL
UNDEFINE HOURS
UNDEFINE SQL_ID
UNDEFINE WHERECLAUSE
DEFINE SID="&&1"
DEFINE INST_ID="&&2"
DEFINE SERIAL="&&3"
DEFINE HOURS="&&4"
DEFINE SQL_ID="&&5"
DEFINE WHERECLAUSE="&&6"
COLUMN _SID NEW_VALUE SID NOPRINT
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
COLUMN _SERIAL NEW_VALUE SERIAL NOPRINT
COLUMN _HOURS NEW_VALUE HOURS NOPRINT
COLUMN _SQL_ID NEW_VALUE SQL_ID NOPRINT
set term off
SELECT DECODE(UPPER('&&SID'),'','%',UPPER('&&SID')) "_SID"
, DECODE(UPPER('&&INST_ID'),'','1',UPPER('&&INST_ID')) "_INST_ID"
, DECODE(UPPER('&&SERIAL'),'','%',UPPER('&&SERIAL')) "_SERIAL"
, DECODE(UPPER('&&HOURS'),'','0.01',UPPER('&&HOURS')) "_HOURS"
, DECODE('&&SQL_ID','','%','&&SQL_ID') "_SQL_ID"
FROM DUAL;
set term on
/***********************************/
PROMPT ***************************************************
PROMPT * ASH SQL Details
PROMPT *
PROMPT * Input Parameter:
PROMPT * SID = "&&SID"
PROMPT * Instance ID = "&&INST_ID"
PROMPT * Serial# = "&&SERIAL"
PROMPT * Number of Hours = "&&HOURS"
PROMPT * SQL Id = "&&SQL_ID"
PROMPT * Where Clause = "&&WHERECLAUSE"
PROMPT ***************************************************
COLUMN session_id HEADING "SID" FORMAT 99999
COLUMN inst_id HEADING "I#" FORMAT 99
COLUMN "session_serial#" HEADING "Serial#" FORMAT 999999
COLUMN sample_time_min FORMAT a18
COLUMN sample_time_max FORMAT a18
COLUMN username HEADING "DBUser" FORMAT a20
COLUMN service_name HEADING "ServiceName" FORMAT a22
COLUMN program HEADING "Program" FORMAT a25 TRUNCATE
COLUMN machine HEADING "Machine" FORMAT a25
COLUMN pga_allocated HEADING "PGA(MB)" FORMAT 999,999
-- Get the SQL Statements from ASH
SELECT /*+ parallel(ash, 10) */
--ash.sql_exec_id,
TO_CHAR(MIN(ash.sample_time),'DD-MON-YY HH24:MI:SS') sample_time_min
, TO_CHAR(max(ash.sample_time) ,'DD-MON-YY HH24:MI:SS') sample_time_max
, NVL(ash.qc_session_id,ash.session_id) session_id
, NVL(ash.qc_instance_id,ash.inst_id) inst_id
, NVL(ash.qc_session_serial#,ash.session_serial#) session_serial#
, u.username
, s.name service_name
, NVL(ash_parent.program,ash.program) program
, SUBSTR(NVL(ash_parent.machine,ash.machine)
,1,DECODE(INSTR(NVL(ash_parent.machine,ash.machine),'.')-1,-1,LENGTH(NVL(ash_parent.machine,ash.machine)))
) machine
, ROUND(MAX(ash.pga_allocated + NVL(ash_parent.pga_allocated,0))/power(1024,2)) pga_allocated
FROM gv$active_session_history ash
JOIN dba_users u ON u.user_id = ash.user_id
JOIN dba_services s ON s.name_hash = ash.service_hash
LEFT OUTER JOIN gv$active_session_history ash_parent
ON ash_parent.inst_id = ash.qc_instance_id
AND ash_parent.session_id = ash.qc_session_id
AND ash_parent.session_serial# = ash.qc_session_serial#
AND CAST(ash_parent.sample_time as DATE) = ash.sql_exec_start
WHERE ash.sql_id IS NOT NULL
AND NVL(ash.qc_instance_id,ash.inst_id) LIKE '&&INST_ID'
AND NVL(ash.qc_session_id,ash.session_id) LIKE '&&SID'
AND NVL(ash.qc_session_serial#,ash.session_serial#) LIKE '&&SERIAL'
AND ash.sql_id LIKE '&&SQL_ID'
AND ash.sample_time > sysdate - (&&HOURS/24)
AND (ash_parent.sample_time IS NULL or ash_parent.sample_time > sysdate - (&&HOURS/24))
--AND ash.sql_exec_start IS NOT NULL
&&WHERECLAUSE
GROUP BY NVL(ash.qc_session_id,ash.session_id)
, NVL(ash.qc_instance_id,ash.inst_id)
, NVL(ash.qc_session_serial#,ash.session_serial#)
, u.username
, s.name
, NVL(ash_parent.program,ash.program)
, SUBSTR(NVL(ash_parent.machine,ash.machine),1,DECODE(INSTR(NVL(ash_parent.machine,ash.machine),'.')-1,-1,LENGTH(NVL(ash_parent.machine,ash.machine))))
ORDER BY MIN(ash.sample_time) ASC
, max(ash.sample_time) asc
;
@@footer

229
vg/ash_sid_sqlids.sql Normal file
View File

@@ -0,0 +1,229 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display Session's SQL IDs from ASH
* Compatibility : 10.1 and above
* Parameters : 1 - SID
* 2 - INST_ID (optional, default to 1)
* 3 - Serial# (Default %)
* 4 - Number of hours (Default 24)
* 5 - SQL_ID (Default %)
* 6 - WhereClause
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 02-JUL-15 Vishal Gupta Added logic to sum up temp/page space for all parallel slaves
* 21-JAN-14 Vishal Gupta Added SQL_ID and whereclause as input parameter
* 28-JUN-12 Vishal Gupta Created
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE SID
UNDEFINE INST_ID
UNDEFINE SERIAL
UNDEFINE HOURS
UNDEFINE SQL_ID
UNDEFINE WHERECLAUSE
UNDEFINE WHERECLAUSE2
UNDEFINE HAVINGCLAUSE
DEFINE SID="&&1"
DEFINE INST_ID="&&2"
DEFINE SERIAL="&&3"
DEFINE HOURS="&&4"
DEFINE SQL_ID="&&5"
DEFINE WHERECLAUSE="&&6"
DEFINE WHERECLAUSE2="&&7"
DEFINE HAVINGCLAUSE="&&8"
COLUMN _SID NEW_VALUE SID NOPRINT
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
COLUMN _SERIAL NEW_VALUE SERIAL NOPRINT
COLUMN _HOURS NEW_VALUE HOURS NOPRINT
COLUMN _SQL_ID NEW_VALUE SQL_ID NOPRINT
set term off
SELECT DECODE(UPPER('&&SID'),'','%',UPPER('&&SID')) "_SID"
, DECODE(UPPER('&&INST_ID'),'','1',UPPER('&&INST_ID')) "_INST_ID"
, DECODE(UPPER('&&SERIAL'),'','%',UPPER('&&SERIAL')) "_SERIAL"
, DECODE(UPPER('&&HOURS'),'','24',UPPER('&&HOURS')) "_HOURS"
, DECODE('&&SQL_ID','','%','&&SQL_ID') "_SQL_ID"
FROM DUAL;
set term on
/***********************************/
/************************************
* CONFIGURATION PARAMETERS
************************************/
DEFINE COUNT_FORMAT=99,999
--DEFINE COUNT_DIVIDER="1"
--DEFINE COUNT_HEADING="#"
DEFINE COUNT_DIVIDER="1000"
DEFINE COUNT_HEADING="#1000"
DEFINE BYTES_FORMAT=99,999
--DEFINE BYTES_DIVIDER="1024"
--DEFINE BYTES_HEADING="KB"
--DEFINE BYTES_DIVIDER="1024/1024"
--DEFINE BYTES_HEADING="MB"
DEFINE BYTES_DIVIDER="1024/1024/1024"
DEFINE BYTES_HEADING="GB"
/************************************/
PROMPT ***************************************************
PROMPT * ASH SQL Ids
PROMPT *
PROMPT * Input Parameter:
PROMPT * SID = "&&SID"
PROMPT * Instance ID = "&&INST_ID"
PROMPT * Serial# = "&&SERIAL"
PROMPT * Number of Hours = "&&HOURS"
PROMPT * SQL Id = "&&SQL_ID"
PROMPT * Where Clause = "&&WHERECLAUSE"
PROMPT * Where Clause2 = "&&WHERECLAUSE2"
PROMPT * Having Clause = "&&HAVINGCLAUSE"
PROMPT ***************************************************
COLUMN session_id HEADING "SID" FORMAT 99999
COLUMN instance_number HEADING "I#" FORMAT 99
COLUMN inst_id HEADING "I#" FORMAT 99
COLUMN "session_serial#" HEADING "Serial#" FORMAT 999999
COLUMN FORCE_MATCHING_SIGNATURE HEADING "Force|Matching|Signature" FORMAT 99999999999999999999999
COLUMN sql_plan_hash_value HEADING "Plan|Hash|Value" FORMAT 9999999999
COLUMN sql_exec_start FORMAT a18
COLUMN sql_exec_end FORMAT a18
COLUMN duration HEADING "Duration|+D HH:MM:SS" FORMAT a12
COLUMN sql_opname HEADING "SQL|Operation" FORMAT a10 TRUNCATE
COLUMN sql_child_number HEADING "SQL|Ch#" FORMAT 999
COLUMN current_dop HEADING "DOP" FORMAT 999
COLUMN phyread_requests HEADING "Phy|Read|Reqs|(&&COUNT_HEADING)" FORMAT 999999
COLUMN phywrite_requests HEADING "Phy|Write|Reqs|(&&COUNT_HEADING)" FORMAT 999999
COLUMN phyread HEADING "Phy|Read|(&&BYTES_HEADING)" FORMAT 9999
COLUMN phywrite HEADING "Phy|Write|(&&BYTES_HEADING)" FORMAT 9999
COLUMN interconnect_io HEADING "Inter|Connect|IO|(&&BYTES_HEADING)" FORMAT 9999
COLUMN pga_allocated HEADING "PGA|(&&BYTES_HEADING)" FORMAT 999.00
COLUMN temp_space_allocated HEADING "Temp|Space|(&&BYTES_HEADING)" FORMAT 9999.00
-- Get the SQL Statements from ASH
SELECT
NVL(ash.qc_session_id,ash.session_id) session_id
, NVL(ash.qc_instance_id,ash.inst_id) inst_id
, NVL(ash.qc_session_serial#,ash.session_serial#) session_serial#
, TO_CHAR(NVL(ash.sql_exec_start,MIN(ash.sample_time)),'DD-MON-YY HH24:MI:SS') sql_exec_start
, TO_CHAR(max(ash.sample_time) ,'DD-MON-YY HH24:MI:SS') sql_exec_end
, SUBSTR(REPLACE(max(ash.sample_time) - NVL(ash.sql_exec_start,MIN(ash.sample_time)),'00000000','')
,1,INSTR(REPLACE(max(ash.sample_time) - NVL(ash.sql_exec_start,MIN(ash.sample_time)),'00000000',''),'.')-1
) duration
&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname
--, ash.sql_exec_id
, ash.sql_id
, ash.sql_child_number
, ash.sql_plan_hash_value
&&_IF_ORA_11202_OR_HIGHER , max(current_dop) current_dop
, ash.force_matching_signature
, ash.top_level_sql_id
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_read_io_requests)/&&COUNT_DIVIDER) phyread_requests
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_write_io_requests)/&&COUNT_DIVIDER) phywrite_requests
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_read_io_bytes)/&&BYTES_DIVIDER) phyread
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_write_io_bytes)/&&BYTES_DIVIDER) phywrite
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_interconnect_io_bytes)/&&BYTES_DIVIDER) interconnect_io
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.pga_allocated)/&&BYTES_DIVIDER,2) pga_allocated
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.temp_space_allocated)/&&BYTES_DIVIDER,2) temp_space_allocated
FROM
(
SELECT /*+ parallel(ash, 10) LEADING(ash) */
ash.session_id
, ash.inst_id
, ash.session_serial#
, ash.qc_session_id
, ash.qc_instance_id
, ash.qc_session_serial#
, NVL(ash.sql_exec_start,MIN(ash.sample_time)) sql_exec_start
, max(ash.sample_time) sample_time
&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname
, ash.sql_exec_id
, ash.sql_id
, ash.sql_child_number
, ash.sql_plan_hash_value
&&_IF_ORA_11202_OR_HIGHER , max(trunc(ash.px_flags / 2097152)) current_dop
, ash.force_matching_signature
, NVL(ash_parent.top_level_sql_id,ash.top_level_sql_id) top_level_sql_id
&&_IF_ORA_11gR1_OR_HIGHER , SUM(ash.delta_read_io_requests) delta_read_io_requests
&&_IF_ORA_11gR1_OR_HIGHER , SUM(ash.delta_write_io_requests) delta_write_io_requests
&&_IF_ORA_11gR1_OR_HIGHER , SUM(ash.delta_read_io_bytes) delta_read_io_bytes
&&_IF_ORA_11gR1_OR_HIGHER , SUM(ash.delta_write_io_bytes) delta_write_io_bytes
&&_IF_ORA_11gR1_OR_HIGHER , SUM(ash.delta_interconnect_io_bytes) delta_interconnect_io_bytes
&&_IF_ORA_11gR1_OR_HIGHER , MAX(ash.pga_allocated) pga_allocated
&&_IF_ORA_11gR1_OR_HIGHER , MAX(ash.temp_space_allocated) temp_space_allocated
FROM gv$active_session_history ash
LEFT OUTER JOIN gv$active_session_history ash_parent
ON ash_parent.inst_id = ash.qc_instance_id
AND ash_parent.session_id = ash.qc_session_id
AND ash_parent.session_serial# = ash.qc_session_serial#
AND CAST(ash_parent.sample_time as DATE) = ash.sql_exec_start
AND ash_parent.sample_time > sysdate - (&&HOURS/24)
WHERE ash.sql_id IS NOT NULL
AND NVL(ash.qc_instance_id,ash.inst_id) LIKE '&&INST_ID'
AND NVL(ash.qc_session_id,ash.session_id) LIKE '&&SID'
AND NVL(ash.qc_session_serial#,ash.session_serial#) LIKE '&&SERIAL'
AND NVL(ash.sql_id,' ') LIKE '&&SQL_ID'
AND ash.sample_time > sysdate - (&&HOURS/24)
AND ash.sql_exec_id IS NOT NULL
&&WHERECLAUSE &&WHERECLAUSE2
GROUP BY ash.session_id
, ash.inst_id
, ash.session_serial#
, ash.qc_session_id
, ash.qc_instance_id
, ash.qc_session_serial#
, ash.sql_exec_id
, ash.sql_exec_start
, ash.sql_id
, ash.sql_child_number
, ash.sql_plan_hash_value
, ash.force_matching_signature
&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname
, NVL(ash_parent.top_level_sql_id,ash.top_level_sql_id)
) ash
WHERE 1=1
GROUP BY NVL(ash.qc_session_id,ash.session_id)
, NVL(ash.qc_instance_id,ash.inst_id)
, NVL(ash.qc_session_serial#,ash.session_serial#)
--, ash.sql_exec_id
, ash.sql_exec_start
, ash.sql_id
, ash.sql_child_number
, ash.sql_plan_hash_value
, ash.force_matching_signature
&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname
, ash.top_level_sql_id
&&HAVINGCLAUSE
--having (SUM(ash.delta_read_io_bytes)+SUM(ash.delta_interconnect_io_bytes) ) / power(1024,3) > 20 -- Physical Read + Write GBs
--having (SUM(ash.delta_read_io_bytes) ) / power(1024,3) > 100 -- Physical Write GBs
--having (SUM(ash.delta_interconnect_io_bytes) ) / power(1024,3) > 100 -- Interconnect IO GBs
--having (SUM(ash.pga_allocated) ) / power(1024,3) > 2 -- PGA GBs
--having (SUM(ash.temp_space_allocated) ) / power(1024,3) > 10 -- Temp Space GBs
ORDER BY --max(ash.sample_time) asc
--,
max(ash.sample_time) asc
, NVL(ash.sql_exec_start,MIN(ash.sample_time)) ASC
;
@@footer

212
vg/ash_temp_usage.sql Normal file
View File

@@ -0,0 +1,212 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display tempspace usage from ASH
* Compatibility : 10.1 and above
* Parameters : 1 - Number of hours (Default 24)
* 2 - SPACE_MB (Default 500MB)
* 3 - TEMPORARY_TABLESPACE (Default %)
* 4 - WhereClause
* 5 - WhereClause2
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 12-JUL-16 Vishal Gupta Created
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE HOURS
UNDEFINE SPACE_MB
UNDEFINE TEMP_TABLESPACE
UNDEFINE WHERECLAUSE
UNDEFINE WHERECLAUSE2
DEFINE HOURS="&&1"
DEFINE SPACE_MB="&&2"
DEFINE TEMP_TABLESPACE="&&3"
DEFINE WHERECLAUSE="&&4"
DEFINE WHERECLAUSE2="&&5"
COLUMN _HOURS NEW_VALUE HOURS NOPRINT
COLUMN _SPACE_MB NEW_VALUE SPACE_MB NOPRINT
COLUMN _TEMP_TABLESPACE NEW_VALUE TEMP_TABLESPACE NOPRINT
set term off
SELECT DECODE('&&HOURS' ,'','24' ,'&&HOURS') "_HOURS"
, DECODE('&&SPACE_MB' ,'','500','&&SPACE_MB') "_SPACE_MB"
, DECODE('&&TEMP_TABLESPACE','','%' ,UPPER('&&TEMP_TABLESPACE')) "_TEMP_TABLESPACE"
FROM DUAL;
set term on
/***********************************/
/************************************
* CONFIGURATION PARAMETERS
************************************/
DEFINE COUNT_FORMAT=99,999
--DEFINE COUNT_DIVIDER="1"
--DEFINE COUNT_HEADING="#"
DEFINE COUNT_DIVIDER="1000"
DEFINE COUNT_HEADING="#1000"
DEFINE BYTES_FORMAT=99,999
--DEFINE BYTES_DIVIDER="1024"
--DEFINE BYTES_HEADING="KB"
--DEFINE BYTES_DIVIDER="1024/1024"
--DEFINE BYTES_HEADING="MB"
DEFINE BYTES_DIVIDER="1024/1024/1024"
DEFINE BYTES_HEADING="GB"
/************************************/
PROMPT ***************************************************
PROMPT * ASH - High Temp space using SQL statements
PROMPT *
PROMPT * Input Parameter:
PROMPT * Number of Hours = "&&HOURS"
PROMPT * Space Threshold (MB) = "&&SPACE_MB"
PROMPT * Temporary Tablespace = "&&TEMP_TABLESPACE"
PROMPT * Where Clause = "&&WHERECLAUSE"
PROMPT * Where Clause2 = "&&WHERECLAUSE2"
PROMPT ***************************************************
COLUMN session_id HEADING "SID" FORMAT 99999
COLUMN instance_number HEADING "I#" FORMAT 99
COLUMN inst_id HEADING "I#" FORMAT 99
COLUMN "session_serial#" HEADING "Serial#" FORMAT 999999
COLUMN FORCE_MATCHING_SIGNATURE HEADING "Force|Matching|Signature" FORMAT 99999999999999999999999
COLUMN sql_plan_hash_value HEADING "Plan|Hash|Value" FORMAT 9999999999
COLUMN sql_exec_start FORMAT a18
COLUMN sql_exec_end FORMAT a18
COLUMN duration FORMAT a12
COLUMN sql_opname HEADING "SQL|Operation" FORMAT a10 TRUNCATE
COLUMN sql_child_number HEADING "SQL|Ch#" FORMAT 999
COLUMN current_dop HEADING "DOP" FORMAT 999
COLUMN phyread_requests HEADING "Phy|Read|Reqs|(&&COUNT_HEADING)" FORMAT 999999
COLUMN phywrite_requests HEADING "Phy|Write|Reqs|(&&COUNT_HEADING)" FORMAT 999999
COLUMN phyread HEADING "Phy|Read|(&&BYTES_HEADING)" FORMAT 9999
COLUMN phywrite HEADING "Phy|Write|(&&BYTES_HEADING)" FORMAT 9999
COLUMN interconnect_io HEADING "Inter|Connect|IO|(&&BYTES_HEADING)" FORMAT 9999
COLUMN pga_allocated HEADING "PGA|(&&BYTES_HEADING)" FORMAT 999.00
COLUMN temp_space_allocated HEADING "Temp|Space|(&&BYTES_HEADING)" FORMAT 9999.00
COLUMN temp_tbs HEADING "Temp TBS" FORMAT A30
-- Get the SQL Statements from ASH
SELECT
NVL(ash.qc_session_id,ash.session_id) session_id
, NVL(ash.qc_instance_id,ash.inst_id) inst_id
, NVL(ash.qc_session_serial#,ash.session_serial#) session_serial#
, TO_CHAR(NVL(ash.sql_exec_start,MIN(ash.sample_time)),'DD-MON-YY HH24:MI:SS') sql_exec_start
, TO_CHAR(max(ash.sample_time) ,'DD-MON-YY HH24:MI:SS') sql_exec_end
, SUBSTR(REPLACE(max(ash.sample_time) - NVL(ash.sql_exec_start,MIN(ash.sample_time)),'00000000','')
,1,INSTR(REPLACE(max(ash.sample_time) - NVL(ash.sql_exec_start,MIN(ash.sample_time)),'00000000',''),'.')-1
) duration
, (select temporary_tablespace from dba_users where user_id = ash.user_id) temp_tbs
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.temp_space_allocated)/&&BYTES_DIVIDER,2) temp_space_allocated
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.pga_allocated)/&&BYTES_DIVIDER,2) pga_allocated
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_read_io_requests)/&&COUNT_DIVIDER) phyread_requests
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_write_io_requests)/&&COUNT_DIVIDER) phywrite_requests
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_read_io_bytes)/&&BYTES_DIVIDER) phyread
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_write_io_bytes)/&&BYTES_DIVIDER) phywrite
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_interconnect_io_bytes)/&&BYTES_DIVIDER) interconnect_io
&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname
--, ash.sql_exec_id
, ash.sql_id
-- , ash.sql_child_number
-- , ash.sql_plan_hash_value
--&&_IF_ORA_11202_OR_HIGHER , max(current_dop) current_dop
-- , ash.force_matching_signature
-- , ash.top_level_sql_id
FROM
(
SELECT /*+ parallel(ash, 10) LEADING(ash) */
ash.session_id
, ash.inst_id
, ash.session_serial#
, ash.qc_session_id
, ash.qc_instance_id
, ash.qc_session_serial#
, NVL(ash.sql_exec_start,MIN(ash.sample_time)) sql_exec_start
, max(ash.sample_time) sample_time
&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname
, ash.user_id
, ash.sql_exec_id
, ash.sql_id
, ash.sql_child_number
, ash.sql_plan_hash_value
&&_IF_ORA_11202_OR_HIGHER , max(trunc(ash.px_flags / 2097152)) current_dop
, ash.force_matching_signature
, NVL(ash_parent.top_level_sql_id,ash.top_level_sql_id) top_level_sql_id
&&_IF_ORA_11gR1_OR_HIGHER , SUM(ash.delta_read_io_requests) delta_read_io_requests
&&_IF_ORA_11gR1_OR_HIGHER , SUM(ash.delta_write_io_requests) delta_write_io_requests
&&_IF_ORA_11gR1_OR_HIGHER , SUM(ash.delta_read_io_bytes) delta_read_io_bytes
&&_IF_ORA_11gR1_OR_HIGHER , SUM(ash.delta_write_io_bytes) delta_write_io_bytes
&&_IF_ORA_11gR1_OR_HIGHER , SUM(ash.delta_interconnect_io_bytes) delta_interconnect_io_bytes
&&_IF_ORA_11gR1_OR_HIGHER , MAX(ash.pga_allocated) pga_allocated
&&_IF_ORA_11gR1_OR_HIGHER , MAX(ash.temp_space_allocated) temp_space_allocated
FROM gv$active_session_history ash
LEFT OUTER JOIN gv$active_session_history ash_parent
ON ash_parent.inst_id = ash.qc_instance_id
AND ash_parent.session_id = ash.qc_session_id
AND ash_parent.session_serial# = ash.qc_session_serial#
AND CAST(ash_parent.sample_time as DATE) = ash.sql_exec_start
AND ash_parent.sample_time > sysdate - (&&HOURS/24)
WHERE ash.sql_id IS NOT NULL
AND ash.sample_time > sysdate - (&&HOURS/24)
AND ('&&TEMP_TABLESPACE' = '%'
OR ('&&TEMP_TABLESPACE' != '%'
AND ash.user_id IN (select user_id from dba_users where temporary_tablespace LIKE '&&TEMP_TABLESPACE')
)
)
AND ash.sql_exec_id IS NOT NULL
&&WHERECLAUSE &&WHERECLAUSE2
GROUP BY ash.session_id
, ash.inst_id
, ash.session_serial#
, ash.qc_session_id
, ash.qc_instance_id
, ash.qc_session_serial#
, ash.user_id
, ash.sql_exec_id
, ash.sql_exec_start
, ash.sql_id
, ash.sql_child_number
, ash.sql_plan_hash_value
, ash.force_matching_signature
&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname
, NVL(ash_parent.top_level_sql_id,ash.top_level_sql_id)
) ash
WHERE 1=1
GROUP BY NVL(ash.qc_session_id,ash.session_id)
, NVL(ash.qc_instance_id,ash.inst_id)
, NVL(ash.qc_session_serial#,ash.session_serial#)
, ash.user_id
, ash.sql_exec_id
, ash.sql_exec_start
, ash.sql_id
, ash.sql_child_number
, ash.sql_plan_hash_value
, ash.force_matching_signature
&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname
, ash.top_level_sql_id
HAVING MAX(ash.temp_space_allocated)/power(1024,2) > &&SPACE_MB -- Temp Space MBs
ORDER BY max(ash.sample_time) asc
, NVL(ash.sql_exec_start,MIN(ash.sample_time)) ASC
;
@@footer

82
vg/ash_top_actions.sql Normal file
View File

@@ -0,0 +1,82 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display top actions from ASH
* Parameters : 1 - Number of MINUTES (Default 5min))
* 2 - Top Row Count Default 10)
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 02-Apr-13 Vishal Gupta Created
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE MINUTES
UNDEFINE TOPROWCOUNT
UNDEFINE INST_ID
DEFINE MINUTES="&&1"
DEFINE TOPROWCOUNT="&&2"
DEFINE INST_ID='&&3'
set term off
COLUMN _MINUTES NEW_VALUE MINUTES NOPRINT
COLUMN _TOPROWCOUNT NEW_VALUE TOPROWCOUNT NOPRINT
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
SELECT DECODE('&&MINUTES','','5','&&MINUTES') "_MINUTES"
, DECODE('&&TOPROWCOUNT','','5','&&TOPROWCOUNT') "_TOPROWCOUNT"
, DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID"
from dual;
set term on
PROMPT *****************************************************************
PROMPT * ASH - Top &&TOPROWCOUNT Active Actions (Over Last &&MINUTES min)
PROMPT *
PROMPT * Input Parameters
PROMPT * - Minutes = '&&MINUTES'
PROMPT * - Top Row Count = '&&TOPROWCOUNT'
PROMPT * - Instance ID = '&&INST_ID'
PROMPT *****************************************************************
COLUMN action HEADING "Action" FORMAT a40
COLUMN percent HEADING "Activity| (%age)" FORMAT 999.99
COLUMN session_count HEADING "Active|Session|Count" FORMAT 999,999
WITH ash as
(SELECT /*+ NO_MERGE */
ash.action
, count(1) session_count
FROM gv$active_session_history ash
WHERE ash.sample_time > systimestamp - (&&MINUTES/(24*60))
AND ash.session_type <> 'BACKGROUND'
AND ash.inst_id LIKE '&&INST_ID'
GROUP BY ash.action
)
, ash_total as
(SELECT /*+ NO_MERGE */ SUM(session_count) session_total
FROM ash
)
SELECT * FROM (
SELECT ash.action
, LPAD(TO_CHAR(ROUND((session_count/ash_total.session_total)* 100,2),'999.99'),6) percent
, ash.session_count
FROM ash , ash_total
ORDER BY ROUND((session_count/ash_total.session_total)* 100,2) desc
)
WHERE ROWNUM <= &&TOPROWCOUNT
;
@@footer

66
vg/ash_top_activity.sql Normal file
View File

@@ -0,0 +1,66 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display top activity from ASH
* Parameters : 1 - Number of MINUTES (Default 5min))
* 2 - Top Row Count Default 10)
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 02-Apr-13 Vishal Gupta Created
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE MINUTES
UNDEFINE TOPROWCOUNT
UNDEFINE INST_ID
DEFINE MINUTES="&&1"
DEFINE TOPROWCOUNT="&&2"
DEFINE INST_ID='&&3'
set term off
COLUMN _MINUTES NEW_VALUE MINUTES NOPRINT
COLUMN _TOPROWCOUNT NEW_VALUE TOPROWCOUNT NOPRINT
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
SELECT DECODE('&&MINUTES','','5','&&MINUTES') "_MINUTES"
, DECODE('&&TOPROWCOUNT','','5','&&TOPROWCOUNT') "_TOPROWCOUNT"
, DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID"
from dual;
set term on
PROMPT *****************************************************************
PROMPT * ASH - Top Activity
PROMPT *
PROMPT * Input Parameters
PROMPT * - Minutes = '&&MINUTES'
PROMPT * - Top Row Count = '&&TOPROWCOUNT'
PROMPT * - Instance ID = '&&INST_ID'
PROMPT *****************************************************************
PROMPT
@@ash_top_services '&&MINUTES' '&&TOPROWCOUNT' '&&INST_ID'
PROMPT
@@ash_top_users '&&MINUTES' '&&TOPROWCOUNT' '&&INST_ID'
PROMPT
@@ash_top_modules '&&MINUTES' '&&TOPROWCOUNT' '&&INST_ID'
PROMPT
@@ash_top_actions '&&MINUTES' '&&TOPROWCOUNT' '&&INST_ID'
PROMPT
@@ash_top_clients '&&MINUTES' '&&TOPROWCOUNT' '&&INST_ID'
PROMPT
@@ash_top_sessions '&&MINUTES' '&&TOPROWCOUNT' '&&INST_ID'
@@footer

82
vg/ash_top_clients.sql Normal file
View File

@@ -0,0 +1,82 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display top user from ASH
* Parameters : 1 - Number of MINUTES (Default 5min))
* 2 - Top Row Count Default 10)
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 02-Apr-13 Vishal Gupta Created
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE MINUTES
UNDEFINE TOPROWCOUNT
UNDEFINE INST_ID
DEFINE MINUTES="&&1"
DEFINE TOPROWCOUNT="&&2"
DEFINE INST_ID='&&3'
set term off
COLUMN _MINUTES NEW_VALUE MINUTES NOPRINT
COLUMN _TOPROWCOUNT NEW_VALUE TOPROWCOUNT NOPRINT
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
SELECT DECODE('&&MINUTES','','5','&&MINUTES') "_MINUTES"
, DECODE('&&TOPROWCOUNT','','5','&&TOPROWCOUNT') "_TOPROWCOUNT"
, DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID"
from dual;
set term on
PROMPT *****************************************************************
PROMPT * ASH - Top &&TOPROWCOUNT Active Clients (Over Last &&MINUTES min)
PROMPT *
PROMPT * Input Parameters
PROMPT * - Minutes = '&&MINUTES'
PROMPT * - Top Row Count = '&&TOPROWCOUNT'
PROMPT * - Instance ID = '&&INST_ID'
PROMPT *****************************************************************
COLUMN client_id HEADING "Client ID" FORMAT a40
COLUMN percent HEADING "Activity| (%age)" FORMAT 999.99
COLUMN session_count HEADING "Active|Session|Count" FORMAT 999,999
WITH ash as
(SELECT /*+ NO_MERGE */
ash.client_id
, count(1) session_count
FROM gv$active_session_history ash
WHERE ash.sample_time > systimestamp - (&&MINUTES/(24*60))
AND ash.session_type <> 'BACKGROUND'
AND ash.inst_id LIKE '&&INST_ID'
GROUP BY ash.client_id
)
, ash_total as
(SELECT /*+ NO_MERGE */ SUM(session_count) session_total
FROM ash
)
SELECT * FROM (
SELECT ash.client_id
, LPAD(TO_CHAR(ROUND((session_count/ash_total.session_total)* 100,2),'999.99'),6) percent
, ash.session_count
FROM ash , ash_total
ORDER BY ROUND((session_count/ash_total.session_total)* 100,2) desc
)
WHERE ROWNUM <= &&TOPROWCOUNT
;
@@footer

83
vg/ash_top_modules.sql Normal file
View File

@@ -0,0 +1,83 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display top activity from ASH
* Parameters : 1 - Number of MINUTES (Default 5min))
* 2 - Top Row Count Default 10)
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 02-Apr-13 Vishal Gupta Created
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE MINUTES
UNDEFINE TOPROWCOUNT
UNDEFINE INST_ID
DEFINE MINUTES="&&1"
DEFINE TOPROWCOUNT="&&2"
DEFINE INST_ID='&&3'
set term off
COLUMN _MINUTES NEW_VALUE MINUTES NOPRINT
COLUMN _TOPROWCOUNT NEW_VALUE TOPROWCOUNT NOPRINT
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
SELECT DECODE('&&MINUTES','','5','&&MINUTES') "_MINUTES"
, DECODE('&&TOPROWCOUNT','','5','&&TOPROWCOUNT') "_TOPROWCOUNT"
, DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID"
from dual;
set term on
PROMPT *****************************************************************
PROMPT * ASH - Top &&TOPROWCOUNT Active Modules (Over Last &&MINUTES min)
PROMPT *
PROMPT * Input Parameters
PROMPT * - Minutes = '&&MINUTES'
PROMPT * - Top Row Count = '&&TOPROWCOUNT'
PROMPT * - Instance ID = '&&INST_ID'
PROMPT *****************************************************************
COLUMN module HEADING "Module" FORMAT a50
COLUMN percent HEADING "Activity| (%age)" FORMAT 999.99
COLUMN session_count HEADING "Active|Session|Count" FORMAT 999,999
WITH ash as
(SELECT /*+ NO_MERGE */
ash.module
, count(1) session_count
FROM gv$active_session_history ash
WHERE ash.sample_time > systimestamp - (&&MINUTES/(24*60))
AND ash.session_type <> 'BACKGROUND'
AND ash.inst_id LIKE '&&INST_ID'
GROUP BY ash.module
)
, ash_total as
(SELECT /*+ NO_MERGE */ SUM(session_count) session_total
FROM ash
)
SELECT * FROM (
SELECT ash.module
, LPAD(TO_CHAR(ROUND((session_count/ash_total.session_total)* 100,2),'999.99'),6) percent
, ash.session_count
FROM ash , ash_total
ORDER BY ROUND((session_count/ash_total.session_total)* 100,2) desc
)
WHERE ROWNUM <= &&TOPROWCOUNT
;
@@footer

93
vg/ash_top_services.sql Normal file
View File

@@ -0,0 +1,93 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display top activity from ASH
* Parameters : 1 - Number of MINUTES (Default 5min)
* 2 - Top Row Count (Default 5 rows)
* 3 - INST_ID (Default %)
* 3 - TO_MINUTES (Default 0min)
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 02-Apr-13 Vishal Gupta Created
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE FROM_MINUTES
UNDEFINE TOPROWCOUNT
UNDEFINE INST_ID
UNDEFINE TO_MINUTES
DEFINE FROM_MINUTES="&&1"
DEFINE TOPROWCOUNT="&&2"
DEFINE INST_ID='&&3'
DEFINE TO_MINUTES="&&4"
set term off
COLUMN _FROM_MINUTES NEW_VALUE FROM_MINUTES NOPRINT
COLUMN _TO_MINUTES NEW_VALUE TO_MINUTES NOPRINT
COLUMN _TOPROWCOUNT NEW_VALUE TOPROWCOUNT NOPRINT
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
SELECT DECODE('&&FROM_MINUTES','','5','&&FROM_MINUTES') "_FROM_MINUTES"
, DECODE('&&TO_MINUTES','','0','&&TO_MINUTES') "_TO_MINUTES"
, DECODE('&&TOPROWCOUNT','','5','&&TOPROWCOUNT') "_TOPROWCOUNT"
, DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID"
from dual;
set term on
PROMPT *****************************************************************
PROMPT * ASH - Top &&TOPROWCOUNT Active Services (Over Last &&FROM_MINUTES min)
PROMPT *
PROMPT * Input Parameters
PROMPT * - Minutes = '&&FROM_MINUTES'
PROMPT * - Top Row Count = '&&TOPROWCOUNT'
PROMPT * - Instance ID = '&&INST_ID'
PROMPT * - To Minutes = '&&TO_MINUTES'
PROMPT *****************************************************************
COLUMN service_name HEADING "ServiceName" FORMAT a30
COLUMN percent HEADING "Activity| (%age)" FORMAT 999.99
COLUMN session_count HEADING "Active|Session|Count" FORMAT 999,999
WITH ash as
(SELECT /*+ NO_MERGE */
sn.name service_name
, count(1) session_count
FROM gv$active_session_history ash
, dba_services sn
WHERE ash.service_hash = sn.name_hash
AND ash.session_type <> 'BACKGROUND'
AND ash.inst_id LIKE '&&INST_ID'
AND ash.sample_time > systimestamp - (&&FROM_MINUTES/(24*60))
AND ash.sample_time > systimestamp - (&&TO_MINUTES/(24*60))
GROUP BY sn.name
)
, ash_total as
(SELECT /*+ NO_MERGE */ SUM(session_count) session_total
FROM ash
)
SELECT * FROM (
SELECT ash.service_name
, LPAD(TO_CHAR(ROUND((session_count/ash_total.session_total)* 100,2),'999.99'),6) percent
, ash.session_count
FROM ash , ash_total
ORDER BY ROUND((session_count/ash_total.session_total)* 100,2) desc
)
WHERE ROWNUM <= &&TOPROWCOUNT
;
@@footer

View File

@@ -0,0 +1,117 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display top activity from ASH
* Parameters : 1 - Number of MINUTES (Default 5min)
* 2 - Top Row Count (Default 5 rows)
* 3 - INST_ID (Default %)
* 3 - TO_MINUTES (Default 0min)
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 02-Apr-13 Vishal Gupta Created
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE FROM_MINUTES
UNDEFINE TOPROWCOUNT
UNDEFINE INST_ID
UNDEFINE TO_MINUTES
DEFINE FROM_MINUTES="&&1"
DEFINE TOPROWCOUNT="&&2"
DEFINE INST_ID='&&3'
DEFINE TO_MINUTES="&&4"
set term off
COLUMN _FROM_MINUTES NEW_VALUE FROM_MINUTES NOPRINT
COLUMN _TO_MINUTES NEW_VALUE TO_MINUTES NOPRINT
COLUMN _TOPROWCOUNT NEW_VALUE TOPROWCOUNT NOPRINT
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
SELECT DECODE('&&FROM_MINUTES','','5','&&FROM_MINUTES') "_FROM_MINUTES"
, DECODE('&&TO_MINUTES','','0','&&TO_MINUTES') "_TO_MINUTES"
, DECODE('&&TOPROWCOUNT','','5','&&TOPROWCOUNT') "_TOPROWCOUNT"
, DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID"
from dual;
set term on
PROMPT *****************************************************************
PROMPT * ASH - Top &&TOPROWCOUNT Active Services (Over Last &&FROM_MINUTES min)
PROMPT *
PROMPT * Input Parameters
PROMPT * - Minutes = '&&FROM_MINUTES'
PROMPT * - Top Row Count = '&&TOPROWCOUNT'
PROMPT * - Instance ID = '&&INST_ID'
PROMPT * - To Minutes = '&&TO_MINUTES'
PROMPT *****************************************************************
COLUMN service_name HEADING "ServiceName" FORMAT a30
COLUMN percent HEADING "Activity| (%age)" FORMAT 999.99
COLUMN session_count HEADING "Active|Session|Count" FORMAT 999,999
WITH ash_session_summary AS
(
select TRUNC(ash.sample_time,'MI') sample_time
, s.name service_name
, count(1) session_count
from gv$active_session_history ash
JOIN dba_services s ON s.name_hash = ash.service_hash
where 1=1
AND s.name NOT IN ('SYS$BACKGROUND')
--and s.name = 'pr01pimi_sas_con'
and ash.sample_time > sysdate - (1/24)
group by TRUNC(ash.sample_time,'MI'), s.name
)
, ash_rank AS
(
SELECT service_name
, RANK() OVER (ORDER BY SUM(session_count) desc) rank
FROM ash_session_summary
GROUP BY service_name
)
, graph_unit AS
(
SELECT GREATEST(CEIL(MAX(SUM(session_count))/100),1) divider
FROM ash_session_summary
GROUP BY sample_time
)
SELECT a.sample_time
, MAX(DECODE(r.rank,1,a.service_name,' ')) rank1_service
, MAX(DECODE(r.rank,2,a.service_name,' ')) rank2_service
, MAX(DECODE(r.rank,3,a.service_name,' ')) rank3_service
, MAX(DECODE(r.rank,4,a.service_name,' ')) rank4_service
, SUM(DECODE(r.rank,1,a.session_count,0)) rank1
, SUM(DECODE(r.rank,2,a.session_count,0)) rank2
, SUM(DECODE(r.rank,3,a.session_count,0)) rank3
, SUM(DECODE(r.rank,4,a.session_count,0)) rank4
, SUM(CASE WHEN r.rank >= 5 THEN a.session_count ELSE 0 END) rank_others
, TRIM(RPAD(' ',ROUND(SUM(DECODE(r.rank,1,a.session_count,0))/g.divider),'#'))
|| TRIM(RPAD(' ',ROUND(SUM(DECODE(r.rank,2,a.session_count,0))/g.divider),'%'))
|| TRIM(RPAD(' ',ROUND(SUM(DECODE(r.rank,3,a.session_count,0))/g.divider),'&'))
|| TRIM(RPAD(' ',ROUND(SUM(DECODE(r.rank,4,a.session_count,0))/g.divider),'^'))
|| TRIM(RPAD(' ',ROUND(SUM(CASE WHEN r.rank >= 5 THEN a.session_count ELSE 0 END)/g.divider),'*'))
Graph
FROM ash_session_summary a
JOIN ash_rank r ON r.service_name = a.service_name
JOIN graph_unit g on g.divider >= 1
WHERE 1=1
GROUP BY a.sample_time, g.divider
ORDER BY a.sample_Time
;
@@footer

105
vg/ash_top_sessions.sql Normal file
View File

@@ -0,0 +1,105 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display top user from ASH
* Parameters : 1 - Number of MINUTES (Default 5min))
* 2 - Top Row Count Default 10)
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 02-Apr-13 Vishal Gupta Created
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE MINUTES
UNDEFINE TOPROWCOUNT
UNDEFINE INST_ID
DEFINE MINUTES="&&1"
DEFINE TOPROWCOUNT="&&2"
DEFINE INST_ID='&&3'
set term off
COLUMN _MINUTES NEW_VALUE MINUTES NOPRINT
COLUMN _TOPROWCOUNT NEW_VALUE TOPROWCOUNT NOPRINT
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
SELECT DECODE('&&MINUTES','','5','&&MINUTES') "_MINUTES"
, DECODE('&&TOPROWCOUNT','','5','&&TOPROWCOUNT') "_TOPROWCOUNT"
, DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID"
from dual;
set term on
PROMPT *****************************************************************
PROMPT * ASH - Top &&TOPROWCOUNT Active Sesssions (Over Last &&MINUTES min)
PROMPT *
PROMPT * Input Parameters
PROMPT * - Minutes = '&&MINUTES'
PROMPT * - Top Row Count = '&&TOPROWCOUNT'
PROMPT * - Instance ID = '&&INST_ID'
PROMPT *****************************************************************
COLUMN inst_id HEADING "Instance|Number" FORMAT 9999999
COLUMN sid HEADING "SID" FORMAT a6
COLUMN session_serial# HEADING "Serial#" FORMAT 9999999
COLUMN username HEADING "UserName" FORMAT a30
COLUMN program HEADING "Program" FORMAT a15 TRUNC
COLUMN machine HEADING "Machine" FORMAT a20 TRUNC
COLUMN percent HEADING "Activity| (%age)" FORMAT 999.99
COLUMN session_count HEADING "Active|Session|Count" FORMAT 999,999
WITH ash as
(SELECT /*+ NO_MERGE */
ash.inst_id
, ash.session_id
, ash.session_serial#
, u.username
, ash.program
, ash.machine
, count(1) session_count
FROM gv$active_session_history ash
, dba_users u
WHERE ash.user_id = u.user_id
AND ash.session_type <> 'BACKGROUND'
AND ash.inst_id LIKE '&&INST_ID'
AND ash.sample_time > systimestamp - (&&MINUTES/(24*60))
GROUP BY ash.inst_id
, ash.session_id
, ash.session_serial#
, u.username
, ash.program
, ash.machine
)
, ash_total as
(SELECT /*+ NO_MERGE */ SUM(session_count) session_total
FROM ash
)
SELECT * FROM (
SELECT inst_id
, session_id
, session_serial#
, username
, program
, machine
, LPAD(TO_CHAR(ROUND((session_count/ash_total.session_total)* 100,2),'999.99'),6) percent
, ash.session_count
FROM ash , ash_total
ORDER BY ROUND((session_count/ash_total.session_total)* 100,2) desc
)
WHERE ROWNUM <= &&TOPROWCOUNT
;
@@footer

156
vg/ash_top_sqlids.sql Normal file
View File

@@ -0,0 +1,156 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display SQLs above certain thresholds from ASH repository
* Compatibility : 11.1 and above
* Parameters : 1 - Number of hours (Default 1)
* 2 - Physical IO in GBs (Default 100)
* 3 - Physical Read in GBs (Default 0)
* 4 - Physical Write in GBs (Default 0)
* 5 - Interconnect IO in GBs (Default 0)
* 6 - WhereClause
* 7 - WhereClause2
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 21-JAN-14 Vishal Gupta Added SQL_ID and whereclause as input parmaeter
* 28-JUN-12 Vishal Gupta Created
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE HOURS
UNDEFINE PHYIO
UNDEFINE PHYREAD
UNDEFINE PHYWRITE
UNDEFINE INTERCONNECT_IO
UNDEFINE WHERECLAUSE
UNDEFINE WHERECLAUSE2
UNDEFINE INST_ID
DEFINE HOURS="&&1"
DEFINE PHYIO="&&2"
DEFINE PHYREAD="&&3"
DEFINE PHYWRITE="&&4"
DEFINE INTERCONNECT_IO="&&5"
DEFINE WHERECLAUSE="&&6"
DEFINE WHERECLAUSE2="&&7"
DEFINE INST_ID=""
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
COLUMN _HOURS NEW_VALUE HOURS NOPRINT
COLUMN _PHYIO NEW_VALUE PHYIO NOPRINT
COLUMN _PHYREAD NEW_VALUE PHYREAD NOPRINT
COLUMN _PHYWRITE NEW_VALUE PHYWRITE NOPRINT
COLUMN _INTERCONNECT_IO NEW_VALUE INTERCONNECT_IO NOPRINT
set term off
SELECT DECODE('&&HOURS','','1','%','1','&&HOURS') "_HOURS"
, DECODE('&&PHYIO','','100','%','100','&&PHYIO') "_PHYIO"
, DECODE('&&PHYREAD','','0','%','0','&&PHYREAD') "_PHYREAD"
, DECODE('&&PHYWRITE','','0','%','0','&&PHYWRITE') "_PHYWRITE"
, DECODE('&&INTERCONNECT_IO','','0','%','0','&&INTERCONNECT_IO') "_INTERCONNECT_IO"
FROM DUAL
;
set term on
/***********************************/
PROMPT ***************************************************
PROMPT * ASH SQL Ids
PROMPT *
PROMPT * Input Parameter:
PROMPT * Number of Hours = "&&HOURS"
PROMPT * Physical IO (GB) = "&&PHYIO"
PROMPT * Physical Read (GB) = "&&PHYREAD"
PROMPT * Physical Write (GB) = "&&PHYWRITE"
PROMPT * Interconnect IO (GB) = "&&INTERCONNECT_IO"
PROMPT * Where Clause = "&&WHERECLAUSE"
PROMPT * Where Clause2 = "&&WHERECLAUSE2"
PROMPT ***************************************************
COLUMN session_id HEADING "SID" FORMAT 99999
COLUMN instance_number HEADING "I#" FORMAT 99
COLUMN inst_id HEADING "I#" FORMAT 99
COLUMN "session_serial#" HEADING "Serial#" FORMAT 999999
COLUMN FORCE_MATCHING_SIGNATURE HEADING "Force|Matching|Signature" FORMAT 99999999999999999999999
COLUMN sql_plan_hash_value HEADING "Plan|Hash|Value" FORMAT 9999999999
COLUMN sql_exec_start FORMAT a18
COLUMN sql_exec_end FORMAT a18
COLUMN duration FORMAT a12
COLUMN sql_opname HEADING "SQL|Operation" FORMAT a10 TRUNCATE
COLUMN sql_child_number HEADING "SQL|Ch#" FORMAT 999
COLUMN current_dop HEADING "DOP" FORMAT 999
COLUMN phyread HEADING "Phy|Read|(GB)" FORMAT 9999
COLUMN phywrite HEADING "Phy|Write|(GB)" FORMAT 9999
COLUMN interconnect_io HEADING "Inter|Connect|IO|(GB)" FORMAT 9999
COLUMN pga_allocated HEADING "PGA|(GB)" FORMAT 999.00
COLUMN temp_space_allocated HEADING "Temp|Space|(GB)" FORMAT 9999.00
-- Get the SQL Statements from ASH
SELECT /*+ parallel(ash, 10) LEADING(ash) */
NVL(ash.qc_session_id,ash.session_id) session_id
, NVL(ash.qc_instance_id,ash.inst_id) inst_id
, NVL(ash.qc_session_serial#,ash.session_serial#) session_serial#
, TO_CHAR(NVL(ash.sql_exec_start,MIN(ash.sample_time)),'DD-MON-YY HH24:MI:SS') sql_exec_start
, TO_CHAR(max(ash.sample_time) ,'DD-MON-YY HH24:MI:SS') sql_exec_end
, SUBSTR(REPLACE(max(ash.sample_time) - NVL(ash.sql_exec_start,MIN(ash.sample_time)),'+00000000','+')
,1,INSTR(REPLACE(max(ash.sample_time) - NVL(ash.sql_exec_start,MIN(ash.sample_time)),'+00000000','+'),'.')-1
) duration
&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname
--, ash.sql_exec_id
, ash.sql_id
, ash.sql_child_number
, ash.sql_plan_hash_value
&&_IF_ORA_11202_OR_HIGHER , max(trunc(ash.px_flags / 2097152)) current_dop
, ash.force_matching_signature
, NVL(ash_parent.top_level_sql_id,ash.top_level_sql_id) top_level_sql_id
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_read_io_bytes)/power(1024,3)) phyread
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_write_io_bytes)/power(1024,3)) phywrite
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_interconnect_io_bytes)/power(1024,3)) interconnect_io
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(MAX(ash.pga_allocated)/power(1024,3),2) pga_allocated
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(MAX(ash.temp_space_allocated)/power(1024,3),2) temp_space_allocated
FROM gv$active_session_history ash
LEFT OUTER JOIN gv$active_session_history ash_parent
ON ash_parent.inst_id = ash.qc_instance_id
AND ash_parent.session_id = ash.qc_session_id
AND ash_parent.session_serial# = ash.qc_session_serial#
AND CAST(ash_parent.sample_time as DATE) = ash.sql_exec_start
AND ash_parent.sample_time > sysdate - (&&HOURS/24)
WHERE ash.sql_id IS NOT NULL
AND ash.sample_time > sysdate - (&&HOURS/24)
AND ash.sql_exec_id IS NOT NULL
&&WHERECLAUSE &&WHERECLAUSE2
GROUP BY NVL(ash.qc_session_id,ash.session_id)
, NVL(ash.qc_instance_id,ash.inst_id)
, NVL(ash.qc_session_serial#,ash.session_serial#)
, ash.sql_exec_id
, ash.sql_exec_start
, ash.sql_id
, ash.sql_child_number
, ash.sql_plan_hash_value
, ash.force_matching_signature
&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname
, NVL(ash_parent.top_level_sql_id,ash.top_level_sql_id)
having (SUM(ash.delta_read_io_bytes)+SUM(ash.delta_write_io_bytes) ) / power(1024,3) >= &&PHYIO
AND (SUM(ash.delta_read_io_bytes) ) / power(1024,3) >= &&PHYREAD
AND (SUM(ash.delta_write_io_bytes) ) / power(1024,3) >= &&PHYWRITE
AND (SUM(ash.delta_interconnect_io_bytes) ) / power(1024,3) >= &&INTERCONNECT_IO
ORDER BY --max(ash.sample_time) asc
--,
NVL(ash.sql_exec_start,MIN(ash.sample_time)) ASC
, max(ash.sample_time) asc
;
@@footer

86
vg/ash_top_users.sql Normal file
View File

@@ -0,0 +1,86 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display top user from ASH
* Parameters : 1 - Number of MINUTES (Default 5min))
* 2 - Top Row Count Default 10)
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 02-Apr-13 Vishal Gupta Created
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE MINUTES
UNDEFINE TOPROWCOUNT
UNDEFINE INST_ID
DEFINE MINUTES="&&1"
DEFINE TOPROWCOUNT="&&2"
DEFINE INST_ID='&&3'
set term off
COLUMN _MINUTES NEW_VALUE MINUTES NOPRINT
COLUMN _TOPROWCOUNT NEW_VALUE TOPROWCOUNT NOPRINT
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
SELECT DECODE('&&MINUTES','','5','&&MINUTES') "_MINUTES"
, DECODE('&&TOPROWCOUNT','','5','&&TOPROWCOUNT') "_TOPROWCOUNT"
, DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID"
from dual;
set term on
PROMPT *****************************************************************
PROMPT * ASH - Top &&TOPROWCOUNT Active Users (Over Last &&MINUTES min)
PROMPT *
PROMPT * Input Parameters
PROMPT * - Minutes = '&&MINUTES'
PROMPT * - Top Row Count = '&&TOPROWCOUNT'
PROMPT * - Instance ID = '&&INST_ID'
PROMPT *****************************************************************
COLUMN username HEADING "UserName" FORMAT a30
COLUMN percent HEADING "Activity| (%age)" FORMAT 999.99
COLUMN session_count HEADING "Active|Session|Count" FORMAT 999,999
WITH ash as
(SELECT /*+ NO_MERGE */
u.username
, count(1) session_count
FROM gv$active_session_history ash
, dba_users u
WHERE ash.user_id = u.user_id
AND ash.session_type <> 'BACKGROUND'
AND ash.inst_id LIKE '&&INST_ID'
AND ash.sample_time > systimestamp - (&&MINUTES/(24*60))
GROUP BY u.username
)
, ash_total as
(SELECT /*+ NO_MERGE */ SUM(session_count) session_total
FROM ash
)
SELECT * FROM (
SELECT ash.username
, LPAD(TO_CHAR(ROUND((session_count/ash_total.session_total)* 100,2),'999.99'),6) percent
, ash.session_count
FROM ash , ash_total
ORDER BY ROUND((session_count/ash_total.session_total)* 100,2) desc
)
WHERE ROWNUM <= &&TOPROWCOUNT
;
@@footer

217
vg/asm_database_size.sql Normal file
View File

@@ -0,0 +1,217 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : ASM usage by file type for all mounted diskgroups (including other databases)
* Parameters : 1 - DBName (% - wildchar, \ - escape char, default is '%')
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ ------------------------------------------------------------------------------
* 24-Dec-14 Vishal Gupta Enhanced script to display file only in alias directory if alias is present
* 21-Jan-14 Vishal Gupta Commented out unmirrored figures from output
* 18-Jul-13 Vishal Gupta Created
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE DBNAME
DEFINE DBNAME="&&1"
set term off
COLUMN _DBNAME NEW_VALUE DBNAME NOPRINT
SELECT UPPER(DECODE('&&DBNAME','','%',UPPER('&&DBNAME'))) "_DBNAME"
FROM DUAL;
set term on
PROMPT
PROMPT *******************************************************************
PROMPT * A S M S P A C E U S A G E B Y D A T A B A S E *
PROMPT * *
PROMPT * - For all diskgroups mounted in current instance *
PROMPT * - Including files for other databases *
PROMPT * *
PROMPT * Input Parameters *
PROMPT * - DB Name = '&&DBNAME'
PROMPT *******************************************************************
DEFINE size_label=GB
DEFINE size_divider="1024/1024/1024"
COLUMN diskgroup_name HEADING "DiskGroup" FORMAT A16
COLUMN DBNAME HEADING "DBName" FORMAT A15
COLUMN DISKGROUP_MirroredSize HEADING "Total|(&&size_label)" FORMAT 999,999
COLUMN DATAFILE_MirroredSize HEADING "Data|File|(&&size_label)" FORMAT 999,999
COLUMN TEMPFILE_MirroredSize HEADING "Temp|File|(&&size_label)" FORMAT 999,999
COLUMN ONLINELOG_MirroredSize HEADING "Redo|Log|(&&size_label)" FORMAT 99,999
COLUMN ARCHIVELOG_MirroredSize HEADING "Arch|Log|(&&size_label)" FORMAT 999,999
COLUMN BACKUPSET_MirroredSize HEADING "Backup|Set|(&&size_label)" FORMAT 999,999
COLUMN FLASHBACK_MirroredSize HEADING "Flash|Back|(&&size_label)" FORMAT 999,999
COLUMN OCRFILE_MirroredSize HEADING "OCR|(&&size_label)" FORMAT 999
COLUMN AUTOBACKUP_MirroredSize HEADING "Auto|Backup|(&&size_label)" FORMAT 999,999
COLUMN CONTROLFILE_MirroredSize HEADING "Ctrl|File|(&&size_label)" FORMAT 999
COLUMN PARAMFILE_MirroredSize HEADING "Param|File|(&&size_label)" FORMAT 999
COLUMN DISKGROUP_UnMirroredSize HEADING "Total|(&&size_label)" FORMAT 999,999
COLUMN DATAFILE_UnMirroredSize HEADING "Data|File|(&&size_label)" FORMAT 999,999
COLUMN TEMPFILE_UnMirroredSize HEADING "Temp|File|(&&size_label)" FORMAT 999,999
COLUMN ONLINELOG_UnMirroredSize HEADING "Redo|Log|(&&size_label)" FORMAT 9,999
COLUMN ARCHIVELOG_UnMirroredSize HEADING "Arch|Log|(&&size_label)" FORMAT 999,999
COLUMN BACKUPSET_UnMirroredSize HEADING "Backup|Set|(&&size_label)" FORMAT 999,999
COLUMN FLASHBACK_UnMirroredSize HEADING "Flash|Back|(&&size_label)" FORMAT 999,999
COLUMN OCRFILE_UnMirroredSize HEADING "OCR|(&&size_label)" FORMAT 999
COLUMN AUTOBACKUP_UnMirroredSize HEADING "Auto|Backup|(&&size_label)" FORMAT 999,999
COLUMN CONTROLFILE_UnMirroredSize HEADING "Ctrl|File|(&&size_label)" FORMAT 999
COLUMN PARAMFILE_UnMirroredSize HEADING "Param|File|(&&size_label)" FORMAT 999
BREAK ON REPORT
/*
BREAK ON diskgroup_name SKIP 1 DUPLICATES ON REPORT
COMPUTE SUM LABEL 'Total' OF DISKGROUP_MirroredSize FORMAT 99,999,999 ON diskgroup_name
COMPUTE SUM LABEL 'Total' OF DATAFILE_MirroredSize FORMAT 99,999,999 ON diskgroup_name
COMPUTE SUM LABEL 'Total' OF TEMPFILE_MirroredSize FORMAT 99,999,999 ON diskgroup_name
COMPUTE SUM LABEL 'Total' OF ONLINELOG_MirroredSize FORMAT 99,999,999 ON diskgroup_name
COMPUTE SUM LABEL 'Total' OF ARCHIVELOG_MirroredSize FORMAT 99,999,999 ON diskgroup_name
COMPUTE SUM LABEL 'Total' OF BACKUPSET_MirroredSize FORMAT 99,999,999 ON diskgroup_name
COMPUTE SUM LABEL 'Total' OF FLASHBACK_MirroredSize FORMAT 99,999,999 ON diskgroup_name
COMPUTE SUM LABEL 'Total' OF OCRFILE_MirroredSize FORMAT 99,999,999 ON diskgroup_name
COMPUTE SUM LABEL 'Total' OF AUTOBACKUP_MirroredSize FORMAT 99,999,999 ON diskgroup_name
COMPUTE SUM LABEL 'Total' OF CONTROLFILE_MirroredSize FORMAT 99,999,999 ON diskgroup_name
COMPUTE SUM LABEL 'Total' OF PARAMFILE_MirroredSize FORMAT 99,999,999 ON diskgroup_name
*/
COMPUTE SUM LABEL 'Total' OF DISKGROUP_MirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF DATAFILE_MirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF TEMPFILE_MirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF ONLINELOG_MirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF ARCHIVELOG_MirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF BACKUPSET_MirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF FLASHBACK_MirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF OCRFILE_MirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF AUTOBACKUP_MirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF CONTROLFILE_MirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF PARAMFILE_MirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF DISKGROUP_UnMirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF DATAFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF TEMPFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF ONLINELOG_UnMirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF ARCHIVELOG_UnMirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF BACKUPSET_UnMirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF FLASHBACK_UnMirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF OCRFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF AUTOBACKUP_UnMirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF CONTROLFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF PARAMFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT
/*
PROMPT
PROMPT
PROMPT - <------------------------ Mirrored (GB) --------------------------------> <------------------------- UnMirrored (GB) ----------------------------->
*/
WITH asm_alias AS (SELECT /*+ NO_MERGE MATERIALIZE */ * FROM v$asm_alias )
, asm_diskgroup_stat AS (SELECT /*+ NO_MERGE */ * FROM v$asm_diskgroup )
, asm_file AS (SELECT /*+ NO_MERGE MATERIALIZE */ * FROM v$asm_file )
, files AS (SELECT /*+ NO_MERGE MATERIALIZE */
diskgroup_name
, SUBSTR(SYS_CONNECT_BY_PATH(alias_name, '/'),2) File_Path
, alias_name
, type
, alias_directory
, space
, bytes
, system_created
, file_number
, incarnation
FROM (SELECT dg.name diskgroup_name
, a.parent_index parent_index
, a.name alias_name
, a.reference_index reference_index
, a.system_created
, a.alias_directory
, f.type
, f.space
, f.bytes
, f.file_number
, f.incarnation
FROM asm_diskgroup_stat dg
JOIN asm_alias a ON a.group_number = dg.group_number
/* Outer join because alias could be a directory */
LEFT OUTER JOIN asm_file f ON f.group_number = a.group_number
AND f.file_number = a.file_number
AND f.incarnation = a.file_incarnation
-- WHERE dg.name LIKE '&&DISKGROUP_NAME'
)
CONNECT BY NOCYCLE PRIOR reference_index = parent_index
START WITH mod(parent_index, power(2, 24)) = 0 /*Parent level database directory e.g. +DATA/MYDB etc */
AND alias_name LIKE '&&DBNAME'
/*
AND reference_index IN (SELECT a2.reference_index
FROM asm_alias a2
WHERE (mod(a2.parent_index, power(2, 24))) = 0
)
*/
)
SELECT UPPER(SUBSTR(NVL(f2.File_Path,f.file_path),1,instr(NVL(f2.File_Path,f.file_path),'/')-1)) dbname
, ROUND(SUM(f.bytes)/&&size_divider) DISKGROUP_MirroredSize
, ROUND(SUM(DECODE(f.type, 'DATAFILE',f.bytes,0))/&&size_divider) DATAFILE_MirroredSize
, ROUND(SUM(DECODE(f.type, 'TEMPFILE',f.bytes,0))/&&size_divider) TEMPFILE_MirroredSize
, ROUND(SUM(DECODE(f.type, 'ONLINELOG',f.bytes,0))/&&size_divider) ONLINELOG_MirroredSize
, ROUND(SUM(DECODE(f.type, 'ARCHIVELOG',f.bytes,0))/&&size_divider) ARCHIVELOG_MirroredSize
, ROUND(SUM(DECODE(f.type, 'BACKUPSET',f.bytes,0))/&&size_divider) BACKUPSET_MirroredSize
, ROUND(SUM(DECODE(f.type, 'FLASHBACK',f.bytes,0))/&&size_divider) FLASHBACK_MirroredSize
, ROUND(SUM(DECODE(f.type, 'OCRFILE',f.bytes,0))/&&size_divider) OCRFILE_MirroredSize
, ROUND(SUM(DECODE(f.type, 'AUTOBACKUP',f.bytes,0))/&&size_divider) AUTOBACKUP_MirroredSize
, ROUND(SUM(DECODE(f.type, 'CONTROLFILE',f.bytes,0))/&&size_divider) CONTROLFILE_MirroredSize
--, ROUND(SUM(DECODE(f.type, 'PARAMETERFILE',f.bytes,'ASMPARAMETERFILE',f.bytes,0))/&&size_divider) PARAMFILE_MirroredSize
/*
, ROUND(SUM(f.space)/&&size_divider) DISKGROUP_UnMirroredSize
, ROUND(SUM(DECODE(f.type, 'DATAFILE',f.space,0))/&&size_divider) DATAFILE_UnMirroredSize
, ROUND(SUM(DECODE(f.type, 'TEMPFILE',f.space,0))/&&size_divider) TEMPFILE_UnMirroredSize
, ROUND(SUM(DECODE(f.type, 'ONLINELOG',f.space,0))/&&size_divider) ONLINELOG_UnMirroredSize
, ROUND(SUM(DECODE(f.type, 'ARCHIVELOG',f.space,0))/&&size_divider) ARCHIVELOG_UnMirroredSize
, ROUND(SUM(DECODE(f.type, 'BACKUPSET',f.space,0))/&&size_divider) BACKUPSET_UnMirroredSize
, ROUND(SUM(DECODE(f.type, 'FLASHBACK',f.space,0))/&&size_divider) FLASHBACK_UnMirroredSize
, ROUND(SUM(DECODE(f.type, 'OCRFILE',f.space,0))/&&size_divider) OCRFILE_UnMirroredSize
, ROUND(SUM(DECODE(f.type, 'AUTOBACKUP',f.space,0))/&&size_divider) AUTOBACKUP_UnMirroredSize
--, ROUND(SUM(DECODE(f.type, 'CONTROLFILE',f.space,0))/&&size_divider) CONTROLFILE_UnMirroredSize
--, ROUND(SUM(DECODE(f.type, 'PARAMETERFILE',f.space,'ASMPARAMETERFILE',f.space,0))/&&size_divider) PARAMFILE_UnMirroredSize
*/
FROM files f /* System created files */
LEFT OUTER JOIN files f2 /* File alias */
ON f2.diskgroup_name = f.diskgroup_name
AND f2.file_number = f.file_number
AND f2.incarnation = f.incarnation
AND f2.system_created = 'N'
AND f2.alias_directory = 'N'
AND f.system_created = 'Y'
AND f.alias_directory = 'N'
WHERE 1=1
AND f.system_created = 'Y' /* Dont remove this condition */
AND f.alias_directory = 'N'
AND UPPER(SUBSTR(NVL(f2.File_Path,f.file_path),1,instr(NVL(f2.File_Path,f.file_path),'/')-1)) LIKE '&&DBNAME' ESCAPE '\'
GROUP BY UPPER(SUBSTR(NVL(f2.File_Path,f.file_path),1,INSTR(NVL(f2.File_Path,f.file_path),'/')-1)) /*dbname*/
ORDER BY dbname
;
@@footer

95
vg/asm_debug.sql Normal file
View File

@@ -0,0 +1,95 @@
set newpage none
spool /tmp/asmdebug.out
--
-- Get a timestamp
select rpad('>', 10, '>'), to_char(sysdate, 'MON DD HH24:MM:SS') from dual;
--
-- Diskgroup information
set head off
select 'Diskgroup Information' from dual;
set head on
column name format a15
column DG# format 99
select group_number DG#, name, state, type, total_mb, free_mb from
v$asm_diskgroup_stat;
--
-- Get the # of Allocation Units per DG
set head off
select 'Number of AUs per diskgroup' from dual;
set head on
select count(number_kfdat) AU_count, group_kfdat DG# from x$kfdat
group by group_kfdat;
--
-- Get the # of Allocation Units per DiskGroup and Disk
set head off
select 'Number of AUs per Diskgroup,Disk' from dual;
col "group#,disk#" for a30
set head on
select count(*)AU_count, GROUP_KFDAT||','||number_kfdat "group#,disk#" from x$kfdat group by GROUP_KFDAT,number_kfdat;
--
-- Get the # of allocated (V) and free (F) Allocation Units
set head off
select 'Number of allocated (V) and free (F) Allocation Units' from dual;
col "VF" for a2
set head on
select GROUP_KFDAT "group#", number_kfdat "disk#", v_kfdat "VF", count(*)
from x$kfdat
group by GROUP_KFDAT, number_kfdat, v_kfdat;
--
-- Get the # of Allocation Units per ASM file
set head off
select 'Number of AUs per ASM file ordered by AU count for metadata only'
from dual;
set head on
select count(XNUM_KFFXP) AU_count, NUMBER_KFFXP file#, GROUP_KFFXP DG# from x$kffxp where NUMBER_KFFXP < 256
group by NUMBER_KFFXP, GROUP_KFFXP
order by count(XNUM_KFFXP) ;
--
-- Get the # of Allocation Units per ASM file by file alias. Change the
-- system_created Y|N depending if you want the short or long ASM name
set head off
select 'Number of AUs per ASM file ordered by AU count. This is for non
metadata' from dual;
set head on
select GROUP_KFFXP, NUMBER_KFFXP, name, count(*)
from x$kffxp, v$asm_alias
where GROUP_KFFXP=GROUP_NUMBER and NUMBER_KFFXP=FILE_NUMBER and
system_created='Y'
group by GROUP_KFFXP, NUMBER_KFFXP, name
order by GROUP_KFFXP, NUMBER_KFFXP;
--
-- Get partner information. This is really only useful if redundancy is other than
-- external.
set head off
select 'The following shows the disk to partner relationship. This is really only
useful if using normal or high redundancy.' from dual;
set head on
select grp DG#, disk, NUMBER_KFDPARTNER partner, PARITY_KFDPARTNER parity, ACTIVE_KFDPARTNER active
from x$kfdpartner;
--
-- Another look at file utilization.
set head off
select 'bytes is the sum of AUs with data in them * 1024^2
space is the sum of all AUs allocated for this file * 1024^2'
from dual;
set head on
select f.group_number, f.file_number, bytes, space, space/(1024*1024) "InMB", a.name
from v$asm_file f, v$asm_alias a
where f.group_number=a.group_number and f.file_number=a.file_number
and system_created='Y'
order by f.group_number, f.file_number;
--
-- Get robust disk information
set linesize 1500
set head off
select 'Robust disk information' from dual;
set head on
select GROUP_NUMBER, DISK_NUMBER, INCARNATION, MOUNT_STATUS, HEADER_STATUS, MODE_STATUS, STATE, LIBRARY, TOTAL_MB, FREE_MB,
NAME, FAILGROUP, LABEL, PATH, CREATE_DATE, MOUNT_DATE, READS,
WRITES, READ_ERRS, WRITE_ERRS, READ_TIME, WRITE_TIME, BYTES_READ, BYTES_WRITTEN
from v$asm_disk_stat;
--
spool off

100
vg/asm_disk.sql Normal file
View File

@@ -0,0 +1,100 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display ASM Disks
* Parameter : 1 - DiskGroup Name (Default % , use / as escape character)
* 2 - FailGroup (Default % , use / as escape character)
* 3 - DiskName (Default % , use / as escape character)
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 21-Apr-13 Vishal Gupta Created
*
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE DISKGROUP_NAME
UNDEFINE FAILGROUP
UNDEFINE DISK_NAME
DEFINE DISKGROUP_NAME="&&1"
DEFINE FAILGROUP="&&2"
DEFINE DISK_NAME="&&3"
set term off
COLUMN _DISKGROUP_NAME NEW_VALUE DISKGROUP_NAME NOPRINT
COLUMN _FAILGROUP NEW_VALUE FAILGROUP NOPRINT
COLUMN _DISK_NAME NEW_VALUE DISK_NAME NOPRINT
SELECT UPPER(DECODE('&&DISKGROUP_NAME','','%','&&DISKGROUP_NAME')) "_DISKGROUP_NAME"
, UPPER(DECODE('&&FAILGROUP','','%','&&FAILGROUP')) "_FAILGROUP"
, UPPER(DECODE('&&DISK_NAME','','%','&&DISK_NAME')) "_DISK_NAME"
FROM DUAL;
set term on
PROMPT *******************************************
PROMPT A S M D I S K S
PROMPT *
PROMPT * Input Parameters
PROMPT * - DiskGroup Name = '&&DISKGROUP_NAME'
PROMPT * - FailGroup = '&&FAILGROUP'
PROMPT * - DiskName = '&&DISK_NAME'
PROMPT *******************************************
COLUMN DiskGroup HEAD "DiskGroup" FORMAT A15
COLUMN failgroup HEAD "FailGroup" FORMAT A10
COLUMN name HEAD "ASM Disk Name" FORMAT A30
COLUMN preferred_read HEAD "Pref|Read" FORMAT A4
COLUMN mount_status HEAD "Mount|Status" FORMAT A8
COLUMN header_status HEAD "Header|Status" FORMAT A8
COLUMN mode_status HEAD "Mode|Status" FORMAT A8
COLUMN repair_timer HEAD "Repair|Timer|(sec)" FORMAT 9,999
COLUMN library HEAD "Library" FORMAT A7
COLUMN label HEAD "Label" FORMAT A30
COLUMN path HEAD "Path" FORMAT A50
COLUMN total_gb HEAD "Total|(GB)" FORMAT 9,999
COLUMN free_gb HEAD "Free|(GB)" FORMAT 9,999
COLUMN free_gb HEAD "Free|(GB)" FORMAT 9,999
COLUMN hot_used_gb HEAD "Hot|Used|(GB)" FORMAT 9,999
COLUMN cold_used_gb HEAD "Cold|Used|(GB)" FORMAT 9,999
SELECT dg.NAME DiskGroup
, d.failgroup
, d.name
, d.preferred_read
, d.voting_file
, d.mount_status
, d.header_status
, d.mode_status
, d.state
, d.repair_timer
, d.library
--, d.label
, d.total_mb /1024 total_gb
, d.free_mb/1024 free_gb
, d.hot_used_mb/1024 hot_used_gb
, d.cold_used_mb/1024 cold_used_gb
--, d.path
-- V$ASM_DISK_STAT does not perform disk discovery like V$ASM_DISK view.
FROM v$asm_disk_stat d
, v$asm_diskgroup_stat dg
WHERE d.group_number = dg.group_number
AND dg.name LIKE '&&DISKGROUP_NAME'
AND NVL(d.failgroup,'%') LIKE '&&FAILGROUP'
AND NVL(d.name,'%') LIKE '&&DISK_NAME'
ORDER BY dg.NAME
, d.FAILGROUP
, d.name
;
@@footer

63
vg/asm_disk_count.sql Normal file
View File

@@ -0,0 +1,63 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : ASM Disk Count
* Parameter : NONE
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 12-Jul-11 Vishal Gupta Created
*
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE DISKGROUP_NAME
DEFINE DISKGROUP_NAME="&&1"
set term off
COLUMN _DISKGROUP_NAME NEW_VALUE DISKGROUP_NAME NOPRINT
SELECT UPPER(DECODE('&&DISKGROUP_NAME','','%','&&DISKGROUP_NAME')) "_DISKGROUP_NAME"
FROM DUAL;
set term on
PROMPT *******************************************
PROMPT A S M D I S K C O U N T
PROMPT *
PROMPT * Input Parameters
PROMPT * - DiskGroup Name = '&&DISKGROUP_NAME'
PROMPT *******************************************
COLUMN DiskGroup HEAD "DiskGroup" FORMAT A20
SELECT dg.NAME DiskGroup
, d.FAILGROUP
, d.MOUNT_STATUS
, d.HEADER_STATUS
, d.MODE_STATUS
, d.STATE
, COUNT(1) DiskCOunt
-- V$ASM_DISK_STAT does not perform disk discovery like V$ASM_DISK view.
FROM v$asm_disk_stat d
, v$asm_diskgroup_stat dg
WHERE d.group_number = dg.group_number
AND dg.name like '&&DISKGROUP_NAME'
GROUP BY dg.NAME
, d.FAILGROUP
, d.MOUNT_STATUS
, d.HEADER_STATUS
, d.MODE_STATUS
, d.STATE
ORDER BY dg.NAME
, d.FAILGROUP
;
@@footer

169
vg/asm_disk_iostats.sql Normal file
View File

@@ -0,0 +1,169 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display ASM Disk Statistics
* Parameter : 1 - DiskGroup Name (Default % , use / as escape character)
* 2 - FailGroup (Default % , use / as escape character)
* 3 - DiskName (Default % , use / as escape character)
* 4 - DBNAME (Default % , use / as escape character)
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 22-Jan-15 Vishal Gupta Created
*
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE DISKGROUP_NAME
UNDEFINE FAILGROUP
UNDEFINE DISK_NAME
UNDEFINE DB_NAME
DEFINE DISKGROUP_NAME="&&1"
DEFINE FAILGROUP="&&2"
DEFINE DISK_NAME="&&3"
DEFINE DB_NAME="&&4"
set term off
COLUMN _DISKGROUP_NAME NEW_VALUE DISKGROUP_NAME NOPRINT
COLUMN _FAILGROUP NEW_VALUE FAILGROUP NOPRINT
COLUMN _DISK_NAME NEW_VALUE DISK_NAME NOPRINT
COLUMN _DB_NAME NEW_VALUE DB_NAME NOPRINT
SELECT UPPER(DECODE('&&DISKGROUP_NAME','','%','&&DISKGROUP_NAME')) "_DISKGROUP_NAME"
, UPPER(DECODE('&&FAILGROUP','','%','&&FAILGROUP')) "_FAILGROUP"
, UPPER(DECODE('&&DISK_NAME','','%','&&DISK_NAME')) "_DISK_NAME"
, UPPER(DECODE('&&DB_NAME','','%','&&DB_NAME')) "_DB_NAME"
FROM DUAL;
set term on
/************************************
* CONFIGURATION PARAMETERS
************************************/
DEFINE COUNT_SMALL_FORMAT=999,999
DEFINE COUNT_SMALL_DIVIDER="1"
DEFINE COUNT_SMALL_HEADING="#"
--DEFINE COUNT_SMALL_DIVIDER="1000"
--DEFINE COUNT_SMALL_HEADING="#1000"
DEFINE COUNT_FORMAT=9,999,999
--DEFINE COUNT_DIVIDER="1"
--DEFINE COUNT_HEADING="#"
DEFINE COUNT_DIVIDER="1000"
DEFINE COUNT_HEADING="#1000"
DEFINE COUNT_LARGE_FORMAT=999,999
--DEFINE COUNT_LARGE_DIVIDER="1"
--DEFINE COUNT_LARGE_HEADING="#"
DEFINE COUNT_LARGE_DIVIDER="1000"
DEFINE COUNT_LARGE_HEADING="#1000"
--DEFINE COUNT_LARGE_DIVIDER="1000000"
--DEFINE COUNT_LARGE_HEADING="million"
--DEFINE COUNT_LARGE_DIVIDER="1000000000"
--DEFINE COUNT_LARGE_HEADING="billion"
--DEFINE COUNT_LARGE_DIVIDER="1000000000000"
--DEFINE COUNT_LARGE_HEADING="trillion"
DEFINE BYTES_FORMAT="999,999"
--DEFINE BYTES_DIVIDER="1024"
--DEFINE BYTES_HEADING="KB"
--DEFINE BYTES_DIVIDER="1024/1024"
--DEFINE BYTES_HEADING="MB"
DEFINE BYTES_DIVIDER="1024/1024/1024"
DEFINE BYTES_HEADING="GB"
DEFINE TIME_FORMAT=9,999
--DEFINE TIME_DIVIDER="1"
--DEFINE TIME_HEADING="sec"
--DEFINE TIME_DIVIDER="60"
--DEFINE TIME_HEADING="min"
DEFINE TIME_DIVIDER="3600"
DEFINE TIME_HEADING="hr"
/************************************/
PROMPT **************************************************
PROMPT * A S M D I S K I O S T A T I S T I C S
PROMPT *
PROMPT * Input Parameters
PROMPT * - DiskGroup Name = '&&DISKGROUP_NAME'
PROMPT * - FailGroup = '&&FAILGROUP'
PROMPT * - DiskName = '&&DISK_NAME'
PROMPT * - DB Name = '&&DB_NAME'
PROMPT **************************************************
COLUMN DiskGroup HEAD "DiskGroup" FORMAT A15
COLUMN failgroup HEAD "FailGroup" FORMAT A10
COLUMN name HEAD "ASM Disk Name" FORMAT A30
COLUMN dbname HEAD "DB Name" FORMAT A10
COLUMN repair_timer HEAD "Repair|Timer|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN read_time HEAD "Read|Time|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN reads HEAD "Total|Read|Requests|(&&COUNT_LARGE_HEADING)" FORMAT &&COUNT_LARGE_FORMAT
COLUMN hot_reads HEAD "Hot|Read|Requests|(&&COUNT_LARGE_HEADING)" FORMAT &&COUNT_LARGE_FORMAT
COLUMN cold_reads HEAD "Cold|Read|Requests|(&&COUNT_LARGE_HEADING)" FORMAT &&COUNT_LARGE_FORMAT
COLUMN read_errs HEAD "Read|Errors|(&&COUNT_SMALL_HEADING)" FORMAT &&COUNT_SMALL_FORMAT
COLUMN bytes_read HEAD "Reads|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN cold_bytes_read HEAD "Reads|Cold|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN hot_bytes_read HEAD "Reads|Hot|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN write_time HEAD "Write|Time|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN writes HEAD "Total|Write|Requests|(&&COUNT_LARGE_HEADING)" FORMAT &&COUNT_LARGE_FORMAT
COLUMN hot_writes HEAD "Hot|Write|Requests|(&&COUNT_LARGE_HEADING)" FORMAT &&COUNT_LARGE_FORMAT
COLUMN cold_writes HEAD "Cold|Write|Requests|(&&COUNT_LARGE_HEADING)" FORMAT &&COUNT_LARGE_FORMAT
COLUMN write_errs HEAD "Write|Errors|(&&COUNT_SMALL_HEADING)" FORMAT &&COUNT_SMALL_FORMAT
COLUMN bytes_written HEAD "Writes|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN hot_bytes_written HEAD "Writes|Cold|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN cold_bytes_written HEAD "Writes|Hot|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
SELECT dg.NAME DiskGroup
, i.failgroup
, d.name
, i.dbname
--, i.repair_timer
, i.read_time/&&TIME_DIVIDER read_time
, i.reads/&&COUNT_LARGE_DIVIDER reads
, i.hot_reads/&&COUNT_LARGE_DIVIDER hot_reads
, i.cold_reads/&&COUNT_LARGE_DIVIDER cold_reads
, i.read_errs/&&COUNT_SMALL_DIVIDER read_errs
, ROUND(i.bytes_read/ &&BYTES_DIVIDER,2) bytes_read
, ROUND(i.hot_bytes_read/ &&BYTES_DIVIDER ,2) hot_bytes_read
, ROUND(i.cold_bytes_read/ &&BYTES_DIVIDER ,2) cold_bytes_read
, i.writes/&&COUNT_LARGE_DIVIDER writes
, i.hot_writes/&&COUNT_LARGE_DIVIDER hot_writes
, i.cold_writes/&&COUNT_LARGE_DIVIDER cold_writes
, i.write_time/&&TIME_DIVIDER write_time
, i.write_errs/&&COUNT_SMALL_DIVIDER write_errs
, ROUND(i.bytes_written / &&BYTES_DIVIDER ,2) bytes_written
, ROUND(i.hot_bytes_written / &&BYTES_DIVIDER ,2) hot_bytes_written
, ROUND(i.cold_bytes_written / &&BYTES_DIVIDER ,2) cold_bytes_written
--, i.path
-- V$ASM_DISK_STAT does not perform disk discovery like V$ASM_DISK view.
FROM v$asm_disk_iostat i
JOIN v$asm_diskgroup_stat dg ON i.group_number = dg.group_number
JOIN v$asm_disk_stat d ON d.group_number = i.group_number AND d.disk_number = i.disk_number
WHERE 1=1
AND dg.name LIKE '&&DISKGROUP_NAME'
AND NVL(i.failgroup,'%') LIKE '&&FAILGROUP'
AND NVL(d.name,'%') LIKE '&&DISK_NAME'
AND NVL(i.dbname,'%') LIKE '&&DB_NAME'
ORDER BY dg.NAME
, i.FAILGROUP
, d.name
, i.dbname
;
@@footer

110
vg/asm_disk_stats.sql Normal file
View File

@@ -0,0 +1,110 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display ASM Disk Statistics
* Parameter : 1 - DiskGroup Name (Default % , use / as escape character)
* 2 - FailGroup (Default % , use / as escape character)
* 3 - DiskName (Default % , use / as escape character)
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 07-MAY-14 Vishal Gupta Commented repair_timer, as its not disk io-statistics
* 21-Apr-13 Vishal Gupta Created
*
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE DISKGROUP_NAME
UNDEFINE FAILGROUP
UNDEFINE DISK_NAME
DEFINE DISKGROUP_NAME="&&1"
DEFINE FAILGROUP="&&2"
DEFINE DISK_NAME="&&3"
set term off
COLUMN _DISKGROUP_NAME NEW_VALUE DISKGROUP_NAME NOPRINT
COLUMN _FAILGROUP NEW_VALUE FAILGROUP NOPRINT
COLUMN _DISK_NAME NEW_VALUE DISK_NAME NOPRINT
SELECT UPPER(DECODE('&&DISKGROUP_NAME','','%','&&DISKGROUP_NAME')) "_DISKGROUP_NAME"
, UPPER(DECODE('&&FAILGROUP','','%','&&FAILGROUP')) "_FAILGROUP"
, UPPER(DECODE('&&DISK_NAME','','%','&&DISK_NAME')) "_DISK_NAME"
FROM DUAL;
set term on
PROMPT *******************************************
PROMPT A S M D I S K S T A T I S T I C S
PROMPT *
PROMPT * Input Parameters
PROMPT * - DiskGroup Name = '&&DISKGROUP_NAME'
PROMPT * - FailGroup = '&&FAILGROUP'
PROMPT * - DiskName = '&&DISK_NAME'
PROMPT *******************************************
COLUMN DiskGroup HEAD "DiskGroup" FORMAT A15
COLUMN failgroup HEAD "FailGroup" FORMAT A10
COLUMN name HEAD "ASM Disk Name" FORMAT A30
COLUMN repair_timer HEAD "Repair|Timer|(sec)" FORMAT 9,999
COLUMN read_time HEAD "Read|Time|(sec)" FORMAT 9,999
COLUMN reads HEAD "Total|Read|Requests|(#)" FORMAT 9,999,999
COLUMN hot_reads HEAD "Hot|Read|Requests|(#)" FORMAT 99,999
COLUMN cold_reads HEAD "Cold|Read|Requests|(#)" FORMAT 9,999,999
COLUMN read_errs HEAD "Read|Errors|(#)" FORMAT 9,999
COLUMN bytes_read HEAD "Reads|(GB)" FORMAT 9,999.99
COLUMN cold_bytes_read HEAD "Reads|Cold|(GB)" FORMAT 9,999.99
COLUMN hot_bytes_read HEAD "Reads|Hot|(GB)" FORMAT 9,999.99
COLUMN write_time HEAD "Write|Time|(sec)" FORMAT 9,999
COLUMN writes HEAD "Total|Write|Requests|(#)" FORMAT 9,999,999
COLUMN hot_writes HEAD "Hot|Write|Requests|(#)" FORMAT 99,999
COLUMN cold_writes HEAD "Cold|Write|Requests|(#)" FORMAT 9,999,999
COLUMN write_errs HEAD "Write|Errors|(#)" FORMAT 9,999
COLUMN bytes_written HEAD "Writes|(GB)" FORMAT 9,999.99
COLUMN hot_bytes_written HEAD "Writes|Cold|(GB)" FORMAT 9,999.99
COLUMN cold_bytes_written HEAD "Writes|Hot|(GB)" FORMAT 9,999.99
SELECT dg.NAME DiskGroup
, d.failgroup
, d.name
--, d.repair_timer
, d.preferred_read
, d.read_time
, d.reads
, d.hot_reads
, d.cold_reads
, d.read_errs
, ROUND(d.bytes_read/ 1024/1024/1024,2) bytes_read
, ROUND(d.hot_bytes_read/ 1024/1024/1024 ,2) hot_bytes_read
, ROUND(d.cold_bytes_read/ 1024/1024/1024 ,2) cold_bytes_read
, d.writes
, d.hot_writes
, d.cold_writes
, d.write_time
, d.write_errs
, ROUND(d.bytes_written / 1024/1024/1024 ,2) bytes_written
, ROUND(d.hot_bytes_written / 1024/1024/1024 ,2) hot_bytes_written
, ROUND(d.cold_bytes_written / 1024/1024/1024 ,2) cold_bytes_written
--, d.path
-- V$ASM_DISK_STAT does not perform disk discovery like V$ASM_DISK view.
FROM v$asm_disk_stat d
, v$asm_diskgroup_stat dg
WHERE d.group_number = dg.group_number
AND dg.name LIKE '&&DISKGROUP_NAME'
AND NVL(d.failgroup,'%') LIKE '&&FAILGROUP'
AND NVL(d.name,'%') LIKE '&&DISK_NAME'
ORDER BY dg.NAME
, d.FAILGROUP
, d.name
;
@@footer

105
vg/asm_diskgroup.sql Normal file
View File

@@ -0,0 +1,105 @@
@@header
set term off
/*
*
* Author : Vishal Gupta
* Purpose : ASM DiskGroup Info
* Parameter : NONE
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ ------------------------------------------------
* 13-Feb-14 Vishal Gupta Added following additional fields in the output
* - sector_size,block_size,voting_files
* 13-Dec-12 Vishal Gupta Added additional query to display ASM attributes
* 27-Jan-10 Vishal Gupta Created
*
*/
set term on
SET numf 999,999
DEFINE size_label=GB
DEFINE size_divider="1024/1024/1024"
PROMPT
PROMPT ************************************************
PROMPT * A S M D I S K G R O U P D E T A I L S *
PROMPT ************************************************
COLUMN diskgroup_name HEAD "DiskGroup" FORMAT A16
COLUMN group_number HEAD "G#" FORMAT 99
COLUMN type HEAD "Redundancy|Type" FORMAT A6
COLUMN compatibility HEAD "ASM|Compat" FORMAT A10
COLUMN database_compatibility HEAD "RDBMS|Compat" FORMAT A10
COLUMN allocation_unit_size_MB HEAD "AU|Size|(MB)" FORMAT 999
COLUMN sector_size HEAD "Sector|Size" FORMAT 999999
COLUMN block_size HEAD "Block|Size" FORMAT 99,999
COLUMN offline_disks HEAD "Offline|Disks"
COLUMN voting_files HEAD "Voting|Files" FORMAT a6
COLUMN TOTAL_GB HEAD "(A)||Total|Avail|(&size_label)"
COLUMN used_GB HEAD "(B)||Total|Used|(&size_label)"
COLUMN hot_used_GB HEAD "Hot|Used|(&size_label)"
COLUMN cold_used_GB HEAD "Cold|Used|(&size_label)"
COLUMN FREE_GB HEAD "(C)||Total|Free|(&size_label)"
COLUMN REQUIRED_MIRROR_FREE_GB HEAD "(D)|Required|Free|ForMirror|(&size_label)" JUSTIFY RIGHT
COLUMN mirrored_total_GB HEAD "(E)||Mirrored|Avail|(&size_label)"
COLUMN mirrored_used_GB HEAD "(F)||Mirrored|Used|(&size_label)"
COLUMN mirrored_free_GB HEAD "Mirrored|Free|(&size_label)"
COLUMN USABLE_GB HEAD "(C-D)/REDUN||Usable|Free|(&size_label)"
BREAK ON REPORT
COMPUTE SUM LABEL 'Total' OF TOTAL_GB FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF USED_GB FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF HOT_USED_GB FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF COLD_USED_GB FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF FREE_GB FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF REQUIRED_MIRROR_FREE_GB FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF MIRRORED_TOTAL_GB FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF MIRRORED_USED_GB FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF MIRRORED_FREE_GB FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF USABLE_GB FORMAT 9,999,999 ON REPORT
SELECT d.NAME diskgroup_name
, d.group_number
, d.state
, d.type
, d.compatibility
, d.database_compatibility
, d.allocation_unit_size/1024/1024 allocation_unit_size_MB
, d.sector_size
, d.block_size
, d.offline_disks
, d.voting_files
FROM v$asm_diskgroup_stat d;
PROMPT
PROMPT ******************************************************
PROMPT * A S M D I S K G R O U P A T T R I B U T E S *
PROMPT ******************************************************
COLUMN attribute HEAD "Attribute" FORMAT A25
COLUMN system_created HEAD "System|Created" FORMAT A10
COLUMN read_only HEAD "Read|Only" FORMAT A5
COLUMN value HEAD "Value" FORMAT A15
SELECT d.name diskgroup_name
, a.name attribute
, DECODE(a.system_created,'N','No','Y','Yes',a.read_only) system_created
, DECODE(a.read_only,'N','No','Y','Yes',a.read_only) read_only
, a.value
FROM v$asm_diskgroup_stat d
, v$asm_attribute a
WHERE a.group_number = d.group_number
AND a.name not like 'template%'
ORDER BY attribute
, diskgroup_name
;
@@footer

139
vg/asm_diskgroup_size.sql Normal file
View File

@@ -0,0 +1,139 @@
@@header
set term off
/*
*
* Author : Vishal Gupta
* Purpose : ASM DiskGroup Sizes and Space Usage
* Parameter : NONE
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 17-JUN-13 Vishal Gupta Changed output layout, also switch from v$asm_diskgroup
* to v$asm_diskgroup_stat view to avoid diskgroup discovery
* 14-Dec-12 Vishal Gupta Added Usable %age
* 27-Jan-10 Vishal Gupta Created
*
*
*/
set term on
SET numf 999,999
DEFINE size_label=GB
DEFINE size_divider="1024/1024/1024"
PROMPT **********************************************************************
PROMPT * A S M D I S K G R O U P S P A C E U S A G E R E P O R T *
PROMPT **********************************************************************
COLUMN NAME HEAD "DiskGroup" FORMAT A16
COLUMN group_number HEAD "G#" FORMAT 99
COLUMN type HEAD "Redundancy|Type" FORMAT A6
COLUMN compatibility HEAD "ASM|Compat" FORMAT A10
COLUMN database_compatibility HEAD "RDBMS|Compat" FORMAT A10
COLUMN allocation_unit_size_MB HEAD "AU|Size|(MB)" FORMAT 999
COLUMN offline_disks HEAD "Offline|Disks"
COLUMN separator HEAD "!|!|!|!|!|!" FORMAT a1
COLUMN mirrored_total_GB HEAD "(E)||Mirrored|Total|(&size_label)"
COLUMN USABLE_TOTAL_GB HEAD "(A-D)|/REDUN||Safely|Usable|Total|(&size_label)"
COLUMN USABLE_USED_GB HEAD "(B-D)|/REDUN||Safely|Usable|Used|(&size_label)"
COLUMN USABLE_FREE_GB HEAD "(C-D)|/REDUN||Safely|Usable|Free|(&size_label)"
COLUMN USABLE_USED_PERCENT HEAD "Safely|Usable|Used|(%)" FORMAT 999.99
COLUMN USABLE_FREE_PERCENT HEAD "Safely|Usable|Free|(%)" FORMAT 999.99
COLUMN mirrored_free_GB HEAD "Mirrored|Free|(&size_label)"
COLUMN REQUIRED_MIRROR_FREE_GB HEAD "(D)|Required|Free|ForMirror|(&size_label)" JUSTIFY RIGHT
COLUMN TOTAL_GB HEAD "(A)||Total|Avail|(&size_label)"
COLUMN used_GB HEAD "(B)||Total|Used|(&size_label)"
COLUMN hot_used_GB HEAD "Hot|Used|(&size_label)"
COLUMN cold_used_GB HEAD "Cold|Used|(&size_label)"
COLUMN FREE_GB HEAD "(C)||Total|Free|(&size_label)"
BREAK ON REPORT
COMPUTE SUM LABEL 'Total' OF TOTAL_GB FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF USED_GB FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF HOT_USED_GB FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF COLD_USED_GB FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF FREE_GB FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF REQUIRED_MIRROR_FREE_GB FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF MIRRORED_TOTAL_GB FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF MIRRORED_USED_GB FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF MIRRORED_FREE_GB FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF USABLE_GB FORMAT 9,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF USABLE_TOTAL_GB FORMAT 9,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF USABLE_USED_GB FORMAT 9,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF USABLE_FREE_GB FORMAT 9,999,999 ON REPORT
/*
SAMPLE OUTPUT
**********************************************************************
* A S M D I S K G R O U P S P A C E U S A G E R E P O R T *
**********************************************************************
. <----------------------- With Mirroring ----------------------> <-------------------- Without Mirroring ---------------->
(A-D) (B-D) (C-D)
! /REDUN /REDUN /REDUN ! !
! (E) ! (D) (A) (B) (C) !
! Safely Safely Safely Safely Safely ! Required !
! Mirrored Usable Usable Usable Mirrored Usable Usable ! Free Total Total Hot Cold Total !
Redund ! Avail Total Used Free Free Used Free ! ForMirror Avail Used Used Used Free !
DiskGroup G# Type ! (GB) (GB) (GB) (GB) (GB) (%) (%) ! (GB) (GB) (GB) (GB) (GB) (GB) !
------------ --- ------ - -------- -------- -------- -------- -------- ------- ------- - --------- -------- -------- -------- -------- -------- -
DATA_DM01 1 NORMAL ! 92,736 86,112 44,488 41,624 48,248 51.66 48.34 ! 13,248 185,472 88,977 0 88,977 96,495 !
DATA 2 NORMAL ! 18,480 17,160 8,145 9,015 10,335 47.47 52.53 ! 2,640 36,960 16,291 0 16,291 20,669 !
DBFS_DG 3 NORMAL ! 2,366 2,197 2 2,195 2,364 .07 99.93 ! 338 4,732 3 0 3 4,728 !
FLASH_DM01 4 NORMAL ! 2,240 2,080 892 1,188 1,348 42.88 57.12 ! 320 4,480 1,784 0 1,784 2,696 !
RECO_DM01 5 NORMAL ! 139,113 129,177 38,516 90,660 100,597 29.82 70.18 ! 19,873 278,226 77,033 0 77,033 201,194 !
RECO 6 NORMAL ! 25,929 24,077 21,893 2,184 4,036 90.93 9.07 ! 3,704 51,857 43,786 0 43,786 8,071 !
SYSTEMDG 7 NORMAL ! 2,039 1,893 2 1,891 2,036 .11 99.89 ! 291 4,077 4 0 4 4,073 !
-------- -------- -------- -------- -------- --------- -------- -------- -------- -------- --------
Total 282,903 262,696 113,938 148,757 168,964 40,414 565,804 227,878 0 227,878 337,926
*/
PROMPT
PROMPT . <----------------------- With Mirroring ----------------------> <-------------------- Without Mirroring ---------------->
-- Note:
-- The GROUP_NUMBER, TOTAL_MB, and FREE_MB columns are only
-- meaningful if the disk group is mounted by the instance. Otherwise, their values will be 0.
SELECT NAME
, group_number
, type
, '!' separator
, ROUND(TOTAL_MB/DECODE(type,'EXTERN',1,'NORMAL',2,'HIGH',3)/1024) mirrored_TOTAL_GB
, ROUND((TOTAL_MB - REQUIRED_MIRROR_FREE_MB )/DECODE(type,'EXTERN',1,'NORMAL',2,'HIGH',3)/1024) USABLE_TOTAL_GB
, ROUND((hot_used_mb + cold_used_mb)/DECODE(type,'EXTERN',1,'NORMAL',2,'HIGH',3) /1024) USABLE_USED_GB
, ROUND(USABLE_FILE_MB /1024) USABLE_FREE_GB
, ROUND((USABLE_FILE_MB + ROUND(REQUIRED_MIRROR_FREE_MB/DECODE(type,'EXTERN',1,'NORMAL',2,'HIGH',3)) ) /1024) mirrored_free_GB
, ROUND( (hot_used_mb + cold_used_mb) / (TOTAL_MB - REQUIRED_MIRROR_FREE_MB ) * 100 , 2) USABLE_USED_PERCENT
, ROUND(USABLE_FILE_MB /((TOTAL_MB - REQUIRED_MIRROR_FREE_MB )/DECODE(type,'EXTERN',1,'NORMAL',2,'HIGH',3)) * 100 ,2) USABLE_FREE_PERCENT
, '!' separator
, ROUND(REQUIRED_MIRROR_FREE_MB/1024) REQUIRED_MIRROR_FREE_GB
, ROUND(TOTAL_MB/1024) TOTAL_GB
, ROUND((hot_used_mb + cold_used_mb) /1024) USED_GB
, ROUND(hot_used_mb/1024) HOT_USED_GB
, ROUND(cold_used_mb/1024) COLD_USED_GB
, ROUND(FREE_MB/1024) FREE_GB
, '!' separator
FROM v$asm_diskgroup_stat;
@@footer

View File

@@ -0,0 +1,226 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : ASM usage by file type for all mounted diskgroups (including other databases)
* Parameters : 1 - DBName (% - wildchar, \ - escape char, default is '%')
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ ------------------------------------------------------------------------------
* 15-Jul-15 Vishal Gupta Make alias filter case-insensitive
* 24-Dec-14 Vishal Gupta Enhanced script to display file only in alias directory if alias is present
* 21-Jan-14 Vishal Gupta Commented out unmirrored figures from output
* 18-Jul-13 Vishal Gupta Created
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE DISKGROUP_NAME
UNDEFINE DBNAME
DEFINE DISKGROUP_NAME="&&1"
DEFINE DBNAME="&&2"
set term off
COLUMN _DISKGROUP_NAME NEW_VALUE DISKGROUP_NAME NOPRINT
COLUMN _DBNAME NEW_VALUE DBNAME NOPRINT
SELECT UPPER(DECODE('&&DISKGROUP_NAME','','%',UPPER('&&DISKGROUP_NAME'))) "_DISKGROUP_NAME"
, UPPER(DECODE('&&DBNAME','','%',UPPER('&&DBNAME'))) "_DBNAME"
FROM DUAL;
set term on
PROMPT
PROMPT *******************************************************************
PROMPT * A S M S P A C E U S A G E B Y D A T A B A S E *
PROMPT * *
PROMPT * - For all diskgroups mounted in current instance *
PROMPT * - Including files for other databases *
PROMPT * *
PROMPT * Input Parameters *
PROMPT * - DiskGroup = '&&DISKGROUP_NAME'
PROMPT * - DB Name = '&&DBNAME'
PROMPT *******************************************************************
DEFINE size_label=GB
DEFINE size_divider="1024/1024/1024"
COLUMN diskgroup_name HEADING "DiskGroup" FORMAT A16
COLUMN DBNAME HEADING "DBName" FORMAT A15
COLUMN DISKGROUP_MirroredSize HEADING "Total|(&&size_label)" FORMAT 999,999
COLUMN DATAFILE_MirroredSize HEADING "Data|File|(&&size_label)" FORMAT 999,999
COLUMN TEMPFILE_MirroredSize HEADING "Temp|File|(&&size_label)" FORMAT 999,999
COLUMN ONLINELOG_MirroredSize HEADING "Redo|Log|(&&size_label)" FORMAT 99,999
COLUMN ARCHIVELOG_MirroredSize HEADING "Arch|Log|(&&size_label)" FORMAT 999,999
COLUMN BACKUPSET_MirroredSize HEADING "Backup|Set|(&&size_label)" FORMAT 999,999
COLUMN FLASHBACK_MirroredSize HEADING "Flash|Back|(&&size_label)" FORMAT 999,999
COLUMN OCRFILE_MirroredSize HEADING "OCR|(&&size_label)" FORMAT 999
COLUMN AUTOBACKUP_MirroredSize HEADING "Auto|Backup|(&&size_label)" FORMAT 999,999
COLUMN CONTROLFILE_MirroredSize HEADING "Ctrl|File|(&&size_label)" FORMAT 999
COLUMN PARAMFILE_MirroredSize HEADING "Param|File|(&&size_label)" FORMAT 999
COLUMN DISKGROUP_UnMirroredSize HEADING "Total|(&&size_label)" FORMAT 999,999
COLUMN DATAFILE_UnMirroredSize HEADING "Data|File|(&&size_label)" FORMAT 999,999
COLUMN TEMPFILE_UnMirroredSize HEADING "Temp|File|(&&size_label)" FORMAT 999,999
COLUMN ONLINELOG_UnMirroredSize HEADING "Redo|Log|(&&size_label)" FORMAT 9,999
COLUMN ARCHIVELOG_UnMirroredSize HEADING "Arch|Log|(&&size_label)" FORMAT 999,999
COLUMN BACKUPSET_UnMirroredSize HEADING "Backup|Set|(&&size_label)" FORMAT 999,999
COLUMN FLASHBACK_UnMirroredSize HEADING "Flash|Back|(&&size_label)" FORMAT 999,999
COLUMN OCRFILE_UnMirroredSize HEADING "OCR|(&&size_label)" FORMAT 999
COLUMN AUTOBACKUP_UnMirroredSize HEADING "Auto|Backup|(&&size_label)" FORMAT 999,999
COLUMN CONTROLFILE_UnMirroredSize HEADING "Ctrl|File|(&&size_label)" FORMAT 999
COLUMN PARAMFILE_UnMirroredSize HEADING "Param|File|(&&size_label)" FORMAT 999
BREAK ON REPORT
/*
BREAK ON diskgroup_name SKIP 1 DUPLICATES ON REPORT
COMPUTE SUM LABEL 'Total' OF DISKGROUP_MirroredSize FORMAT 99,999,999 ON diskgroup_name
COMPUTE SUM LABEL 'Total' OF DATAFILE_MirroredSize FORMAT 99,999,999 ON diskgroup_name
COMPUTE SUM LABEL 'Total' OF TEMPFILE_MirroredSize FORMAT 99,999,999 ON diskgroup_name
COMPUTE SUM LABEL 'Total' OF ONLINELOG_MirroredSize FORMAT 99,999,999 ON diskgroup_name
COMPUTE SUM LABEL 'Total' OF ARCHIVELOG_MirroredSize FORMAT 99,999,999 ON diskgroup_name
COMPUTE SUM LABEL 'Total' OF BACKUPSET_MirroredSize FORMAT 99,999,999 ON diskgroup_name
COMPUTE SUM LABEL 'Total' OF FLASHBACK_MirroredSize FORMAT 99,999,999 ON diskgroup_name
COMPUTE SUM LABEL 'Total' OF OCRFILE_MirroredSize FORMAT 99,999,999 ON diskgroup_name
COMPUTE SUM LABEL 'Total' OF AUTOBACKUP_MirroredSize FORMAT 99,999,999 ON diskgroup_name
COMPUTE SUM LABEL 'Total' OF CONTROLFILE_MirroredSize FORMAT 99,999,999 ON diskgroup_name
COMPUTE SUM LABEL 'Total' OF PARAMFILE_MirroredSize FORMAT 99,999,999 ON diskgroup_name
*/
COMPUTE SUM LABEL 'Total' OF DISKGROUP_MirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF DATAFILE_MirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF TEMPFILE_MirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF ONLINELOG_MirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF ARCHIVELOG_MirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF BACKUPSET_MirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF FLASHBACK_MirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF OCRFILE_MirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF AUTOBACKUP_MirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF CONTROLFILE_MirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF PARAMFILE_MirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF DISKGROUP_UnMirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF DATAFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF TEMPFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF ONLINELOG_UnMirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF ARCHIVELOG_UnMirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF BACKUPSET_UnMirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF FLASHBACK_UnMirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF OCRFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF AUTOBACKUP_UnMirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF CONTROLFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF PARAMFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT
/*
PROMPT
PROMPT
PROMPT - <------------------------ Mirrored (GB) --------------------------------> <------------------------- UnMirrored (GB) ----------------------------->
*/
WITH asm_alias AS (SELECT /*+ NO_MERGE MATERIALIZE */ * FROM v$asm_alias )
, asm_diskgroup_stat AS (SELECT /*+ NO_MERGE */ * FROM v$asm_diskgroup WHERE name LIKE '&&DISKGROUP_NAME' )
, asm_file AS (SELECT /*+ NO_MERGE MATERIALIZE */ * FROM v$asm_file )
, files AS (SELECT /*+ NO_MERGE MATERIALIZE */
diskgroup_name
, SUBSTR(SYS_CONNECT_BY_PATH(alias_name, '/'),2) File_Path
, alias_name
, type
, alias_directory
, space
, bytes
, system_created
, file_number
, incarnation
FROM (SELECT dg.name diskgroup_name
, a.parent_index parent_index
, a.name alias_name
, a.reference_index reference_index
, a.system_created
, a.alias_directory
, f.type
, f.space
, f.bytes
, f.file_number
, f.incarnation
FROM asm_diskgroup_stat dg
JOIN asm_alias a ON a.group_number = dg.group_number
/* Outer join because alias could be a directory */
LEFT OUTER JOIN asm_file f ON f.group_number = a.group_number
AND f.file_number = a.file_number
AND f.incarnation = a.file_incarnation
-- WHERE dg.name LIKE '&&DISKGROUP_NAME'
)
CONNECT BY NOCYCLE PRIOR reference_index = parent_index
START WITH mod(parent_index, power(2, 24)) = 0 /*Parent level database directory e.g. +DATA/MYDB etc */
AND UPPER(alias_name) LIKE '&&DBNAME'
/*
AND reference_index IN (SELECT a2.reference_index
FROM asm_alias a2
WHERE (mod(a2.parent_index, power(2, 24))) = 0
)
*/
)
SELECT f.diskgroup_name
, SUBSTR(NVL(f2.File_Path,f.file_path),1,instr(NVL(f2.File_Path,f.file_path),'/')-1) dbname
, ROUND(SUM(f.bytes)/&&size_divider) DISKGROUP_MirroredSize
, ROUND(SUM(DECODE(f.type, 'DATAFILE',f.bytes,0))/&&size_divider) DATAFILE_MirroredSize
, ROUND(SUM(DECODE(f.type, 'TEMPFILE',f.bytes,0))/&&size_divider) TEMPFILE_MirroredSize
, ROUND(SUM(DECODE(f.type, 'ONLINELOG',f.bytes,0))/&&size_divider) ONLINELOG_MirroredSize
, ROUND(SUM(DECODE(f.type, 'ARCHIVELOG',f.bytes,0))/&&size_divider) ARCHIVELOG_MirroredSize
, ROUND(SUM(DECODE(f.type, 'BACKUPSET',f.bytes,0))/&&size_divider) BACKUPSET_MirroredSize
, ROUND(SUM(DECODE(f.type, 'FLASHBACK',f.bytes,0))/&&size_divider) FLASHBACK_MirroredSize
, ROUND(SUM(DECODE(f.type, 'OCRFILE',f.bytes,0))/&&size_divider) OCRFILE_MirroredSize
, ROUND(SUM(DECODE(f.type, 'AUTOBACKUP',f.bytes,0))/&&size_divider) AUTOBACKUP_MirroredSize
, ROUND(SUM(DECODE(f.type, 'CONTROLFILE',f.bytes,0))/&&size_divider) CONTROLFILE_MirroredSize
--, ROUND(SUM(DECODE(f.type, 'PARAMETERFILE',f.bytes,'ASMPARAMETERFILE',f.bytes,0))/&&size_divider) PARAMFILE_MirroredSize
/*
, ROUND(SUM(f.space)/&&size_divider) DISKGROUP_UnMirroredSize
, ROUND(SUM(DECODE(f.type, 'DATAFILE',f.space,0))/&&size_divider) DATAFILE_UnMirroredSize
, ROUND(SUM(DECODE(f.type, 'TEMPFILE',f.space,0))/&&size_divider) TEMPFILE_UnMirroredSize
, ROUND(SUM(DECODE(f.type, 'ONLINELOG',f.space,0))/&&size_divider) ONLINELOG_UnMirroredSize
, ROUND(SUM(DECODE(f.type, 'ARCHIVELOG',f.space,0))/&&size_divider) ARCHIVELOG_UnMirroredSize
, ROUND(SUM(DECODE(f.type, 'BACKUPSET',f.space,0))/&&size_divider) BACKUPSET_UnMirroredSize
, ROUND(SUM(DECODE(f.type, 'FLASHBACK',f.space,0))/&&size_divider) FLASHBACK_UnMirroredSize
, ROUND(SUM(DECODE(f.type, 'OCRFILE',f.space,0))/&&size_divider) OCRFILE_UnMirroredSize
, ROUND(SUM(DECODE(f.type, 'AUTOBACKUP',f.space,0))/&&size_divider) AUTOBACKUP_UnMirroredSize
--, ROUND(SUM(DECODE(f.type, 'CONTROLFILE',f.space,0))/&&size_divider) CONTROLFILE_UnMirroredSize
--, ROUND(SUM(DECODE(f.type, 'PARAMETERFILE',f.space,'ASMPARAMETERFILE',f.space,0))/&&size_divider) PARAMFILE_UnMirroredSize
*/
FROM files f /* System created files */
LEFT OUTER JOIN files f2 /* File alias */
ON f2.diskgroup_name = f.diskgroup_name
AND f2.file_number = f.file_number
AND f2.incarnation = f.incarnation
AND f2.system_created = 'N'
AND f2.alias_directory = 'N'
AND f.system_created = 'Y'
AND f.alias_directory = 'N'
WHERE 1=1
AND f.system_created = 'Y' /* Dont remove this condition */
AND f.alias_directory = 'N'
AND UPPER(SUBSTR(NVL(f2.File_Path,f.file_path),1,instr(NVL(f2.File_Path,f.file_path),'/')-1)) LIKE '&&DBNAME' ESCAPE '\'
GROUP BY f.diskgroup_name
, SUBSTR(NVL(f2.File_Path,f.file_path),1,INSTR(NVL(f2.File_Path,f.file_path),'/')-1) /*dbname*/
ORDER BY f.diskgroup_name
, UPPER(dbname)
;
@@footer

View File

@@ -0,0 +1,112 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display ASM diskgroup usage by directory
* Parameters : 1 - DiskGroup (% - wildchar, \ - escape char, default is '%')
* 2 - Directory (% - wildchar, \ - escape char, default is '%')
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 17-Apr-12 Vishal Gupta First Draft
*
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE DISKGROUP_NAME
UNDEFINE DISK_NAME
DEFINE DISKGROUP_NAME="&&1"
DEFINE DIRECTORY="&&2"
set term off
COLUMN _DISKGROUP_NAME NEW_VALUE DISKGROUP_NAME NOPRINT
COLUMN _DIRECTORY NEW_VALUE DIRECTORY NOPRINT
SELECT UPPER(DECODE('&&DISKGROUP_NAME','','%','&&DISKGROUP_NAME')) "_DISKGROUP_NAME"
, UPPER(DECODE('&&DIRECTORY','','%','&&DIRECTORY')) "_DIRECTORY"
FROM DUAL;
set term on
PROMPT
PROMPT **********************************************************************
PROMPT * A S M D I S K G R O U P S P A C E U S A G E *
PROMPT * (By FileType and Directory) *
PROMPT *
PROMPT * Input Parameters
PROMPT * - DiskGroup Name = '&&DISKGROUP_NAME'
PROMPT * - Directory = '&&DIRECTORY'
PROMPT **********************************************************************
COLUMN DiskGroup HEADING "DiskGroup" FORMAT a20
COLUMN file_type HEADING "FileType" FORMAT a20
COLUMN Mirrored_UsedSize HEADING "Mirrored|UsedSize|(GB)" FORMAT 999,999,999
COLUMN UnMirrored_UsedSize HEADING "UnMirrored|UsedSize|(GB)" FORMAT 999,999,999
COLUMN parent_directory HEADING "Directory" FORMAT a60
WITH asm_alias AS (SELECT /*+ NO_MERGE MATERIALIZE */ * FROM v$asm_alias )
, asm_diskgroup_stat AS (SELECT /*+ NO_MERGE MATERIALIZE */ * FROM v$asm_diskgroup_stat )
, asm_file AS (SELECT /*+ NO_MERGE MATERIALIZE */ * FROM v$asm_file )
, aliases as (SELECT /*+ no_merge materialize */
SYS_CONNECT_BY_PATH(a.name, '/') File_Path
, level hierarchy_level
, CONNECT_BY_ISLEAF
, a.*
FROM asm_alias a
CONNECT BY NOCYCLE
PRIOR a.group_number = a.group_number
AND PRIOR a.reference_index = a.parent_index
START WITH mod(parent_index, power(2, 24)) = 0
AND reference_index IN (SELECT a2.reference_index
FROM asm_alias a2
WHERE (mod(a2.parent_index, power(2, 24))) = 0
/*Parent level database directory e.g. +DATA/MYDB etc */
)
)
, files as
(
SELECT SUBSTR('+' || g.name || a.file_path,1, INSTR('+' || g.name || a.file_path,'/',-1) ) as parent_directory
, '+' || g.name || a.file_path as file_path
, g.name DiskGroup
, f.type
, f.block_size
, f.space
, f.redundancy
, f.redundancy_lowered
, f.striped
, f.bytes
, f.creation_date
, f.modification_date
FROM asm_diskgroup_stat g
JOIN aliases a ON a.group_number = g.group_number
LEFT OUTER JOIN asm_file f ON f.group_number = a.group_number
AND f.file_number = a.file_number
AND f.incarnation = a.file_incarnation
)
SELECT af.DiskGroup
, af.type file_type
, ROUND(sum(af.bytes)/1024/1024/1024) Mirrored_UsedSize
, ROUND(sum(af.space)/1024/1024/1024) UnMirrored_UsedSize
, af.parent_directory
FROM files af
WHERE af.diskgroup like '&&DISKGROUP_NAME' ESCAPE '\'
AND af.file_path LIKE '&&DIRECTORY' ESCAPE '\'
GROUP BY af.DiskGroup
, af.type
, af.parent_directory
ORDER BY af.DiskGroup
, af.type
, af.parent_directory
;
@@footer

View File

@@ -0,0 +1,148 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : ASM usage by file type for all mounted diskgroups (including other databases)
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 27-Jan-10 Vishal Gupta First Draft
*
*
*/
DEFINE size_label=GB
DEFINE size_divider="1024/1024/1024"
PROMPT
PROMPT *******************************************************************
PROMPT * A S M S P A C E U S A G E B Y F I L E T Y P E *
PROMPT * *
PROMPT * - For all diskgroups mounted in current instance *
PROMPT * - Including files for other databases *
PROMPT *******************************************************************
COLUMN NAME HEADING "DiskGroup" FORMAT A15
COLUMN DISKGROUP_UnMirroredSize HEADING "Total|(&&size_label)" FORMAT 999,999
COLUMN DATAFILE_UnMirroredSize HEADING "Data|File|(&&size_label)" FORMAT 999,999
COLUMN TEMPFILE_UnMirroredSize HEADING "Temp|File|(&&size_label)" FORMAT 999,999
COLUMN ONLINELOG_UnMirroredSize HEADING "Redo|Log|(&&size_label)" FORMAT 9,999
COLUMN ARCHIVELOG_UnMirroredSize HEADING "Arch|Log|(&&size_label)" FORMAT 999,999
COLUMN BACKUPSET_UnMirroredSize HEADING "Backup|Set|(&&size_label)" FORMAT 999,999
COLUMN FLASHBACK_UnMirroredSize HEADING "Flash|Back|(&&size_label)" FORMAT 999,999
COLUMN OCRFILE_UnMirroredSize HEADING "OCR|(&&size_label)" FORMAT 999
COLUMN AUTOBACKUP_UnMirroredSize HEADING "Auto|Backup|(&&size_label)" FORMAT 999,999
COLUMN CONTROLFILE_UnMirroredSize HEADING "Ctrl|File|(&&size_label)" FORMAT 999
COLUMN PARAMFILE_UnMirroredSize HEADING "Param|File|(&&size_label)" FORMAT 999
COLUMN DISKGROUP_MirroredSize HEADING "Total|(&&size_label)" FORMAT 999,999
COLUMN DATAFILE_MirroredSize HEADING "Data|File|(&&size_label)" FORMAT 999,999
COLUMN TEMPFILE_MirroredSize HEADING "Temp|File|(&&size_label)" FORMAT 999,999
COLUMN ONLINELOG_MirroredSize HEADING "Redo|Log|(&&size_label)" FORMAT 9,999
COLUMN ARCHIVELOG_MirroredSize HEADING "Arch|Log|(&&size_label)" FORMAT 999,999
COLUMN BACKUPSET_MirroredSize HEADING "Backup|Set|(&&size_label)" FORMAT 999,999
COLUMN FLASHBACK_MirroredSize HEADING "Flash|Back|(&&size_label)" FORMAT 999,999
COLUMN OCRFILE_MirroredSize HEADING "OCR|(&&size_label)" FORMAT 999
COLUMN AUTOBACKUP_MirroredSize HEADING "Auto|Backup|(&&size_label)" FORMAT 999,999
COLUMN CONTROLFILE_MirroredSize HEADING "Ctrl|File|(&&size_label)" FORMAT 999
COLUMN PARAMFILE_MirroredSize HEADING "Param|File|(&&size_label)" FORMAT 999
BREAK ON REPORT
COMPUTE SUM LABEL 'Total' OF DISKGROUP_MirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF DATAFILE_MirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF TEMPFILE_MirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF ONLINELOG_MirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF ARCHIVELOG_MirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF BACKUPSET_MirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF FLASHBACK_MirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF OCRFILE_MirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF AUTOBACKUP_MirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF CONTROLFILE_MirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF PARAMFILE_MirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF DISKGROUP_UnMirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF DATAFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF TEMPFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF ONLINELOG_UnMirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF ARCHIVELOG_UnMirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF BACKUPSET_UnMirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF FLASHBACK_UnMirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF OCRFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF AUTOBACKUP_UnMirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF CONTROLFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF PARAMFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT
/*
Sample Output
*******************************************************************
* A S M S P A C E U S A G E B Y F I L E T Y P E *
* *
* - For all diskgroups mounted in current instance *
* - Including files for other databases *
*******************************************************************
- <----------------------- Mirrored (GB) ---------------------------------------> <----------------------- UnMirrored (GB) ------------------------------------->
Redo Arch Backup Auto Control Param Redo Arch Auto Control Param
Total DataFile TempFile Log Log Set OCR Backup File File Total DataFile TempFile Log Log BackupSet OCR Backup File File
DiskGroup (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB)
--------------- -------- -------- -------- ------ -------- -------- ---- -------- ------- ----- -------- -------- -------- ------ -------- --------- ---- -------- ------- -----
DATA 8,129 5,698 0 94 2,328 0 0 8 0 0 16,273 11,397 0 189 4,667 0 0 17 1 0
DATA_DM01 44,472 43,727 0 745 0 0 0 0 0 0 88,973 87,480 0 1,492 0 0 0 0 1 0
FLASH_DM01 881 0 881 0 0 0 0 0 0 0 1,764 0 1,764 0 0 0 0 0 0 0
RECO 21,883 21,629 164 88 0 0 0 0 1 0 43,782 43,273 329 176 0 0 0 0 4 0
RECO_DM01 38,510 4,442 23 121 33,923 0 0 1 0 0 77,186 8,885 46 243 68,011 0 0 2 1 0
SYSTEMDG 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0
-------- -------- -------- ------ -------- -------- ---- -------- ------- ----- -------- -------- -------- ------ -------- --------- ---- -------- ------- -----
Total 113,875 75,496 1,068 1,048 36,251 0 0 9 1 0 227,979 151,035 2,139 2,100 72,678 0 1 19 7 0
*/
PROMPT
PROMPT
PROMPT - <----------------------- Mirrored (GB) ----------------------------------> <----------------------- UnMirrored (GB) ------------------------------------>
select dg.name
, ROUND(SUM(f.bytes)/&&size_divider) DISKGROUP_MirroredSize
, ROUND(SUM(DECODE(f.type, 'DATAFILE',f.bytes,0))/&&size_divider) DATAFILE_MirroredSize
, ROUND(SUM(DECODE(f.type, 'TEMPFILE',f.bytes,0))/&&size_divider) TEMPFILE_MirroredSize
, ROUND(SUM(DECODE(f.type, 'ONLINELOG',f.bytes,0))/&&size_divider) ONLINELOG_MirroredSize
, ROUND(SUM(DECODE(f.type, 'ARCHIVELOG',f.bytes,0))/&&size_divider) ARCHIVELOG_MirroredSize
, ROUND(SUM(DECODE(f.type, 'BACKUPSET',f.bytes,0))/&&size_divider) BACKUPSET_MirroredSize
, ROUND(SUM(DECODE(f.type, 'FLASHBACK',f.bytes,0))/&&size_divider) FLASHBACK_MirroredSize
, ROUND(SUM(DECODE(f.type, 'OCRFILE',f.bytes,0))/&&size_divider) OCRFILE_MirroredSize
, ROUND(SUM(DECODE(f.type, 'AUTOBACKUP',f.bytes,0))/&&size_divider) AUTOBACKUP_MirroredSize
--, ROUND(SUM(DECODE(f.type, 'CONTROLFILE',f.bytes,0))/&&size_divider) CONTROLFILE_MirroredSize
--, ROUND(SUM(DECODE(f.type, 'PARAMETERFILE',f.bytes,'ASMPARAMETERFILE',f.bytes,0))/&&size_divider) PARAMFILE_MirroredSize
, ROUND(SUM(f.space)/&&size_divider) DISKGROUP_UnMirroredSize
, ROUND(SUM(DECODE(f.type, 'DATAFILE',f.space,0))/&&size_divider) DATAFILE_UnMirroredSize
, ROUND(SUM(DECODE(f.type, 'TEMPFILE',f.space,0))/&&size_divider) TEMPFILE_UnMirroredSize
, ROUND(SUM(DECODE(f.type, 'ONLINELOG',f.space,0))/&&size_divider) ONLINELOG_UnMirroredSize
, ROUND(SUM(DECODE(f.type, 'ARCHIVELOG',f.space,0))/&&size_divider) ARCHIVELOG_UnMirroredSize
, ROUND(SUM(DECODE(f.type, 'BACKUPSET',f.space,0))/&&size_divider) BACKUPSET_UnMirroredSize
, ROUND(SUM(DECODE(f.type, 'FLASHBACK',f.space,0))/&&size_divider) FLASHBACK_UnMirroredSize
, ROUND(SUM(DECODE(f.type, 'OCRFILE',f.space,0))/&&size_divider) OCRFILE_UnMirroredSize
, ROUND(SUM(DECODE(f.type, 'AUTOBACKUP',f.space,0))/&&size_divider) AUTOBACKUP_UnMirroredSize
--, ROUND(SUM(DECODE(f.type, 'CONTROLFILE',f.space,0))/&&size_divider) CONTROLFILE_UnMirroredSize
--, ROUND(SUM(DECODE(f.type, 'PARAMETERFILE',f.space,'ASMPARAMETERFILE',f.space,0))/&&size_divider) PARAMFILE_UnMirroredSize
from v$asm_file f
, v$asm_diskgroup_stat dg
where dg.group_number = f.group_number
group by dg.name
ORDER BY dg.name
;
@@footer

View File

@@ -0,0 +1,59 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display ASM diskgroup usage by Filetype for current database.
* Parameters : NONE
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 15-Mar-12 Vishal Gupta First Draft
*/
set lines 200
COLUMN FileType FORMAT a20
COLUMN DiskGroup FORMAT a20
COLUMN SizeGB FORMAT 999,999,999.99
BREAK ON REPORT
COMPUTE SUM LABEL "Total" OF SizeGB FORMAT 99,999,999,999.99 ON REPORT
SelECt Diskgroup, FileType , SizeGB
FROM
(
select 'DATAFILE' FileType, SUBSTR(name,1, instr(name,'/') -1) DISKGROUP, ROUND(sum(bytes)/1024/1024/1024,2) SizeGB
from v$datafile
group by SUBSTR(name,1, instr(name,'/') -1)
UNION ALL
select 'TEMPFILE' FileType, SUBSTR(name,1, instr(name,'/') -1) DISKGROUP, ROUND(sum(bytes)/1024/1024/1024,2)
from v$tempfile
group by SUBSTR(name,1, instr(name,'/') -1)
UNION ALL
select 'ONLINE REDO' FileType, SUBSTR(member,1, instr(member,'/') -1) DISKGROUP, ROUND(sum(bytes)/1024/1024/1024,2)
from v$log l , v$logfile lf
where l.group# = lf.group#
group by SUBSTR(member,1, instr(member,'/') -1)
UNION ALL
select 'ARCHIVE LOG' FileType, SUBSTR(name,1, instr(name,'/') -1) DISKGROUP, ROUND(sum(blocks* block_size)/1024/1024/1024,2)
from v$archived_log
where dest_id = 1 and DELETED = 'NO' and status = 'A'
group by SUBSTR(name,1, instr(name,'/') -1)
UNION ALL
SELECT 'CONTROLFILE' FileType, SUBSTR(name,1, instr(name,'/') -1) DISKGROUP, ROUND(sum(file_size_blks* block_size)/1024/1024/1024,2)
from v$controlfile
group by SUBSTR(name,1, instr(name,'/') -1)
UNION ALL
select 'BCT_FILE' FileType, SUBSTR(filename,1, instr(filename,'/') -1) DISKGROUP, ROUND(sum(bytes)/1024/1024/1024,2)
from v$block_change_tracking where status = 'ENABLED'
group by SUBSTR(filename,1, instr(filename,'/') -1)
ORDER BY FileType, DISKGROUP
)
ORDER BY DiskGroup,FileType
;
@@footer

47
vg/asm_failgroup.sql Normal file
View File

@@ -0,0 +1,47 @@
set term off
/*
*
* Author : Vishal Gupta
* Purpose : Display ASM Disk Failgroups
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 27-Apr-11 Vishal Gupta First cut
*/
set term on
set lines 250
set pages 50
COLUMN DiskGroup FORMAT A10
COLUMN Disk FORMAT A30
COLUMN Partner_Disk FORMAT A30
COLUMN DiskGroup FORMAT A0
COLUMN FAILGROUP FORMAT A20
COLUMN PARTNER_FAILGROUP FORMAT A20
COLUMN path FORMAT A30
COLUMN PARTNER_PATH FORMAT A30
SELECT dg1.name DiskGroup
, d1.NAME Disk
-- , d1.path
, d1.FAILGROUP
, d2.name Partner_Disk
, d2.FAILGROUP PARTNER_FAILGROUP
-- , d2.path PARTNER_PATH
FROM x$kfdpartner p
, v$asm_disk_stat d1
, v$asm_diskgroup_stat dg1
, v$asm_disk_stat d2
WHERE dg1.group_number = d1.group_number
AND p.GRP = dg1.group_number
AND p.disk = d1.DISK_NUMBER
AND p.GRP = d2.group_number (+)
AND p.NUMBER_KFDPARTNER = d2.DISK_NUMBER (+)
AND dg1.name like '%%' --DiskGroup Name
AND d1.name like '%%' --Disk Name
ORDER BY dg1.name
, d1.NAME;

30
vg/asm_imbalance.sql Normal file
View File

@@ -0,0 +1,30 @@
@@header
COLUMN diskgroup_name HEADING "DiskGroup Name" FORMAT a20
COLUMN Imbalance_percent HEADING "Imbalance|(%)" FORMAT 99999999.99
COLUMN Variance HEADING "Variance" FORMAT 999.99999
COLUMN MinFree HEADING "MinFree|(%)" FORMAT 999.99
COLUMN DiskCnt HEADING "Disk Count" FORMAT 99999
COLUMN Type HEADING "Redundancy|Typet" FORMAT a10
select g.name diskgroup_name
, 100*(max((d.total_mb-d.free_mb + (128*g.allocation_unit_size/1048576))/(d.total_mb + (128*g.allocation_unit_size/1048576)))
-min((d.total_mb-d.free_mb + (128*g.allocation_unit_size/1048576))/(d.total_mb + (128*g.allocation_unit_size/1048576)))
) /max((d.total_mb-d.free_mb + (128*g.allocation_unit_size/1048576))/(d.total_mb + (128*g.allocation_unit_size/1048576)))
Imbalance_percent
, 100*(max(d.total_mb)-min(d.total_mb))/max(d.total_mb) Variance /* Percent difference between largest and smallest disk */
, 100*(min(d.free_mb/d.total_mb)) MinFree /* The disk with the least free space as a percent of total space */
, count(*) DiskCnt /* Number of disks in the diskgroup */
, g.type Type /* Diskgroup redundancy */
FROM v$asm_disk_stat d
, v$asm_diskgroup_stat g
WHERE d.group_number = g.group_number
AND d.group_number <> 0
AND d.state = 'NORMAL'
AND d.mount_status = 'CACHED'
GROUP BY g.name
, g.type
ORDER BY g.name
;
@@footer

51
vg/asm_imbalance2.sql Normal file
View File

@@ -0,0 +1,51 @@
/*
**********************************************************
********* Needs to be run on ASM instance ****************
**********************************************************
Max and min columns should be close to each other for balanced files.
file# max min
=== === ===
3013 57 941
3018 58 942
3021 59 942
3043 940 942
3053 938 941
** All the disks in this example are having the same total capacity.
From the output above, files with imbalanced extents are file# 3013, 3018 and 3021. For example, for file# 3013 there are 59 extents in one disk and 942 extents in another disk.
File# 3043 and 3053 have extents almost equally balanced. Small imbalances are expected.
*/
DEFINE diskgroup_number="&&1"
set pagesize 55
set linesize 90
SELECT group_kffxp Group#
, number_kffxp file#
, MAX(count1) MAX
, MIN(count1) MIN
FROM
(SELECT group_kffxp
, number_kffxp
, disk_kffxp
, COUNT(XNUM_KFFXP) count1
FROM sys.x$kffxp
WHERE group_kffxp = &diskgroup_number
ANd disk_kffxp != 65534
GROUP BY group_kffxp, number_kffxp, disk_kffxp
)
GROUP BY group_kffxp, number_kffxp;
ORDER BY group_kffxp
, number_kffxp
UNDEFINE diskgroup_number

45
vg/asm_operation.sql Normal file
View File

@@ -0,0 +1,45 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display ASM Operations
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 16-APR-13 Vishal Gupta Created
*
*/
PROMPT ************************************
PROMPT *** A S M O P E R A T I O N S ***
PROMPT ************************************
COLUMN name HEADING "DiskGroup" FORMAT a20
COLUMN inst_id HEADING "I#" FORMAT 99
COLUMN group_number HEADING "G#" FORMAT 99
COLUMN operation HEADING "Operation" FORMAT a10
COLUMN state HEADING "State" FORMAT a8
COLUMN power HEADING "Power" FORMAT 99999
COLUMN actual HEADING "Actual" FORMAT 999999
COLUMN sofar HEADING "SoFar" FORMAT 9,999,999,999
COLUMN est_work HEADING "Estimated|Work" FORMAT 9,999,999,999
COLUMN est_rate HEADING "Estimated|Rate" FORMAT 999,999
COLUMN est_minutes HEADING "Estimated|Minutes" FORMAT 999,999
COLUMN error_code HEADING "Error Code" FORMAT a20
SELECT g.name
, o.*
FROM gv$asm_operation o
, v$asm_diskgroup_stat g
WHERE g.group_number = o.group_number
AND o.state = 'RUN'
ORDER BY o.inst_id
, g.name
;
@@footer

150
vg/asmm_info.sql Normal file
View File

@@ -0,0 +1,150 @@
@@header
set term off
/*
*
* Author : Vishal Gupta
* Purpose : Display Tablespace usage
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 26-Jan-15 Vishal Gupta Renamed oper_count heading to "Resize Oper Count"
* 28-MAY-12 Vishal Gupta Fixed to differentiate between instance specific
* and generic (*.param) parameter values in spfile
* 14-MAR-12 Vishal Gupta Modified to make it RAC friendly
* 15-SEP-08 Vishal Gupta First Draft
*
*/
set term on
COLUMN inst_id HEADING "Inst#" FORMAT 99999
COLUMN name HEADING "Name" FORMAT a21
COLUMN current_value1 HEADING "Current" FORMAT a10
COLUMN spfile_value1 HEADING "SPFile" FORMAT a10
COLUMN current_value2 HEADING "Current" FORMAT a10
COLUMN spfile_value2 HEADING "SPFile" FORMAT a10
COLUMN current_value3 HEADING "Current" FORMAT a10
COLUMN spfile_value3 HEADING "SPFile" FORMAT a10
COLUMN current_value4 HEADING "Current" FORMAT a10
COLUMN spfile_value4 HEADING "SPFile" FORMAT a10
COLUMN current_value5 HEADING "Current" FORMAT a10
COLUMN spfile_value5 HEADING "SPFile" FORMAT a10
COLUMN current_value6 HEADING "Current" FORMAT a10
COLUMN spfile_value6 HEADING "SPFile" FORMAT a10
COLUMN current_value7 HEADING "Current" FORMAT a10
COLUMN spfile_value7 HEADING "SPFile" FORMAT a10
COLUMN current_value8 HEADING "Current" FORMAT a10
COLUMN spfile_value8 HEADING "SPFile" FORMAT a10
COLUMN component HEADING "Component" FORMAT a24
COLUMN user_specified_size HEADING "User|Specified|(MB)" FORMAT 99,999,999
COLUMN current_size HEADING "Current|(MB)" FORMAT 99,999,999
COLUMN free_size HEADING "Free|(MB)" FORMAT 99,999,999
COLUMN min_size HEADING "Min|(MB)" FORMAT 99,999,999
COLUMN max_size HEADING "Max|(MB)" FORMAT 99,999,999
COLUMN GRANULE_SIZE HEADING "Granule|(MB)" FORMAT 9,999
COLUMN last_oper_type HEADING "Last|Operation|Type" FORMAT a12
COLUMN oper_count HEADING "Resize|Oper|Count" FORMAT 99,999,999
COLUMN last_oper_time HEADING "Last|Operation|Time" FORMAT a18
BREAK ON REPORT
COMPUTE SUM LABEL 'Total' OF current_size FORMAT 99,999,999 ON REPORT
COMPUTE SUM LABEL 'Total' OF free_size FORMAT 99,999,999 ON REPORT
PROMPT
PROMPT ####################################################################
PROMPT ####### #######
PROMPT ####### Automatic Shared Memory Management Settings #######
PROMPT ####### #######
PROMPT ####################################################################
PROMPT
PROMPT - <---- Instance 1 ---> <---- Instance 2 ---> <---- Instance 3 ---> <---- Instance 4 ---> <---- Instance 5 ---> <---- Instance 6 ---> <---- Instance 7 ---> <---- Instance 8 --->
select RPAD(pp.name,20) || '|' name
, MAX(DECODE(pp.inst_id, 1, pp.display_value,NULL)) current_value1
, MAX(DECODE(pp.inst_id, 1, RPAD(NVL(NVL(sp.display_value,sp_generic.display_value),' '),9) || '|' ,NULL)) spfile_value1
, MAX(DECODE(pp.inst_id, 2, pp.display_value,NULL)) current_value2
, MAX(DECODE(pp.inst_id, 2, RPAD(NVL(NVL(sp.display_value,sp_generic.display_value),' '),9) || '|' ,NULL)) spfile_value2
, MAX(DECODE(pp.inst_id, 3, pp.display_value,NULL)) current_value3
, MAX(DECODE(pp.inst_id, 3, RPAD(NVL(NVL(sp.display_value,sp_generic.display_value),' '),9) || '|' ,NULL)) spfile_value3
, MAX(DECODE(pp.inst_id, 4, pp.display_value,NULL)) current_value4
, MAX(DECODE(pp.inst_id, 4, RPAD(NVL(NVL(sp.display_value,sp_generic.display_value),' '),9) || '|' ,NULL)) spfile_value4
, MAX(DECODE(pp.inst_id, 5, pp.display_value,NULL)) current_value5
, MAX(DECODE(pp.inst_id, 5, RPAD(NVL(NVL(sp.display_value,sp_generic.display_value),' '),9) || '|' ,NULL)) spfile_value5
, MAX(DECODE(pp.inst_id, 6, pp.display_value,NULL)) current_value6
, MAX(DECODE(pp.inst_id, 6, RPAD(NVL(NVL(sp.display_value,sp_generic.display_value),' '),9) || '|' ,NULL)) spfile_value6
, MAX(DECODE(pp.inst_id, 7, pp.display_value,NULL)) current_value7
, MAX(DECODE(pp.inst_id, 7, RPAD(NVL(NVL(sp.display_value,sp_generic.display_value),' '),9) || '|' ,NULL)) spfile_value7
, MAX(DECODE(pp.inst_id, 8, pp.display_value,NULL)) current_value8
, MAX(DECODE(pp.inst_id, 8, RPAD(NVL(NVL(sp.display_value,sp_generic.display_value),' '),9) || '|' ,NULL)) spfile_value8
from gv$system_parameter pp
JOIN gv$instance i ON pp.inst_id = i.inst_id
LEFT OUTER JOIN gv$spparameter sp ON pp.inst_id = sp.inst_id AND sp.sid = i.instance_name and pp.name = sp.name
LEFT OUTER JOIN gv$spparameter sp_generic ON sp_generic.inst_id = pp.inst_id AND sp_generic.sid = '*' and sp_generic.name = pp.name
WHERE ( pp.name in ('memory_target'
,'memory_max_target'
,'sga_target'
,'sga_max_size'
,'lock_sga'
,'pre_page_sga'
,'pga_aggregate_target'
,'large_pool_size'
,'use_large_pages'
)
)
GROUP BY pp.name
UNION ALL
-- Get Host physical memory
select RPAD(os.stat_name,20) || '|' name
, MAX(DECODE(os.inst_id, 1, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value1
, MAX(DECODE(os.inst_id, 1, RPAD(NVL(ROUND(os.value/1024/1024/1024) || 'G',' '),9) || '|' ,NULL)) spfile_value1
, MAX(DECODE(os.inst_id, 2, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value2
, MAX(DECODE(os.inst_id, 2, RPAD(NVL(ROUND(os.value/1024/1024/1024) || 'G',' '),9) || '|' ,NULL)) spfile_value2
, MAX(DECODE(os.inst_id, 3, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value3
, MAX(DECODE(os.inst_id, 3, RPAD(NVL(ROUND(os.value/1024/1024/1024) || 'G',' '),9) || '|' ,NULL)) spfile_value3
, MAX(DECODE(os.inst_id, 4, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value4
, MAX(DECODE(os.inst_id, 4, RPAD(NVL(ROUND(os.value/1024/1024/1024) || 'G',' '),9) || '|' ,NULL)) spfile_value4
, MAX(DECODE(os.inst_id, 5, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value5
, MAX(DECODE(os.inst_id, 5, RPAD(NVL(ROUND(os.value/1024/1024/1024) || 'G',' '),9) || '|' ,NULL)) spfile_value5
, MAX(DECODE(os.inst_id, 6, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value6
, MAX(DECODE(os.inst_id, 6, RPAD(NVL(ROUND(os.value/1024/1024/1024) || 'G',' '),9) || '|' ,NULL)) spfile_value6
, MAX(DECODE(os.inst_id, 7, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value7
, MAX(DECODE(os.inst_id, 7, RPAD(NVL(ROUND(os.value/1024/1024/1024) || 'G',' '),9) || '|' ,NULL)) spfile_value7
, MAX(DECODE(os.inst_id, 8, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value8
, MAX(DECODE(os.inst_id, 8, RPAD(NVL(ROUND(os.value/1024/1024/1024) || 'G',' '),9) || '|' ,NULL)) spfile_value8
from gv$osstat os
where os.stat_name = 'PHYSICAL_MEMORY_BYTES'
GROUP BY os.stat_name
ORDER BY 1
/
BREAK ON inst_id SKIP 1
SELECT c.inst_id
, c.component
, ROUND(c.user_specified_size / 1024 / 1024) user_specified_size
, ROUND(c.current_size / 1024 / 1024) current_size
, ROUND(NVL(s.bytes,0) / 1024 / 1024) free_size
, ROUND(c.min_size / 1024 / 1024) min_size
, ROUND(c.max_size / 1024 / 1024) max_size
, ROUND(c.GRANULE_SIZE / 1024 / 1024) GRANULE_SIZE
, c.oper_count
, c.last_oper_type
, to_char(c.last_oper_time,'DD-MON-YY hh24:mi:Ss') last_oper_time
FROM gv$sga_dynamic_components c
, GV$SGASTAT s
WHERE c.inst_id = s.inst_id (+)
AND c.component = s.pool (+)
AND s.name (+) = 'free memory'
AND c.current_size <> 0
ORDER BY c.inst_id , c.component
/
@@footer

38
vg/assyst.sql Normal file
View File

@@ -0,0 +1,38 @@
SELECT DISTINCT(assyst_usr_b.assyst_usr_n) AS "DBA Name",
COUNT(*) "Total Closed Calls"
FROM incident ,
product ,
item item_a ,
serv_dept serv_dept_b ,
assyst_usr assyst_usr_b,
usr usr_b ,
bldng_room ,
inc_cat inc_cat_a ,
inc_serious ,
supplier ,
hplan_head hplan_head_a,
inc_data
WHERE incident.item_id = item_a.item_id
AND item_a.product_id = product.product_id
AND incident.ass_usr_id = assyst_usr_b.assyst_usr_id
AND incident.ass_svd_id = serv_dept_b.serv_dept_id
AND incident.aff_usr_id = usr_b.usr_id
AND incident.inc_cat_id = inc_cat_a.inc_cat_id
AND incident.inc_serious_id = inc_serious.inc_serious_id
AND incident.ass_supp_id = supplier.supplier_id
AND incident.bldng_room_id = bldng_room.bldng_room_id
AND incident.hplan_head_id = hplan_head_a.hplan_head_id
AND incident.incident_id = inc_data.incident_id
AND (incident.incident_id >9999999
AND inc_data.u_num2 =0
OR incident.incident_id >0
AND incident.incident_id <5000000
OR incident.incident_id >4999999
AND incident.incident_id <10000000
OR (incident.incident_id >9999999
AND inc_data.u_num2 >0))
AND (incident.inc_status ='c' )
AND incident.ass_svd_id IN(16)
AND incident.inc_close_date > GETDATE()-29
GROUP BY (assyst_usr_b.assyst_usr_n)
ORDER BY "Total Closed Calls" DESC

45
vg/autotask_windows.sql Normal file
View File

@@ -0,0 +1,45 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display Auto Task Windows
* Compatibility :
* Parameters : NONE
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 14-Dec-16 Vishal Gupta Created
*
*/
PROMPT **************************************************
PROMPT * DB Auto Task Windows
PROMPT **************************************************
COLUMN window_name HEADING "Window Name" FORMAT a35
COLUMN autotask_status HEADING "Status" FORMAT a8
COLUMN window_active HEADING "Window|Active" FORMAT a6
COLUMN optimizer_stats HEADING "Optimizer|Stats" FORMAT a8
COLUMN segment_advisor HEADING "Segment|Advisor" FORMAT a8
COLUMN sql_tune_advisor HEADING "SQL|Tune" FORMAT a8
COLUMN health_monitor HEADING "Health|Monitor" FORMAT a8
COLUMN window_next_time HEADING "Window|Next Time" FORMAT a40 TRUNC
SELECT a.window_name
, a.autotask_status
, a.window_active
, a.optimizer_stats
, a.segment_advisor
, a.sql_tune_advisor
, a.health_monitor
, a.window_next_time
FROM dba_autotask_window_clients a
order by a.window_next_time
;
@@footer

43
vg/autotasks.sql Normal file
View File

@@ -0,0 +1,43 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display Auto Tasks
* Compatibility :
* Parameters : NONE
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 28-Jun-16 Vishal Gupta Created
*
*/
PROMPT **************************************************
PROMPT * Database Auto Tasks
PROMPT **************************************************
COLUMN client_name HEADING "Client Name" FORMAT a35
COLUMN client_tag HEADING "Client|Tag" FORMAT a6
COLUMN window_group HEADING "Scheduler|Window|Group" FORMAT a15
COLUMN resource_percentage HEADING "Res(%)" FORMAT 99999
SELECT a.client_name
, a.status
, a.consumer_group
, a.client_tag
, a.priority_override
, a.window_group
, a.resource_percentage
, a.service_name
, a.
FROM dba_autotask_client a
;
@@footer

71
vg/aw_sessions.sql Normal file
View File

@@ -0,0 +1,71 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display OLAP Sessions
* Parameters : NONE
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 30-Jul-12 Vishal Gupta Created
*
*/
PROMPT **********************************
PROMPT * Analytic Workspace Sessions
PROMPT **********************************
COLUMN owner HEADING "" FORMAT a20
COLUMN aw_name HEADING "AW Name" FORMAT a27
COLUMN aw_version HEADING "AW|Ver" FORMAT a5
COLUMN attach_mode HEADING "Attach|Mode" FORMAT a6
COLUMN session_id HEADING "SID" FORMAT 99999
COLUMN inst_id HEADING "I#" FORMAT 99
COLUMN session_handle HEADING "Session|Handle" FORMAT 99999999
COLUMN session_state HEADING "Session|State" FORMAT a10
COLUMN userid HEADING "User" FORMAT a10
COLUMN total_transaction HEADING "Total|Tran" FORMAT 99999
COLUMN total_transaction_cpu_time HEADING "Total|Tran|CPUTime" FORMAT 999999999
COLUMN total_transaction_time HEADING "Total|Tran|Time" FORMAT 999999999
COLUMN logon_time HEADING "Logon Time" FORMAT a18
COLUMN username HEADING "UserName" FORMAT a20
COLUMN osuser HEADING "OS User" FORMAT a15 TRUNCATED
COLUMN MACHINE HEADING "Machine" FORMAT a20 TRUNCATED
COLUMN process HEADING "Process" FORMAT a11
COLUMN program HEADING "Program" FORMAT a18 TRUNCATED
COLUMN event HEADING "Event" FORMAT a30 TRUNCATED
COLUMN last_call_et HEADING "LastCall|(sec)" FORMAT 999,999
--COLUMN last_call_et HEADING "LastCall" FORMAT a12
COLUMN sql_child_number HEADING "SQL|Child|No" FORMAT 99
select a.owner || '.' || a.aw_name aw_name
, a.aw_version
, DECODE(o.attach_mode,'READ WRITE','RW','MULTIWRITE','MW','READ ONLY','RO',o.attach_mode) attach_mode
, o.session_id
, o.inst_id
, s.status
, s.last_call_et
, s.username
, s.osuser
, s.program
, s.machine
, s.sql_id
, s.sql_child_number
from gv$aw_olap o
, dba_aws a
, gv$aw_session_info aws
, gv$session s
WHERE a.aw_number = o.aw_number
AND o.inst_id = aws.inst_id
AND o.session_id = aws.session_id
AND aws.inst_id = s.inst_id
AND aws.session_id = s.sid
ORDER BY aw_name, o.session_id
;
@@footer

60
vg/aw_size.sql Normal file
View File

@@ -0,0 +1,60 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display Analytic Workspace (AW) Size
* Parameters : NONE
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 30-Jul-12 Vishal Gupta Created
*
*/
PROMPT **********************************
PROMPT * Analytic Workspace Size
PROMPT **********************************
COLUMN owner HEADING "" FORMAT a20
COLUMN aw_name HEADING "AW Name" FORMAT a25
COLUMN aw_version HEADING "AW|Ver" FORMAT a5
COLUMN attach_mode HEADING "Attach|Mode" FORMAT a5
COLUMN session_id HEADING "SID" FORMAT 99999
COLUMN inst_id HEADING "I#" FORMAT 99
COLUMN session_handle HEADING "Session|Handle" FORMAT 99999999
COLUMN session_state HEADING "Session|State" FORMAT a10
COLUMN userid HEADING "User" FORMAT a10
COLUMN total_transaction HEADING "Total|Tran" FORMAT 99999
COLUMN total_transaction_cpu_time HEADING "Total|Tran|CPUTime" FORMAT 999999999
COLUMN total_transaction_time HEADING "Total|Tran|Time" FORMAT 999999999
COLUMN logon_time HEADING "Logon Time" FORMAT a18
COLUMN username HEADING "UserName" FORMAT a20
COLUMN osuser HEADING "OS User" FORMAT a15 TRUNCATED
COLUMN MACHINE HEADING "Machine" FORMAT a20 TRUNCATED
COLUMN process HEADING "Process" FORMAT a11
COLUMN program HEADING "Program" FORMAT a18 TRUNCATED
COLUMN event HEADING "Event" FORMAT a30 TRUNCATED
COLUMN last_call_et HEADING "LastCall|(sec)" FORMAT 999,999
--COLUMN last_call_et HEADING "LastCall" FORMAT a12
COLUMN sql_child_number HEADING "SQL|Child|No" FORMAT 99
SELECT l.owner || '.' || substr(l.table_name,4) aw_name
, s.tablespace_name
, sum(s.bytes)/1024/1024 as mb
FROM dba_lobs l
, dba_segments s
WHERE l.column_name = 'AWLOB'
AND l.segment_name = s.segment_name
GROUP BY l.owner
, l.table_name
, s.tablespace_name
ORDER BY l.owner
, l.table_name
;
@@footer

View File

@@ -0,0 +1,42 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display Buffer Hit Ratio from AWR data
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 05-Aug-06 Vishal Gupta First Draft
* 15-May-07 Vishal Gupta Formatted the output
*/
set pages 10000
COLUMN mydate HEADING 'YYYY-MM-DD HH24'
COLUMN bhr HEADING 'Buffer Hit|Ratio (%)' FORMAT 999
select
to_char(sn.END_INTERVAL_TIME,'yyyy-mm-dd HH24') mydate,
new.name buffer_pool_name,
(((new.consistent_gets-old.consistent_gets)+(new.db_block_gets-old.db_block_gets))-(new.physical_reads-old.physical_reads))
/((new.consistent_gets-old.consistent_gets)+(new.db_block_gets-old.db_block_gets))*100 bhr
from DBA_HIST_buffer_pool_stat old,
DBA_HIST_buffer_pool_stat new,
DBA_HIST_snapshot sn
where sn.dbid = (select dbid from v$database)
AND sn.dbid = new.dbid
AND sn.instance_number = new.instance_number
AND new.dbid = old.dbid
AND new.instance_number = old.instance_number
and new.name = old.name
and new.snap_id = sn.snap_id
AND old.snap_id = sn.snap_id-1
and sn.END_INTERVAL_TIME > sysdate - &&1
order by 1 asc
/
@@footer

361
vg/awr_commands.sql Normal file
View File

@@ -0,0 +1,361 @@
----------------------------------------------------------------
-- Take Snapshot
----------------------------------------------------------------
exec dbms_workload_repository.create_snapshot('TYPICAL');
exec dbms_workload_repository.create_snapshot('ALL');
----------------------------------------------------------------
-- Modify AWR Configuration
----------------------------------------------------------------
BEGIN
DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(retention => 60*24*95 -- In Minutes (1 year = 525600)
, interval => 15 -- In Minutes
--, topnsql => NULL
--, dbid => NULL
);
END;
/
----------------------------------------------------------------
-- AWR - Gather Stats
----------------------------------------------------------------
BEGIN
-- AWR Table partitions with STALE/MISSING stats
FOR i in (
select STALE_STATS, last_analyzed,
'BEGIN dbms_stats.gather_table_stats(''' || owner || ''',''' || table_name || ''',partname=>''' || partition_name|| ''',GRANULARITY=>''PARTITION'',DEGREE=>16,CASCADE =>TRUE); END;' sqltext
from DBA_TAB_STATISTICS
where owner = 'SYS'
and table_name like 'WRH$%'
and (STALE_STATS = 'YES' OR last_analyzed is null)
and partition_name is not null
ORDER BY owner, table_name, partition_name
)
LOOP
execute immediate i.sqltext ;
END LOOP;
-- AWR Table with STALE/MISSING stats
FOR i in (
select STALE_STATS, last_analyzed,
'exec dbms_stats.gather_table_stats(''' || owner || ''',''' || table_name || ''',DEGREE=>16,CASCADE =>TRUE);'
from DBA_TAB_STATISTICS
where owner = 'SYS'
and table_name like 'WRH$%'
and (STALE_STATS = 'YES' OR last_analyzed is null)
and partition_name is null
order by num_rows asc
)
LOOP
execute immediate i.sqltext ;
END LOOP;
END;
/
----------------------------------------------------------------
-- Split AWR table partitions
----------------------------------------------------------------
alter session set "_swrf_test_action" = 72;
----------------------------------------------------------------
-- Purge AWR Repository
----------------------------------------------------------------
Doc ID 1478615.1: How to Purge WRH$_SQL_PLAN Table in AWR Repository, Occupying Large Space in SYSAUX Tablespace.
----------------------------------------------------------------
-- Purge AWR Snapshots ( 1 day at time)
----------------------------------------------------------------
SELECT 'exec dbms_workload_repository.drop_snapshot_range(low_snap_id=>' || min(snap_id)
||' , high_snap_id=>'
|| max(snap_id)
|| ' , dbid=>' || min(dbid)
||');'
from dba_hist_snapshot s
WHERE 1=1
AND TO_CHAR(s.begin_interval_time,'HH24:MI') NOT LIKE '00:0%' -- Exclude midnight snapshots
and s.begin_interval_time < sysdate - 45
group by trunc(begin_interval_time)
order by trunc(begin_interval_time) asc
;
----------------------------------------------------------------
-- Purge AWR Snapshots ( 1 snap at a time)
----------------------------------------------------------------
SELECT begin_interval_time
, 'exec dbms_workload_repository.drop_snapshot_range(low_snap_id=>' || snap_id
||' , high_snap_id=>'
|| snap_id
|| ' , dbid=>' || dbid
||');'
from dba_hist_snapshot s
WHERE 1=1
AND TO_CHAR(s.begin_interval_time,'HH24:MI') NOT LIKE '00:0%' -- Exclude midnight snapshots
order by begin_interval_time asc
;
----------------------------------------------------------------
-- Purge AWR Snapshots ( 1 snap at a time)
----------------------------------------------------------------
DECLARE
lv_days_to_keep NUMBER := 90;
lv_sqltext VARCHAR2(4000);
BEGIN
execute immediate 'alter session enable parallel DDL';
execute immediate 'alter session enable parallel DML';
FOR snap in ( SELECT distinct s.snap_id
, s.dbid
, TRUNC(s.begin_interval_time,'MI') begin_interval_time
from dba_hist_snapshot s
WHERE 1=1
-- Exclude midnight snapshots
AND TO_CHAR(s.begin_interval_time,'HH24:MI') NOT LIKE '00:0%'
-- Exclude Baseline snaphosts
AND NOT EXISTS (select 1 from sys.WRM$_BASELINE b where s.dbid = b.dbid and s.snap_id BETWEEN b.start_snap_id AND b.end_snap_id )
and s.begin_interval_time <= systimestamp - lv_days_to_keep
order by TRUNC(s.begin_interval_time,'MI') asc
)
LOOP
FOR t IN ( select t.owner, t.table_name
from dba_tables t
where 1=1
and t.owner = 'SYS'
and t.table_name like 'WRH%'
and exists (select 1 from dba_tab_columns c where c.owner = t.owner and c.table_name = t.table_name and c.column_name = 'SNAP_ID')
order by t.owner, t.table_name
)
LOOP
lv_sqltext := 'delete /*+ parallel(8) */ from ' || t.owner || '.' || t.table_name || ' a where a.dbid = :DBID and a.snap_id = :SNAP_ID ';
IF t.table_name = 'WRH$_SQLTEXT' THEN
lv_sqltext := lv_sqltext || ' and not exists (select 1 from sys.wri$_sqltext_refcount r where r.dbid = a.dbid and r.sql_id = a.sql_id and r.ref_count > 0 ) ';
END IF;
execute immediate lv_sqltext USING snap.dbid , snap.snap_id;
--commit;
END LOOP;
--execute immediate 'delete /*+ parallel(8) */ from SYS.WRM$_DATABASE_INSTANCE a where a.dbid = :DBID and a.snap_id = :SNAP_ID ' USING snap.dbid , snap.snap_id;
execute immediate 'delete /*+ parallel(8) */ from SYS.WRM$_SNAP_ERROR a where a.dbid = :DBID and a.snap_id = :SNAP_ID ' USING snap.dbid , snap.snap_id;
execute immediate 'delete /*+ parallel(8) */ from SYS.WRM$_SNAPSHOT_DETAILS a where a.dbid = :DBID and a.snap_id = :SNAP_ID ' USING snap.dbid , snap.snap_id;
execute immediate 'delete /*+ parallel(8) */ from SYS.WRM$_SNAPSHOT a where a.dbid = :DBID and a.snap_id = :SNAP_ID ' USING snap.dbid , snap.snap_id;
commit;
END LOOP;
END;
/
----------------------------------------------------------------
-- AWR - Purge Orphaned ASH rows
--
-- Doc ID 1478615.1: How to Purge WRH$_SQL_PLAN Table in AWR Repository, Occupying Large Space in SYSAUX Tablespace.
----------------------------------------------------------------
SELECT COUNT(1) Orphaned_ASH_Rows
FROM sys.wrh$_active_session_history a
WHERE NOT EXISTS
(SELECT 1
FROM sys.wrm$_snapshot
WHERE snap_id = a.snap_id
AND dbid = a.dbid
AND instance_number = a.instance_number
)
;
DECLARE
lv_batch_count NUMBER := 10000;
BEGIN
LOOP
delete
FROM sys.wrh$_active_session_history a
WHERE NOT EXISTS
(SELECT 1
FROM sys.wrm$_snapshot
WHERE snap_id = a.snap_id
AND dbid = a.dbid
AND instance_number = a.instance_number
)
AND ROWNUM <= lv_batch_count;
EXIT WHEN SQL%ROWCOUNT = 0 ;
commit;
END LOOP;
END;
/
----------------------------------------------------------------
-- AWR - Purge Event Histogram
--
-- Doc ID 1912201.1: Excessive AWR Growth From Partitioned Objects Such as SYS.WRH$_EVENT_HISTOGRAM Causing Sysaux to Grow
----------------------------------------------------------------
----------------------------------------------------------------
-- AWR - Purge Older Partitions
----------------------------------------------------------------
exec dbms_workload_repository.create_snapshot;
-- Split partitions
alter session set "_swrf_test_action" = 72;
-- Create snapshot
exec dbms_workload_repository.create_snapshot;
-- Check Tablespace size
@tbs SYSAUX
-- Find older partitions
set lines 1000
set numf 999,999,999,999
SELECT bytes,segment_name, partition_name FROM dba_segments where owner = 'SYS' and segment_name like 'WR%' order by bytes asc;
select min(snap_id), min(BEGIN_INTERVAL_TIME) , MAX(snap_id) , max(END_INTERVAL_TIME) from dba_hist_snapshot;
-- Drop partitions from another DBID
BEGIN
FOR i in (
SELECT 'alter table sys.' || table_name || ' drop partition ' || partition_name sqltext
FROM dba_tab_partitions where table_owner ='SYS' and table_name like 'WRH$%'
and partition_name NOT like '%' || (select dbid from v$database) || '%'
and partition_name not LIKE '%MXDB_MXSN%'
)
LOOP
execute immediate i.sqltext;
END LOOP;
END;
/
-- Drop partitions
BEGIN
FOR I IN (
select table_owner, table_name, partition_name, p.HIGH_VALUE
, substr(partition_name,INSTR(p.partition_name,'_',-1)+1) snap_id
, 'alter table ' || table_owner || '.' || table_name || ' drop partition ' || p.partition_name sqltext
from v$database d
JOIN dba_tab_partitions p ON 1=1
where table_owner = 'SYS'
and table_name like 'WRH$_%'
and partition_name like '%' || d.dbid || '%'
and substr(partition_name,INSTR(p.partition_name,'_',-1)+1)
< (select max(snap_id) from dba_hist_snapshot s where s.dbid = d.dbid and s.END_INTERVAL_TIME < sysdate - 1)
order by table_owner, table_name, partition_position
)
LOOP
execute immediate i.sqltext;
END LOOP;
END;
/
-- Check Tablespace size
@tbs SYSAUX
-- Create snapshot
exec dbms_workload_repository.create_snapshot;
-- Split partitions
alter session set "_swrf_test_action" = 72;
-- Drop partitions
BEGIN
FOR i in (
SELECT 'alter table sys.' || table_name || ' drop partition ' || partition_name sqltext
FROM dba_tab_partitions where table_owner ='SYS' and table_name like 'WRH$%' and partition_name like '%218469294%'
)
LOOP
execute immediate i.sqltext;
END LOOP;
END;
/
----------------------------------------------------------------
-- AWR Extract
----------------------------------------------------------------
sqlplus / as sysdba
spool awr_extract.log
DECLARE
l_days NUMBER := 90;
l_dbid SYS.DBA_HIST_SNAPSHOT.DBID%TYPE;
l_bid SYS.DBA_HIST_SNAPSHOT.SNAP_ID%TYPE;
l_eid SYS.DBA_HIST_SNAPSHOT.SNAP_ID%TYPE;
begin
SELECT s.dbid, min(s.snap_id) bid, max(s.snap_id) eid
INTO l_dbid, l_bid, l_eid
FROM dba_hist_snapshot s
WHERE s.dbid = (select dbid from v$database)
and begin_interval_time > sysdate - l_days
group by s.dbid ;
/* call PL/SQL routine to extract the data */
sys.dbms_swrf_internal.awr_extract(dmpfile => 'AWR_exp'
, dmpdir => 'BETA_REFRESH'
, bid => l_bid
, eid=> l_eid
, dbid=> l_dbid
);
sys.dbms_swrf_internal.clear_awr_dbid;
end;
/
spool off
----------------------------------------------------------------
-- Drop AWR
----------------------------------------------------------------
sqlplus / as sysdba
spool awr_drop.log
alter system set "_awr_restrict_mode" = TRUE scope=spfile sid='*';
shutdown immediate
startup
@?/rdbms/admin/catnoawr.sql
alter system flush shared_pool;
spool off
----------------------------------------------------------------
-- Create AWR
----------------------------------------------------------------
sqlplus / as sysdba
spool awr_create.log
@?/rdbms/admin/catawr.sql
@ ?/rdbms/admin/utlrp.sql
@ ?/rdbms/admin/execsvrm.sql
spool off
----------------------------------------------------------------
-- Import AWR Data
----------------------------------------------------------------
TRUNCATE TABLE sys.wrm$_wr_control;
TRUNCATE TABLE sys.wrm$_wr_usage;
TRUNCATE TABLE sys.wrm$_snapshot_details;
impdp "'/ as sysdba'" parallel=16 directory=BETA_REFRESH dumfile=AWR_exp.dmp logfile=AWR.imp.log
----------------------------------------------------------------
-- Enable AWR Data
----------------------------------------------------------------
sqlplus / as sysdba
spool awr_drop.log
alter system reset "_awr_restrict_mode" = TRUE scope=spfile sid='*';
shutdown immediate
startup
exec dbms_workload_repository.create_snapshot;
exec dbms_workload_repository.create_snapshot;
select max(snap_id), max(end_interval_time) max_time, min(snap_id), min(end_interval_time) min_time
from dba_hist_snapshot;

43
vg/awr_config.sql Normal file
View File

@@ -0,0 +1,43 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display AWR Configuration
* Parameter : None
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 10-Apr-12 Vishal Gupta First Draft
*
*/
PROMPT
PROMPT ##################################################################
PROMPT A W R R E P O S I T O R Y C O N F I G U R A T I O N
PROMPT ##################################################################
COLUMN snap_interval HEADING "Snapshot Interval" FORMAT a20
COLUMN retention HEADING "Snapshot Retention" FORMAT a20
COLUMN topnsql HEADING "Top N SQL" FORMAT a60
SELECT c.snap_interval
, c.retention
, DECODE(c.topnsql
,'DEFAULT',DECODE(p.value
,'TYPICAL','DEFAULT - 30 for current statistic_level=TYPICAL'
,'ALL','DEFAULT - 100 for current statistic_level=ALL'
,c.topnsql
)
,c.topnsql) topnsql
FROM DBA_HIST_WR_CONTROL c
JOIN v$database d ON c.dbid = d.dbid
LEFT OUTER JOIN v$system_parameter p ON p.name = 'statistics_level'
WHERE 1=1
;
@@footer

View File

@@ -0,0 +1,73 @@
@@header
PROMPT *********************
PROMPT SCRIPT INCOMPLETE
PROMPT *********************
set term off
/*
*
* Author : Vishal Gupta
* Purpose : Display index usage from AWR data.
* Parameters : NONE
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 26-May-12 Vishal Gupta Created
*
*
*/
set term on
COLUMN table_owner HEADING "Table Owner" FORMAT a20
COLUMN table_name HEADING "Table Name" FORMAT a20
COLUMN index_name HEADING "Index Name" FORMAT a20
COLUMN Monitoring HEADING "Monitoring" FORMAT a10
COLUMN Used HEADING "Used" FORMAT a4
SELECT object_name
, sql_id
, ROUND(avg(daily_exections)) avg_daily_exections
FROM
(
SELECT p.object_name
, p.sql_id
--, p.plan_hash_value
, to_char(end_interval_time,'YYYY-MM-DD') Day
, SUM(ss.executions_delta) daily_exections
FROM dba_hist_sql_plan p
, dba_hist_sqlstat ss
, dba_hist_snapshot s
WHERE s.dbid = ss.dbid
AND s.instance_number = ss.instance_number
AND s.snap_id = ss.snap_id
AND ss.plan_hash_value = p.plan_hash_value
AND ss.dbid = p.dbid
AND ss.sql_id = p.sql_id
AND (p.object_name LIKE 'TRN_IX%' OR p.object_name = 'TRN_UK1')
AND p.object_name = 'TRN_IX13'
--AND s.end_interval_time BETWEEN TO_DATE('01-Jun-12','DD-Mon-YY') and TO_DATE('30-Jun-12','DD-Mon-YY')
GROUP BY p.object_name
, p.sql_id
--, p.plan_hash_value
, to_char(end_interval_time,'YYYY-MM-DD')
-- having sum(ss.executions_delta) > 1
ORDER BY p.object_name
, p.sql_id
--, p.plan_hash_value
, sum(ss.executions_delta) desc
)
GROUP BY object_name
, sql_id
--HAVING ROUND(avg(daily_exections)) > 10
ORDER BY object_name
, sql_id
, avg_daily_exections desc
;
@@footer

88
vg/awr_instance.sql Normal file
View File

@@ -0,0 +1,88 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display instance startup details from AWR repository
* Parameters : 1 - Instance Number ( Use % to query for all instances)
* 2 - Number of days to query ( Default 30)
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 04-Nov-12 Vishal Gupta Created
*
*/
/************************************
* INPUT PARAMETERS
************************************/
VARIABLE INST_ID VARCHAR2(100)
VARIABLE DAYS VARCHAR2(100)
BEGIN
:INST_ID := '&&1';
:DAYS := '&&2';
:INST_ID := CASE WHEN NVL(:INST_ID,'x') = 'x' THEN '%' ELSE :INST_ID END;
:DAYS := CASE WHEN NVL(:DAYS,'x') = 'x' THEN '30' ELSE :DAYS END;
END;
/
set head off
SELECT '**********************************************' || chr(10) ||
'* Instance History' || chr(10) ||
'* (From AWR Repository)' || chr(10) ||
'*' || chr(10) ||
'* Input Parameters' || chr(10) ||
'* - Instance# = "' || :INST_ID || '"' || chr(10) ||
'* - Days = "' || :DAYS || '"' || chr(10) ||
'**********************************************' || chr(10) ||
''
FROM DUAL;
set head on
COLUMN instance_number HEADING "I#" FORMAT 99
COLUMN db_name HEADING "DBName" FORMAT a10
COLUMN instance_name HEADING "Instance|Name" FORMAT a10
COLUMN startup_time HEADING "StartupTime" FORMAT a18
COLUMN last_uptime HEADING "Last Uptime" FORMAT a16
COLUMN version HEADING "Version" FORMAT a10
COLUMN parallel HEADING "Parallel" FORMAT a10
COLUMN host_name HEADING "Host Name" FORMAT a10 TRUNCATE
COLUMN platform_name HEADING "Platform Name" FORMAT a18 TRUNCATE
SELECT i.db_name
, i.instance_number
, i.host_name
, i.instance_name
, to_char(i.startup_time,'DD-MON-YY HH24:MI:SS') startup_time
, NVL2(i.last_uptime
, LPAD( EXTRACT(DAY FROM i.last_uptime) || 'd '
|| LPAD(EXTRACT(HOUR FROM i.last_uptime),2) || 'h '
|| LPAD(EXTRACT(MINUTE FROM i.last_uptime),2) || 'm '
|| LPAD(EXTRACT(SECOND FROM i.last_uptime),2) || 's'
, 16)
, '')
last_uptime
, i.version
, i.parallel
, i.platform_name
FROM
( select a.*
, a.startup_time
- LAG(a.startup_time) OVER (PARTITION BY a.dbid, a.instance_number ORDER BY a.dbid, a.instance_number, a.startup_time) last_uptime
from dba_hist_database_instance a
, v$database d
WHERE a.dbid = d.dbid
AND a.instance_number like :INST_ID
) i
WHERE i.startup_time > systimestamp - :DAYS
ORDER BY i.startup_time
;
@@footer

174
vg/awr_loadprofile.sql Normal file
View File

@@ -0,0 +1,174 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display load profile from AWR
* All figures delta between two consecutive snapshots
* Parameter : 1 - InstanceNumber (Use % for all instances)
* 2 - From Timestamp (In YYYY-MM-DD HH24:MI:SS format)
* 3 - To Timestamp (In YYYY-MM-DD HH24:MI:SS format)
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 04-Apr-12 Vishal Gupta Intial version
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE INST_ID
UNDEFINE FROM_TIMESTAMP
UNDEFINE TO_TIMESTAMP
DEFINE INST_ID="&&1"
DEFINE FROM_TIMESTAMP="&2"
DEFINE TO_TIMESTAMP="&3"
COLUMN _FROM_TIMESTAMP NEW_VALUE FROM_TIMESTAMP NOPRINT
COLUMN _TO_TIMESTAMP NEW_VALUE TO_TIMESTAMP NOPRINT
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
set term off
SELECT DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID"
, DECODE('&&FROM_TIMESTAMP','',to_char(sysdate - 1,'YYYY-MM-DD HH24:MI:SS'),'&&FROM_TIMESTAMP') "_FROM_TIMESTAMP"
, DECODE('&&TO_TIMESTAMP','',to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'),'&&TO_TIMESTAMP') "_TO_TIMESTAMP"
FROM DUAL;
set term on
/************************************
* CONFIGURATION PARAMETERS
************************************/
DEFINE SNAP_TIME_FORMAT="YYYY-MM-DD HH24:MI:SS"
DEFINE COUNT_FORMAT="9,999,999"
--DEFINE COUNT_DIVIDER="1"
--DEFINE COUNT_HEADING="#"
DEFINE COUNT_DIVIDER="1000"
DEFINE COUNT_HEADING="'000s"
--DEFINE COUNT_DIVIDER="1000000"
--DEFINE COUNT_HEADING="'000,000s"
DEFINE BYTES_FORMAT="999,999"
--DEFINE BYTES_DIVIDER="1024"
--DEFINE BYTES_HEADING="KB"
--DEFINE BYTES_DIVIDER="1024/1024"
--DEFINE BYTES_HEADING="MB"
DEFINE BYTES_DIVIDER="1024/1024/1024"
DEFINE BYTES_HEADING="GB"
DEFINE TIME_FORMAT=9,999
--DEFINE TIME_DIVIDER="1"
--DEFINE TIME_HEADING="sec"
DEFINE TIME_DIVIDER="60"
DEFINE TIME_HEADING="min"
PROMPT
PROMPT ####################################################################################
PROMPT # L O A D P R O F I L E T R E N D
PROMPT #
PROMPT # From AWR Repository
PROMPT # - For Instance ID - &INST_ID
PROMPT # - From Time - &&FROM_TIMESTAMP (YYYY-MM-DD HH24:MI:SS)
PROMPT # - To Time - &&TO_TIMESTAMP (YYYY-MM-DD HH24:MI:SS)
PROMPT ####################################################################################
COLUMN end_interval_time HEADING "Snap Time|(&&SNAP_TIME_FORMAT)" FORMAT a22
COLUMN cpu_time HEADING "CPU|Time|(&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN redo_size HEADING "RedoSize|(&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN logical_reads HEADING "Logical|Reads|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN block_changes HEADING "Block|Changes|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN phy_read_bytes HEADING "Physical|Read|(&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN phy_write_bytes HEADING "Physical|Write|(&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN phy_reads HEADING "Physical|Reads|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN phy_writes HEADING "Physical|Writes|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN user_calls HEADING "User|Calls|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN parses HEADING "Parses|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN hard_parses_reads HEADING "Hard|Parses|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN sorts_mem HEADING "Sorts|Memory|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN sorts_disk HEADING "Sorts|Disk|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN logons HEADING "Logons|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN commits HEADING "Commits|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN rollbacks HEADING "Rollbacks|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
WITH snap
AS
(SELECT s.dbid
, s.instance_number
, s.snap_id
, LAG (s.snap_id) OVER (PARTITION BY s.dbid, s.instance_number ORDER BY s.dbid, s.instance_number, s.snap_id) prev_snap_id
, s.end_interval_time
FROM dba_hist_snapshot s
, v$database d
WHERE s.dbid = d.dbid
AND s.instance_number LIKE '&&INST_ID'
AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&FROM_TIMESTAMP','YYYY-MM-DD HH24:MI:SS')
AND TO_TIMESTAMP('&&TO_TIMESTAMP','YYYY-MM-DD HH24:MI:SS')
)
SELECT /*+ USE_NL(s ss ss_prev) */
TO_CHAR(s.end_interval_time,'&&SNAP_TIME_FORMAT') end_interval_time
, ROUND(SUM(DECODE(ss.stat_name, 'CPU used by this session', ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/100/&TIME_DIVIDER)))) cpu_time
, ROUND(SUM(DECODE(ss.stat_name, 'redo size' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&BYTES_DIVIDER)))) redo_size
, ROUND(SUM(DECODE(ss.stat_name, 'session logical reads', ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) logical_reads
, ROUND(SUM(DECODE(ss.stat_name, 'db block changes' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) block_changes
, ROUND(SUM(DECODE(ss.stat_name, 'physical read total bytes' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&BYTES_DIVIDER)))) phy_read_bytes
, ROUND(SUM(DECODE(ss.stat_name, 'physical write total bytes', ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&BYTES_DIVIDER)))) phy_write_bytes
, ROUND(SUM(DECODE(ss.stat_name, 'physical reads' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) phy_reads
, ROUND(SUM(DECODE(ss.stat_name, 'physical writes' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) phy_writes
, ROUND(SUM(DECODE(ss.stat_name, 'user calls' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) user_calls
, ROUND(SUM(DECODE(ss.stat_name, 'parse count (total)' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) parses
, ROUND(SUM(DECODE(ss.stat_name, 'parse count (hard)' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) hard_parses_reads
, ROUND(SUM(DECODE(ss.stat_name, 'sorts (memory)' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) sorts_mem
, ROUND(SUM(DECODE(ss.stat_name, 'sorts (disk)' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) sorts_disk
, ROUND(SUM(DECODE(ss.stat_name, 'logons cumulative' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) logons
, ROUND(SUM(DECODE(ss.stat_name, 'user commits' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) commits
, ROUND(SUM(DECODE(ss.stat_name, 'user rollbacks' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) rollbacks
FROM snap s
, dba_hist_sysstat ss
, dba_hist_sysstat ss_prev
where s.prev_snap_id IS NOT NULL
and s.dbid = ss_prev.dbid
and s.instance_number = ss_prev.instance_number
and s.prev_snap_id = ss_prev.snap_id
and s.dbid = ss.dbid
and s.instance_number = ss.instance_number
and s.snap_id = ss.snap_id
and ss_prev.stat_name = ss.stat_name
and ss.stat_name in (
'redo size'
,'session logical reads'
,'db block changes'
,'physical reads'
,'physical read total bytes'
,'physical read bytes'
,'physical writes'
,'physical write total bytes'
,'physical write bytes'
,'user calls'
,'parse count (total)'
,'parse count (hard)'
,'sorts (memory)'
,'sorts (disk)'
,'logons cumulative'
,'execute count'
,'user commits'
,'user rollbacks'
,'CPU used by this session'
)
GROUP BY TO_CHAR(s.end_interval_time,'&&SNAP_TIME_FORMAT')
ORDER BY TO_CHAR(s.end_interval_time,'&&SNAP_TIME_FORMAT') asc
/
@@footer

View File

@@ -0,0 +1,116 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display hourly load profile from AWR for statistics passed as input
* All figures delta between two consecutive snapshots
* Parameter : 1 - InstanceNumber (Use % for all instances)
* 2 - From Timestamp (In YYYY-MM-DD HH24:MI:SS format)
* 3 - To Timestamp (In YYYY-MM-DD HH24:MI:SS format)
* 4 - Statistics Name (Exact Name, use @statname script to find exact name)
*
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 25-May-12 Vishal Gupta Intial version
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE INST_ID
UNDEFINE FROM_TIMESTAMP
UNDEFINE FROM_TIMESTAMP
UNDEFINE STAT_NAME
DEFINE INST_ID="&&1"
DEFINE FROM_TIMESTAMP="&2"
DEFINE TO_TIMESTAMP="&3"
DEFINE STAT_NAME="&4"
/************************************
* CONFIGURATION PARAMETERS
************************************/
set pages 50000
DEFINE FORMAT="999,999,999,999"
DEFINE TOTAL_FORMAT="999,999,999,999"
DEFINE HEADING="#"
DEFINE DIVIDER="1"
--DEFINE HEADING="'1000s"
--DEFINE DIVIDER="1000"
--DEFINE HEADING="min"
--DEFINE DIVIDER="60/100"
--DEFINE HEADING="hr"
--DEFINE DIVIDER="60/60/100"
--DEFINE HEADING="'KB"
--DEFINE DIVIDER="1024"
--DEFINE HEADING="'MB"
--DEFINE DIVIDER="1024/1024"
--DEFINE HEADING="'GB"
--DEFINE DIVIDER="1024/1024/1024"
PROMPT
PROMPT ####################################################################################
PROMPT #
PROMPT # S Y S T E M S T A T I S T I C S T R E N D
PROMPT #
PROMPT # From AWR Repository (Absolute figures , not delta)
PROMPT # - For Instance ID - &INST_ID
PROMPT # - Snap Between - &&FROM_TIMESTAMP and &&TO_TIMESTAMP (YYYY-MM-DD HH24:MI:SS)
PROMPT # - Statistic Name - "&&STAT_NAME"
PROMPT #
PROMPT # (All Figures are in &&HEADING)
PROMPT #
PROMPT ####################################################################################
COLUMN end_interval_time HEADING "SnapTime" FORMAT A15
COLUMN all_inst_value HEADING "All Inst|Value" FORMAT &&TOTAL_FORMAT
COLUMN inst1_value HEADING "Inst 1|Value" FORMAT &&FORMAT
COLUMN inst2_value HEADING "Inst 2|Value" FORMAT &&FORMAT
COLUMN inst3_value HEADING "Inst 3|Value" FORMAT &&FORMAT
COLUMN inst4_value HEADING "Inst 4|Value" FORMAT &&FORMAT
COLUMN inst5_value HEADING "Inst 5|Value" FORMAT &&FORMAT
COLUMN inst6_value HEADING "Inst 6|Value" FORMAT &&FORMAT
COLUMN inst7_value HEADING "Inst 7|Value" FORMAT &&FORMAT
COLUMN inst8_value HEADING "Inst 8|Value" FORMAT &&FORMAT
SELECT /*+ USE_NL(s ss) */
TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI') end_interval_time
, ROUND(SUM(ss.value) / &&DIVIDER ) all_inst_value
, ROUND(SUM(DECODE(ss.instance_number,1,ss.value,0)) / &&DIVIDER ) inst1_value
, ROUND(SUM(DECODE(ss.instance_number,2,ss.value,0)) / &&DIVIDER ) inst2_value
, ROUND(SUM(DECODE(ss.instance_number,3,ss.value,0)) / &&DIVIDER ) inst3_value
, ROUND(SUM(DECODE(ss.instance_number,4,ss.value,0)) / &&DIVIDER ) inst4_value
, ROUND(SUM(DECODE(ss.instance_number,5,ss.value,0)) / &&DIVIDER ) inst5_value
, ROUND(SUM(DECODE(ss.instance_number,6,ss.value,0)) / &&DIVIDER ) inst6_value
, ROUND(SUM(DECODE(ss.instance_number,7,ss.value,0)) / &&DIVIDER ) inst7_value
, ROUND(SUM(DECODE(ss.instance_number,8,ss.value,0)) / &&DIVIDER ) inst8_value
FROM dba_hist_snapshot s
, dba_hist_sysstat ss
where s.dbid = ss.dbid
and s.instance_number = ss.instance_number
and s.snap_id = ss.snap_id
and ss.stat_name = '&&STAT_NAME'
AND s.instance_number LIKE '&&INST_ID'
AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&FROM_TIMESTAMP','YYYY-MM-DD HH24:MI:SS')
AND TO_TIMESTAMP('&&TO_TIMESTAMP' ,'YYYY-MM-DD HH24:MI:SS')
GROUP BY TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI')
ORDER BY TO_DATE(TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI'),'DD-MON-YY HH24:MI') asc
/
@@footer

View File

@@ -0,0 +1,135 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display hourly load profile from AWR for statistics passed as input
* All figures delta between two consecutive snapshots
* Parameter : 1 - InstanceNumber (Use % for all instances)
* 2 - From Timestamp (In YYYY-MM-DD HH24:MI:SS format)
* 3 - To Timestamp (In YYYY-MM-DD HH24:MI:SS format)
* 4 - Statistics Name (Exact Name, use @statname script to find exact name)
*
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 25-May-12 Vishal Gupta Intial version
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE INST_ID
UNDEFINE FROM_TIMESTAMP
UNDEFINE FROM_TIMESTAMP
UNDEFINE STAT_NAME
DEFINE INST_ID="&&1"
DEFINE FROM_TIMESTAMP="&2"
DEFINE TO_TIMESTAMP="&3"
DEFINE STAT_NAME="&4"
/************************************
* CONFIGURATION PARAMETERS
************************************/
set pages 50000
DEFINE FORMAT="999,999,999,999"
DEFINE TOTAL_FORMAT="999,999,999,999"
DEFINE HEADING="#"
DEFINE DIVIDER="1"
--DEFINE HEADING="'1000s"
--DEFINE DIVIDER="1000"
--DEFINE HEADING="min"
--DEFINE DIVIDER="60/100"
--DEFINE HEADING="hr"
--DEFINE DIVIDER="60/60/100"
--DEFINE HEADING="'KB"
--DEFINE DIVIDER="1024"
--DEFINE HEADING="'MB"
--DEFINE DIVIDER="1024/1024"
--DEFINE HEADING="'GB"
--DEFINE DIVIDER="1024/1024/1024"
PROMPT
PROMPT ************************************************************************************
PROMPT *
PROMPT * S Y S T E M S T A T I S T I C S T R E N D
PROMPT *
PROMPT * From AWR Repository (Delta Figures)
PROMPT * - For Instance ID - &INST_ID
PROMPT * - Between &&FROM_TIMESTAMP and &&TO_TIMESTAMP (YYYY-MM-DD HH24:MI:SS)
PROMPT * - Statistic Name - "&&STAT_NAME"
PROMPT *
PROMPT * (All Figures are in &&HEADING)
PROMPT *
PROMPT ************************************************************************************
COLUMN end_interval_time HEADING "SnapTime" FORMAT A15
COLUMN all_inst_value HEADING "All Inst|Value" FORMAT &&TOTAL_FORMAT
COLUMN inst1_value HEADING "Inst 1|Value" FORMAT &&FORMAT
COLUMN inst2_value HEADING "Inst 2|Value" FORMAT &&FORMAT
COLUMN inst3_value HEADING "Inst 3|Value" FORMAT &&FORMAT
COLUMN inst4_value HEADING "Inst 4|Value" FORMAT &&FORMAT
COLUMN inst5_value HEADING "Inst 5|Value" FORMAT &&FORMAT
COLUMN inst6_value HEADING "Inst 6|Value" FORMAT &&FORMAT
COLUMN inst7_value HEADING "Inst 7|Value" FORMAT &&FORMAT
COLUMN inst8_value HEADING "Inst 8|Value" FORMAT &&FORMAT
WITH snap
AS
(SELECT s.dbid
, s.instance_number
, s.snap_id
, LEAD (s.snap_id) OVER (ORDER BY s.dbid, s.instance_number, s.snap_id) next_snap_id
, s.end_interval_time
FROM dba_hist_snapshot s
, v$database d
WHERE s.dbid = d.dbid
AND s.instance_number LIKE '&&INST_ID'
AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&FROM_TIMESTAMP','YYYY-MM-DD HH24:MI:SS')
AND TO_TIMESTAMP('&&TO_TIMESTAMP' ,'YYYY-MM-DD HH24:MI:SS')
)
SELECT /*+ USE_NL(s1 ss1 ss_prev) */
TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI') end_interval_time
, ROUND(SUM(ss.value - LEAST(ss_prev.value,ss.value)) / &&DIVIDER ) all_inst_value
, ROUND(SUM(DECODE(ss.instance_number,1,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst1_value
, ROUND(SUM(DECODE(ss.instance_number,2,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst2_value
, ROUND(SUM(DECODE(ss.instance_number,3,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst3_value
, ROUND(SUM(DECODE(ss.instance_number,4,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst4_value
, ROUND(SUM(DECODE(ss.instance_number,5,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst5_value
, ROUND(SUM(DECODE(ss.instance_number,6,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst6_value
, ROUND(SUM(DECODE(ss.instance_number,7,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst7_value
, ROUND(SUM(DECODE(ss.instance_number,8,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst8_value
FROM snap s
, dba_hist_sysstat ss
, dba_hist_sysstat ss_prev
where s.next_snap_id IS NOT NULL
and s.dbid = ss_prev.dbid
and s.instance_number = ss_prev.instance_number
and s.snap_id = ss_prev.snap_id
and s.dbid = ss.dbid
and s.instance_number = ss.instance_number
and s.next_snap_id = ss.snap_id
and ss_prev.stat_name = ss.stat_name
and ss.stat_name = '&&STAT_NAME'
GROUP BY TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI')
ORDER BY TO_DATE(TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI'),'DD-MON-YY HH24:MI') asc
/
@@footer

View File

@@ -0,0 +1,152 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display hourly load profile from AWR for statistics passed as input
* All figures delta between two consecutive snapshots
* Parameter : 1 - InstanceNumber (Use % for all instances)
* 2 - From Timestamp (In YYYY-MM-DD HH24:MI:SS format)
* 3 - To Timestamp (In YYYY-MM-DD HH24:MI:SS format)
* 4 - Statistics Name (Exact Name, use @statname script to find exact name)
*
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 25-May-12 Vishal Gupta Intial version
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE INST_ID
UNDEFINE FROM_TIMESTAMP
UNDEFINE FROM_TIMESTAMP
UNDEFINE STAT_NAME
DEFINE INST_ID="&&1"
DEFINE FROM_TIMESTAMP="&2"
DEFINE TO_TIMESTAMP="&3"
DEFINE STAT_NAME="&4"
/************************************
* CONFIGURATION PARAMETERS
************************************/
DEFINE FORMAT="9999"
DEFINE TOTAL_FORMAT="999,999"
--DEFINE HEADING="#"
--DEFINE DIVIDER="1"
--DEFINE HEADING="'1000s"
--DEFINE DIVIDER="1000"
--DEFINE HEADING="min"
--DEFINE DIVIDER="60/100"
--DEFINE HEADING="hr"
--DEFINE DIVIDER="60/60/100"
--DEFINE HEADING="KB"
--DEFINE DIVIDER="1024"
--DEFINE HEADING="MB"
--DEFINE DIVIDER="1024/1024"
DEFINE HEADING="GB"
DEFINE DIVIDER="1024/1024/1024"
PROMPT
PROMPT ####################################################################################
PROMPT #
PROMPT # S Y S T E M S T A T I S T I C S T R E N D
PROMPT #
PROMPT # From AWR Repository (Absolute figures , not delta)
PROMPT # - Statistic Name - "&&STAT_NAME"
PROMPT # - For Instance ID - &INST_ID
PROMPT # - Snap Between - &&FROM_TIMESTAMP and &&TO_TIMESTAMP (YYYY-MM-DD HH24:MI:SS)
PROMPT #
PROMPT # (All Figures are in &&HEADING)
PROMPT #
PROMPT ####################################################################################
COLUMN "Date" HEADING "Date" FORMAT A9
COLUMN "Day" HEADING "Day" FORMAT A3
COLUMN Day_Max HEADING "Day|Max" FORMAT &&TOTAL_FORMAT
COLUMN h0 HEADING "h0" FORMAT &&FORMAT
COLUMN h1 HEADING "h1" FORMAT &&FORMAT
COLUMN h2 HEADING "h2" FORMAT &&FORMAT
COLUMN h3 HEADING "h3" FORMAT &&FORMAT
COLUMN h4 HEADING "h4" FORMAT &&FORMAT
COLUMN h5 HEADING "h5" FORMAT &&FORMAT
COLUMN h6 HEADING "h6" FORMAT &&FORMAT
COLUMN h7 HEADING "h7" FORMAT &&FORMAT
COLUMN h8 HEADING "h8" FORMAT &&FORMAT
COLUMN h9 HEADING "h9" FORMAT &&FORMAT
COLUMN h10 HEADING "h10" FORMAT &&FORMAT
COLUMN h11 HEADING "h11" FORMAT &&FORMAT
COLUMN h12 HEADING "h12" FORMAT &&FORMAT
COLUMN h13 HEADING "h13" FORMAT &&FORMAT
COLUMN h14 HEADING "h14" FORMAT &&FORMAT
COLUMN h15 HEADING "h15" FORMAT &&FORMAT
COLUMN h16 HEADING "h16" FORMAT &&FORMAT
COLUMN h17 HEADING "h17" FORMAT &&FORMAT
COLUMN h18 HEADING "h18" FORMAT &&FORMAT
COLUMN h19 HEADING "h19" FORMAT &&FORMAT
COLUMN h20 HEADING "h20" FORMAT &&FORMAT
COLUMN h21 HEADING "h21" FORMAT &&FORMAT
COLUMN h22 HEADING "h22" FORMAT &&FORMAT
COLUMN h23 HEADING "h23" FORMAT &&FORMAT
SELECT /*+ USE_NL(s ss) */
TO_CHAR(trunc(s.end_interval_time),'DD-Mon-YY') "Date"
, TO_CHAR(trunc(s.end_interval_time), 'Dy') "Day"
, ROUND(MAX(ss.value) / &&DIVIDER ) Day_Max
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'00',(ss.value),0)) / &&DIVIDER ) "h0"
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'01',(ss.value),0)) / &&DIVIDER ) "h1"
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'02',(ss.value),0)) / &&DIVIDER ) "h2"
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'03',(ss.value),0)) / &&DIVIDER ) "h3"
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'04',(ss.value),0)) / &&DIVIDER ) "h4"
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'05',(ss.value),0)) / &&DIVIDER ) "h5"
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'06',(ss.value),0)) / &&DIVIDER ) "h6"
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'07',(ss.value),0)) / &&DIVIDER ) "h7"
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'08',(ss.value),0)) / &&DIVIDER ) "h8"
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'09',(ss.value),0)) / &&DIVIDER ) "h9"
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'10',(ss.value),0)) / &&DIVIDER ) "h10"
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'11',(ss.value),0)) / &&DIVIDER ) "h11"
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'12',(ss.value),0)) / &&DIVIDER ) "h12"
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'13',(ss.value),0)) / &&DIVIDER ) "h13"
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'14',(ss.value),0)) / &&DIVIDER ) "h14"
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'15',(ss.value),0)) / &&DIVIDER ) "h15"
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'16',(ss.value),0)) / &&DIVIDER ) "h16"
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'17',(ss.value),0)) / &&DIVIDER ) "h17"
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'18',(ss.value),0)) / &&DIVIDER ) "h18"
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'19',(ss.value),0)) / &&DIVIDER ) "h19"
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'20',(ss.value),0)) / &&DIVIDER ) "h20"
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'21',(ss.value),0)) / &&DIVIDER ) "h21"
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'22',(ss.value),0)) / &&DIVIDER ) "h22"
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'23',(ss.value),0)) / &&DIVIDER ) "h23"
FROM dba_hist_snapshot s
, dba_hist_sysstat ss
where s.dbid = ss.dbid
and s.instance_number = ss.instance_number
and s.snap_id = ss.snap_id
and ss.stat_name = '&&STAT_NAME'
AND s.instance_number LIKE '&&INST_ID'
AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&FROM_TIMESTAMP','YYYY-MM-DD HH24:MI:SS')
AND TO_TIMESTAMP('&&TO_TIMESTAMP' ,'YYYY-MM-DD HH24:MI:SS')
GROUP BY trunc(s.end_interval_time)
-- , to_char(COMPLETION_TIME, 'Dy')
ORDER BY trunc(s.end_interval_time) asc
/
@@footer

View File

@@ -0,0 +1,211 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display hourly load profile from AWR for statistics passed as input
* All figures delta between two consecutive snapshots
* Parameter : 1 - InstanceNumber (Use % for all instances)
* 2 - From Timestamp (In YYYY-MM-DD HH24:MI:SS format)
* 3 - To Timestamp (In YYYY-MM-DD HH24:MI:SS format)
* 4 - Statistics Name (Exact Name, use @statname script to find exact name)
*
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 25-May-12 Vishal Gupta Intial version
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE INST_ID
UNDEFINE FROM_TIMESTAMP
UNDEFINE FROM_TIMESTAMP
UNDEFINE STAT_NAME
DEFINE INST_ID="&&1"
DEFINE FROM_TIMESTAMP="&2"
DEFINE TO_TIMESTAMP="&3"
DEFINE STAT_NAME="&4"
/************************************
* CONFIGURATION PARAMETERS
************************************/
DEFINE FORMAT="99999"
DEFINE TOTAL_FORMAT="999,999"
DEFINE HEADING=""
DEFINE DIVIDER=""
COLUMN _HEADING NEW_VALUE HEADING NOPRINT
COLUMN _DIVIDER NEW_VALUE DIVIDER NOPRINT
set term off
SELECT CASE
--WHEN UPPER('&&STAT_NAME') LIKE '%CPU%' THEN '#'
WHEN UPPER('&&STAT_NAME') LIKE '%CPU%' THEN 'thousands'
--WHEN UPPER('&&STAT_NAME') LIKE '%CPU%' THEN 'millions'
--WHEN UPPER('&&STAT_NAME') LIKE '%TIME%' THEN 'sec'
--WHEN UPPER('&&STAT_NAME') LIKE '%TIME%' THEN 'min'
WHEN UPPER('&&STAT_NAME') LIKE '%TIME%' THEN 'hour'
--WHEN UPPER('&&STAT_NAME') LIKE '%BYTES%' THEN 'KB'
--WHEN UPPER('&&STAT_NAME') LIKE '%BYTES%' THEN 'MB'
WHEN UPPER('&&STAT_NAME') LIKE '%BYTES%' THEN 'GB'
ELSE '#'
END "_HEADING"
, CASE
--WHEN UPPER('&&STAT_NAME') LIKE '%CPU%' THEN '1'
WHEN UPPER('&&STAT_NAME') LIKE '%CPU%' THEN '1000'
--WHEN UPPER('&&STAT_NAME') LIKE '%CPU%' THEN '1000000'
--WHEN UPPER('&&STAT_NAME') LIKE '%TIME%' THEN '100'
--WHEN UPPER('&&STAT_NAME') LIKE '%TIME%' THEN '60/100'
WHEN UPPER('&&STAT_NAME') LIKE '%TIME%' THEN '60/60/100'
--WHEN UPPER('&&STAT_NAME') LIKE '%BYTES%' THEN '1024'
--WHEN UPPER('&&STAT_NAME') LIKE '%BYTES%' THEN '1024/1024'
WHEN UPPER('&&STAT_NAME') LIKE '%BYTES%' THEN '1024/1024/1024'
ELSE '1'
END "_DIVIDER"
FROM DUAL;
set term on
--DEFINE HEADING="#"
--DEFINE DIVIDER="1"
--&&_IF_COUNT_METRIC DEFINE HEADING="'1000s"
--&&_IF_COUNT_METRIC DEFINE DIVIDER="1000"
--&&_IF_TIME_METRIC DEFINE HEADING="minutes"
--&&_IF_TIME_METRIC DEFINE DIVIDER="60/100"
--&&_IF_TIME_METRIC DEFINE HEADING="hour"
--&&_IF_TIME_METRIC DEFINE DIVIDER="60/60/100"
--DEFINE HEADING="KB"
--DEFINE DIVIDER="1024"
--DEFINE HEADING="MB"
--DEFINE DIVIDER="1024/1024"
--&&_IF_BYTES_METRIC DEFINE HEADING="GB"
--&&_IF_BYTES_METRIC DEFINE DIVIDER="1024/1024/1024"
PROMPT
PROMPT ####################################################################################
PROMPT #
PROMPT # S Y S T E M S T A T I S T I C S T R E N D
PROMPT #
PROMPT # From AWR Repository (Delta Figures)
PROMPT # - Statistic Name - "&&STAT_NAME"
PROMPT # - For Instance ID - &INST_ID
PROMPT # - Snap Between - &&FROM_TIMESTAMP AND &&TO_TIMESTAMP (YYYY-MM-DD HH24:MI:SS)
PROMPT #
PROMPT # (All Figures are in &&HEADING)
PROMPT #
PROMPT ####################################################################################
COLUMN "Date" HEADING "Date" FORMAT A9
COLUMN "Day" HEADING "Day" FORMAT A3
COLUMN "Total" HEADING "Day|Total" FORMAT &&TOTAL_FORMAT
COLUMN h0 HEADING "h0" FORMAT &&FORMAT
COLUMN h1 HEADING "h1" FORMAT &&FORMAT
COLUMN h2 HEADING "h2" FORMAT &&FORMAT
COLUMN h3 HEADING "h3" FORMAT &&FORMAT
COLUMN h4 HEADING "h4" FORMAT &&FORMAT
COLUMN h5 HEADING "h5" FORMAT &&FORMAT
COLUMN h6 HEADING "h6" FORMAT &&FORMAT
COLUMN h7 HEADING "h7" FORMAT &&FORMAT
COLUMN h8 HEADING "h8" FORMAT &&FORMAT
COLUMN h9 HEADING "h9" FORMAT &&FORMAT
COLUMN h10 HEADING "h10" FORMAT &&FORMAT
COLUMN h11 HEADING "h11" FORMAT &&FORMAT
COLUMN h12 HEADING "h12" FORMAT &&FORMAT
COLUMN h13 HEADING "h13" FORMAT &&FORMAT
COLUMN h14 HEADING "h14" FORMAT &&FORMAT
COLUMN h15 HEADING "h15" FORMAT &&FORMAT
COLUMN h16 HEADING "h16" FORMAT &&FORMAT
COLUMN h17 HEADING "h17" FORMAT &&FORMAT
COLUMN h18 HEADING "h18" FORMAT &&FORMAT
COLUMN h19 HEADING "h19" FORMAT &&FORMAT
COLUMN h20 HEADING "h20" FORMAT &&FORMAT
COLUMN h21 HEADING "h21" FORMAT &&FORMAT
COLUMN h22 HEADING "h22" FORMAT &&FORMAT
COLUMN h23 HEADING "h23" FORMAT &&FORMAT
WITH snap
AS
(SELECT s.dbid
, s.instance_number
, s.snap_id
, LAG (s.snap_id) OVER (PARTITION BY s.dbid, s.instance_number ORDER BY s.dbid, s.instance_number, s.snap_id) prev_snap_id
, s.end_interval_time
FROM dba_hist_snapshot s
, v$database d
WHERE s.dbid = d.dbid
AND s.instance_number LIKE '&&INST_ID'
AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&FROM_TIMESTAMP','YYYY-MM-DD HH24:MI:SS') - 1/24
AND TO_TIMESTAMP('&&TO_TIMESTAMP','YYYY-MM-DD HH24:MI:SS')
)
SELECT /*+ LEADING(s sn) USE_NL(s sn ss ss_prev) */
TO_CHAR(trunc(s.end_interval_time),'DD-Mon-YY') "Date"
, TO_CHAR(trunc(s.end_interval_time), 'Dy') "Day"
, ROUND(SUM(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)) / &&DIVIDER ) Total
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'00',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h0"
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'01',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h1"
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'02',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h2"
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'03',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h3"
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'04',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h4"
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'05',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h5"
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'06',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h6"
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'07',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h7"
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'08',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h8"
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'09',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h9"
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'10',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h10"
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'11',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h11"
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'12',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h12"
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'13',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h13"
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'14',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h14"
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'15',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h15"
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'16',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h16"
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'17',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h17"
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'18',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h18"
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'19',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h19"
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'20',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h20"
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'21',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h21"
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'22',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h22"
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'23',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h23"
FROM snap s
, dba_hist_stat_name sn
, dba_hist_sysstat ss
, dba_hist_sysstat ss_prev
WHERE ss.dbid = s.dbid
AND ss.instance_number = s.instance_number
AND ss.snap_id = s.snap_id
AND ss_prev.dbid = s.dbid
AND ss_prev.instance_number = s.instance_number
AND ss_prev.snap_id = s.prev_snap_id
AND ss_prev.stat_id = ss.stat_id
AND sn.dbid = s.dbid
AND sn.stat_id = ss.stat_id
AND UPPER(sn.stat_name) = UPPER('&&STAT_NAME')
GROUP BY trunc(s.end_interval_time)
ORDER BY trunc(s.end_interval_time) asc
/
@@footer

View File

@@ -0,0 +1,221 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display load profile from AWR
* All figures delta between two consecutive snapshots
* Parameter : 1 - InstanceNumber (Use % for all instances)
* 2 - No of days
*
* dbid and instancenumber are optional.
* If not passes then it takes current instance's dbid and instancenumber
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 04-Apr-12 Vishal Gupta First Draft
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE INST_ID
UNDEFINE days
DEFINE INST_ID="&&1"
DEFINE days="&&2"
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
COLUMN _days NEW_VALUE days NOPRINT
set term off
SELECT DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID"
, DECODE('&&days','','7','&&days') "_days"
FROM DUAL;
set term on
/************************************
* CONFIGURATION PARAMETERS
************************************/
set pages 2000
DEFINE COUNT_FORMAT="999,999"
--DEFINE COUNT_DIVIDER="1"
--DEFINE COUNT_HEADING="#"
DEFINE COUNT_DIVIDER="1000"
DEFINE COUNT_HEADING="'000s"
DEFINE BYTES_FORMAT="9999"
--DEFINE BYTES_DIVIDER="1024"
--DEFINE BYTES_HEADING="KB"
--DEFINE BYTES_DIVIDER="1024/1024"
--DEFINE BYTES_HEADING="MB"
DEFINE BYTES_DIVIDER="1024/1024/1024"
DEFINE BYTES_HEADING="GB"
DEFINE TIME_FORMAT=9,999
DEFINE TIME_DIVIDER="1"
DEFINE TIME_HEADING="sec"
PROMPT
PROMPT #################################################################
PROMPT L O G I C A L ( C A C H E D ) R E A D S T R E N D
PROMPT #################################################################
COLUMN end_interval_day HEADING "Date|DD-MON-YY Day" FORMAT a14
COLUMN DayTotal HEADING "DayTotal|(&BYTES_HEADING)" FORMAT 999,999
COLUMN h00 HEADING "h00|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h01 HEADING "h01|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h02 HEADING "h02|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h03 HEADING "h03|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h04 HEADING "h04|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h05 HEADING "h05|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h06 HEADING "h06|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h07 HEADING "h07|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h08 HEADING "h08|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h09 HEADING "h09|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h10 HEADING "h10|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h11 HEADING "h11|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h12 HEADING "h12|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h13 HEADING "h13|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h14 HEADING "h14|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h15 HEADING "h15|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h16 HEADING "h16|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h17 HEADING "h17|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h18 HEADING "h18|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h19 HEADING "h19|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h20 HEADING "h20|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h21 HEADING "h21|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h22 HEADING "h22|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h23 HEADING "h23|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
BREAK ON REPORT
COMPUTE MIN MAX AVG OF DayTotal ON REPORT
COMPUTE MIN MAX AVG OF h00 ON REPORT
COMPUTE MIN MAX AVG OF h01 ON REPORT
COMPUTE MIN MAX AVG OF h02 ON REPORT
COMPUTE MIN MAX AVG OF h03 ON REPORT
COMPUTE MIN MAX AVG OF h04 ON REPORT
COMPUTE MIN MAX AVG OF h05 ON REPORT
COMPUTE MIN MAX AVG OF h06 ON REPORT
COMPUTE MIN MAX AVG OF h07 ON REPORT
COMPUTE MIN MAX AVG OF h08 ON REPORT
COMPUTE MIN MAX AVG OF h09 ON REPORT
COMPUTE MIN MAX AVG OF h10 ON REPORT
COMPUTE MIN MAX AVG OF h11 ON REPORT
COMPUTE MIN MAX AVG OF h12 ON REPORT
COMPUTE MIN MAX AVG OF h13 ON REPORT
COMPUTE MIN MAX AVG OF h14 ON REPORT
COMPUTE MIN MAX AVG OF h15 ON REPORT
COMPUTE MIN MAX AVG OF h16 ON REPORT
COMPUTE MIN MAX AVG OF h17 ON REPORT
COMPUTE MIN MAX AVG OF h18 ON REPORT
COMPUTE MIN MAX AVG OF h19 ON REPORT
COMPUTE MIN MAX AVG OF h20 ON REPORT
COMPUTE MIN MAX AVG OF h21 ON REPORT
COMPUTE MIN MAX AVG OF h22 ON REPORT
COMPUTE MIN MAX AVG OF h23 ON REPORT
WITH snap
AS
(SELECT s.dbid
, s.instance_number
, s.snap_id
, LAG (s.snap_id) OVER (PARTITION BY s.dbid, s.instance_number ORDER BY s.dbid, s.instance_number, s.snap_id) prev_snap_id
, s.end_interval_time
FROM dba_hist_snapshot s
, v$database d
WHERE s.dbid = d.dbid
AND s.instance_number LIKE '&inst_id'
AND s.end_interval_time > TRUNC(systimestamp) - &days
)
, awr_stats as
(
SELECT TRUNC(s1.end_interval_time) end_interval_day
, TO_CHAR(s1.end_interval_time,'hh24') end_interval_hour
, ROUND((ss2.value - NVL(ss1.value,ss2.value))*p.value/&BYTES_DIVIDER) value
FROM snap s1
, dba_hist_sysstat ss1
, dba_hist_sysstat ss2
, dba_hist_stat_name sn
, v$system_parameter p
where p.name = 'db_block_size'
and s1.dbid = ss1.dbid
and s1.instance_number = ss1.instance_number
and s1.prev_snap_id = ss1.snap_id
and s1.dbid = ss2.dbid
and s1.instance_number = ss2.instance_number
and s1.snap_id = ss2.snap_id
and ss1.stat_id = ss2.stat_id
and ss1.dbid = sn.dbid
and ss1.stat_id = sn.stat_id
and sn.stat_name in (
'consistent gets'
/*
'redo size'
,'session logical reads'
,'db block changes'
,'physical reads'
,'physical writes'
,'user calls'
,'parse count (total)'
,'parse count (hard)'
,'sorts (memory)'
,'sorts (disk)'
,'logons cumulative'
,'execute count'
,'user commits'
,'user rollbacks'
*/
)
)
SELECT TO_CHAR(s.end_interval_day,'DD-Mon-YY Dy') end_interval_day
, SUM(s.value) DayTotal
, SUM(DECODE(s.end_interval_hour,'00',s.value,0)) h00
, SUM(DECODE(s.end_interval_hour,'01',s.value,0)) h01
, SUM(DECODE(s.end_interval_hour,'02',s.value,0)) h02
, SUM(DECODE(s.end_interval_hour,'03',s.value,0)) h03
, SUM(DECODE(s.end_interval_hour,'04',s.value,0)) h04
, SUM(DECODE(s.end_interval_hour,'05',s.value,0)) h05
, SUM(DECODE(s.end_interval_hour,'06',s.value,0)) h06
, SUM(DECODE(s.end_interval_hour,'07',s.value,0)) h07
, SUM(DECODE(s.end_interval_hour,'08',s.value,0)) h08
, SUM(DECODE(s.end_interval_hour,'09',s.value,0)) h09
, SUM(DECODE(s.end_interval_hour,'10',s.value,0)) h10
, SUM(DECODE(s.end_interval_hour,'11',s.value,0)) h11
, SUM(DECODE(s.end_interval_hour,'12',s.value,0)) h12
, SUM(DECODE(s.end_interval_hour,'13',s.value,0)) h13
, SUM(DECODE(s.end_interval_hour,'14',s.value,0)) h14
, SUM(DECODE(s.end_interval_hour,'15',s.value,0)) h15
, SUM(DECODE(s.end_interval_hour,'16',s.value,0)) h16
, SUM(DECODE(s.end_interval_hour,'17',s.value,0)) h17
, SUM(DECODE(s.end_interval_hour,'18',s.value,0)) h18
, SUM(DECODE(s.end_interval_hour,'19',s.value,0)) h19
, SUM(DECODE(s.end_interval_hour,'20',s.value,0)) h20
, SUM(DECODE(s.end_interval_hour,'21',s.value,0)) h21
, SUM(DECODE(s.end_interval_hour,'22',s.value,0)) h22
, SUM(DECODE(s.end_interval_hour,'23',s.value,0)) h23
FROM awr_stats s
GROUP BY s.end_interval_day
ORDER BY s.end_interval_day
/
UNDEFINE days
UNDEFINE INST_ID
@@footer

View File

@@ -0,0 +1,207 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display load profile from AWR
* All figures delta between two consecutive snapshots
* Parameter : 1 - InstanceNumber (Use % for all instances)
* 2 - No of days
*
* dbid and instancenumber are optional.
* If not passes then it takes current instance's dbid and instancenumber
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 04-Apr-12 Vishal Gupta First Draft
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE INST_ID
UNDEFINE days
DEFINE INST_ID="&&1"
DEFINE days="&&2"
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
COLUMN _days NEW_VALUE days NOPRINT
set term off
SELECT DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID"
, DECODE('&&days','','7','&&days') "_days"
FROM DUAL;
set term on
/************************************
* CONFIGURATION PARAMETERS
************************************/
set pages 2000
DEFINE COUNT_FORMAT="999,999"
--DEFINE COUNT_DIVIDER="1"
--DEFINE COUNT_HEADING="#"
DEFINE COUNT_DIVIDER="1000"
DEFINE COUNT_HEADING="'000s"
DEFINE BYTES_FORMAT="99999"
--DEFINE BYTES_DIVIDER="1024"
--DEFINE BYTES_HEADING="KB"
--DEFINE BYTES_DIVIDER="1024/1024"
--DEFINE BYTES_HEADING="MB"
DEFINE BYTES_DIVIDER="1024/1024/1024"
DEFINE BYTES_HEADING="GB"
DEFINE TIME_FORMAT=9,999
DEFINE TIME_DIVIDER="1"
DEFINE TIME_HEADING="sec"
PROMPT
PROMPT *****************************************************
PROMPT *** P H Y S I C A L R E A D S T R E N D ***
PROMPT *****************************************************
COLUMN end_interval_day HEADING "Date|DD-MON-YY Day" FORMAT a14
COLUMN DayTotal HEADING "DayTotal|(&BYTES_HEADING)" FORMAT 9,999,999
COLUMN h00 HEADING "h00|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h01 HEADING "h01|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h02 HEADING "h02|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h03 HEADING "h03|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h04 HEADING "h04|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h05 HEADING "h05|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h06 HEADING "h06|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h07 HEADING "h07|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h08 HEADING "h08|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h09 HEADING "h09|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h10 HEADING "h10|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h11 HEADING "h11|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h12 HEADING "h12|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h13 HEADING "h13|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h14 HEADING "h14|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h15 HEADING "h15|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h16 HEADING "h16|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h17 HEADING "h17|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h18 HEADING "h18|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h19 HEADING "h19|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h20 HEADING "h20|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h21 HEADING "h21|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h22 HEADING "h22|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h23 HEADING "h23|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
BREAK ON REPORT
COMPUTE MIN MAX AVG OF DayTotal ON REPORT
COMPUTE MIN MAX AVG OF h00 ON REPORT
COMPUTE MIN MAX AVG OF h01 ON REPORT
COMPUTE MIN MAX AVG OF h02 ON REPORT
COMPUTE MIN MAX AVG OF h03 ON REPORT
COMPUTE MIN MAX AVG OF h04 ON REPORT
COMPUTE MIN MAX AVG OF h05 ON REPORT
COMPUTE MIN MAX AVG OF h06 ON REPORT
COMPUTE MIN MAX AVG OF h07 ON REPORT
COMPUTE MIN MAX AVG OF h08 ON REPORT
COMPUTE MIN MAX AVG OF h09 ON REPORT
COMPUTE MIN MAX AVG OF h10 ON REPORT
COMPUTE MIN MAX AVG OF h11 ON REPORT
COMPUTE MIN MAX AVG OF h12 ON REPORT
COMPUTE MIN MAX AVG OF h13 ON REPORT
COMPUTE MIN MAX AVG OF h14 ON REPORT
COMPUTE MIN MAX AVG OF h15 ON REPORT
COMPUTE MIN MAX AVG OF h16 ON REPORT
COMPUTE MIN MAX AVG OF h17 ON REPORT
COMPUTE MIN MAX AVG OF h18 ON REPORT
COMPUTE MIN MAX AVG OF h19 ON REPORT
COMPUTE MIN MAX AVG OF h20 ON REPORT
COMPUTE MIN MAX AVG OF h21 ON REPORT
COMPUTE MIN MAX AVG OF h22 ON REPORT
COMPUTE MIN MAX AVG OF h23 ON REPORT
WITH snap
AS
(SELECT s.dbid
, s.instance_number
, s.snap_id
, LAG (s.snap_id) OVER (PARTITION BY s.dbid, s.instance_number ORDER BY s.dbid, s.instance_number, s.snap_id) prev_snap_id
, s.end_interval_time
FROM dba_hist_snapshot s
, v$database d
WHERE s.dbid = d.dbid
AND s.instance_number LIKE '&inst_id'
AND s.end_interval_time > TRUNC(systimestamp) - &days
)
, awr_stats as
(
SELECT TRUNC(snap.end_interval_time) end_interval_day
, TO_CHAR(snap.end_interval_time,'hh24') end_interval_hour
, ROUND(( GREATEST(ss2.value,NVL(ss1.value,0)) -- In case of instance bounce ss2.value will be lower than ss1.value
- NVL(ss1.value,ss2.value) -- In cases where there is no previous snapshot, ss1.value will be null.
) * p.value / &BYTES_DIVIDER) value_delta
FROM snap
, dba_hist_sysstat ss1
, dba_hist_sysstat ss2
, dba_hist_stat_name sn
, v$system_parameter p
where p.name = 'db_block_size'
and ss1.dbid = snap.dbid
and ss1.instance_number = snap.instance_number
and ss1.snap_id = snap.prev_snap_id
and ss2.dbid = snap.dbid
and ss2.instance_number = snap.instance_number
and ss2.snap_id = snap.snap_id
and ss1.stat_id = ss2.stat_id
and ss1.dbid = sn.dbid
and ss1.stat_id = sn.stat_id
and sn.stat_name in (
'physical reads'
)
)
SELECT TO_CHAR(s.end_interval_day,'DD-Mon-YY Dy') end_interval_day
, SUM(s.value_delta) DayTotal
, SUM(DECODE(s.end_interval_hour,'00',s.value_delta,0)) h00
, SUM(DECODE(s.end_interval_hour,'01',s.value_delta,0)) h01
, SUM(DECODE(s.end_interval_hour,'02',s.value_delta,0)) h02
, SUM(DECODE(s.end_interval_hour,'03',s.value_delta,0)) h03
, SUM(DECODE(s.end_interval_hour,'04',s.value_delta,0)) h04
, SUM(DECODE(s.end_interval_hour,'05',s.value_delta,0)) h05
, SUM(DECODE(s.end_interval_hour,'06',s.value_delta,0)) h06
, SUM(DECODE(s.end_interval_hour,'07',s.value_delta,0)) h07
, SUM(DECODE(s.end_interval_hour,'08',s.value_delta,0)) h08
, SUM(DECODE(s.end_interval_hour,'09',s.value_delta,0)) h09
, SUM(DECODE(s.end_interval_hour,'10',s.value_delta,0)) h10
, SUM(DECODE(s.end_interval_hour,'11',s.value_delta,0)) h11
, SUM(DECODE(s.end_interval_hour,'12',s.value_delta,0)) h12
, SUM(DECODE(s.end_interval_hour,'13',s.value_delta,0)) h13
, SUM(DECODE(s.end_interval_hour,'14',s.value_delta,0)) h14
, SUM(DECODE(s.end_interval_hour,'15',s.value_delta,0)) h15
, SUM(DECODE(s.end_interval_hour,'16',s.value_delta,0)) h16
, SUM(DECODE(s.end_interval_hour,'17',s.value_delta,0)) h17
, SUM(DECODE(s.end_interval_hour,'18',s.value_delta,0)) h18
, SUM(DECODE(s.end_interval_hour,'19',s.value_delta,0)) h19
, SUM(DECODE(s.end_interval_hour,'20',s.value_delta,0)) h20
, SUM(DECODE(s.end_interval_hour,'21',s.value_delta,0)) h21
, SUM(DECODE(s.end_interval_hour,'22',s.value_delta,0)) h22
, SUM(DECODE(s.end_interval_hour,'23',s.value_delta,0)) h23
FROM awr_stats s
GROUP BY s.end_interval_day
ORDER BY s.end_interval_day
/
UNDEFINE days
UNDEFINE INST_ID
@@footer

View File

@@ -0,0 +1,219 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display load profile from AWR
* All figures delta between two consecutive snapshots
* Parameter : 1 - InstanceNumber (Use % for all instances)
* 2 - No of days
*
* dbid and instancenumber are optional.
* If not passes then it takes current instance's dbid and instancenumber
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 04-Apr-12 Vishal Gupta First Draft
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE INST_ID
UNDEFINE days
DEFINE INST_ID="&&1"
DEFINE days="&&2"
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
COLUMN _days NEW_VALUE days NOPRINT
set term off
SELECT DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID"
, DECODE('&&days','','7','&&days') "_days"
FROM DUAL;
set term on
/************************************
* CONFIGURATION PARAMETERS
************************************/
set pages 2000
DEFINE COUNT_FORMAT="999,999"
--DEFINE COUNT_DIVIDER="1"
--DEFINE COUNT_HEADING="#"
DEFINE COUNT_DIVIDER="1000"
DEFINE COUNT_HEADING="'000s"
DEFINE BYTES_FORMAT="9999"
--DEFINE BYTES_DIVIDER="1024"
--DEFINE BYTES_HEADING="KB"
--DEFINE BYTES_DIVIDER="1024/1024"
--DEFINE BYTES_HEADING="MB"
DEFINE BYTES_DIVIDER="1024/1024/1024"
DEFINE BYTES_HEADING="GB"
DEFINE TIME_FORMAT=9,999
DEFINE TIME_DIVIDER="1"
DEFINE TIME_HEADING="sec"
PROMPT
PROMPT #################################################################
PROMPT P H Y S I C A L W R I T E S T R E N D
PROMPT #################################################################
COLUMN end_interval_day HEADING "Date|DD-MON-YY Day" FORMAT a14
COLUMN DayTotal HEADING "DayTotal|(&BYTES_HEADING)" FORMAT 999,999
COLUMN h00 HEADING "h00|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h01 HEADING "h01|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h02 HEADING "h02|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h03 HEADING "h03|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h04 HEADING "h04|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h05 HEADING "h05|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h06 HEADING "h06|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h07 HEADING "h07|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h08 HEADING "h08|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h09 HEADING "h09|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h10 HEADING "h10|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h11 HEADING "h11|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h12 HEADING "h12|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h13 HEADING "h13|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h14 HEADING "h14|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h15 HEADING "h15|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h16 HEADING "h16|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h17 HEADING "h17|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h18 HEADING "h18|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h19 HEADING "h19|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h20 HEADING "h20|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h21 HEADING "h21|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h22 HEADING "h22|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN h23 HEADING "h23|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
BREAK ON REPORT
COMPUTE MIN MAX AVG OF DayTotal ON REPORT
COMPUTE MIN MAX AVG OF h00 ON REPORT
COMPUTE MIN MAX AVG OF h01 ON REPORT
COMPUTE MIN MAX AVG OF h02 ON REPORT
COMPUTE MIN MAX AVG OF h03 ON REPORT
COMPUTE MIN MAX AVG OF h04 ON REPORT
COMPUTE MIN MAX AVG OF h05 ON REPORT
COMPUTE MIN MAX AVG OF h06 ON REPORT
COMPUTE MIN MAX AVG OF h07 ON REPORT
COMPUTE MIN MAX AVG OF h08 ON REPORT
COMPUTE MIN MAX AVG OF h09 ON REPORT
COMPUTE MIN MAX AVG OF h10 ON REPORT
COMPUTE MIN MAX AVG OF h11 ON REPORT
COMPUTE MIN MAX AVG OF h12 ON REPORT
COMPUTE MIN MAX AVG OF h13 ON REPORT
COMPUTE MIN MAX AVG OF h14 ON REPORT
COMPUTE MIN MAX AVG OF h15 ON REPORT
COMPUTE MIN MAX AVG OF h16 ON REPORT
COMPUTE MIN MAX AVG OF h17 ON REPORT
COMPUTE MIN MAX AVG OF h18 ON REPORT
COMPUTE MIN MAX AVG OF h19 ON REPORT
COMPUTE MIN MAX AVG OF h20 ON REPORT
COMPUTE MIN MAX AVG OF h21 ON REPORT
COMPUTE MIN MAX AVG OF h22 ON REPORT
COMPUTE MIN MAX AVG OF h23 ON REPORT
WITH snap
AS
(SELECT s.dbid
, s.instance_number
, s.snap_id
, LAG (s.snap_id) OVER (PARTITION BY s.dbid, s.instance_number ORDER BY s.dbid, s.instance_number, s.snap_id) prev_snap_id
, s.end_interval_time
FROM dba_hist_snapshot s
, v$database d
WHERE s.dbid = d.dbid
AND s.instance_number LIKE '&inst_id'
AND s.end_interval_time > TRUNC(systimestamp) - &days
)
, awr_stats as
(
SELECT TRUNC(s1.end_interval_time) end_interval_day
, TO_CHAR(s1.end_interval_time,'hh24') end_interval_hour
, ROUND((ss2.value - NVL(ss1.value,ss2.value))*p.value/&BYTES_DIVIDER) value
FROM snap s1
, dba_hist_sysstat ss1
, dba_hist_sysstat ss2
, dba_hist_stat_name sn
, v$system_parameter p
where p.name = 'db_block_size'
and s1.dbid = ss1.dbid
and s1.instance_number = ss1.instance_number
and s1.prev_snap_id = ss1.snap_id
and s1.dbid = ss2.dbid
and s1.instance_number = ss2.instance_number
and s1.snap_id = ss2.snap_id
and ss1.stat_id = ss2.stat_id
and ss1.dbid = sn.dbid
and ss1.stat_id = sn.stat_id
and sn.stat_name in (
'physical writes'
/*
'redo size'
,'session logical reads'
,'db block changes'
,'physical reads'
,'physical writes'
,'user calls'
,'parse count (total)'
,'parse count (hard)'
,'sorts (memory)'
,'sorts (disk)'
,'logons cumulative'
,'execute count'
,'user commits'
,'user rollbacks'
*/
)
)
SELECT TO_CHAR(s.end_interval_day,'DD-Mon-YY Dy') end_interval_day
, SUM(s.value) DayTotal
, SUM(DECODE(s.end_interval_hour,'00',s.value,0)) h00
, SUM(DECODE(s.end_interval_hour,'01',s.value,0)) h01
, SUM(DECODE(s.end_interval_hour,'02',s.value,0)) h02
, SUM(DECODE(s.end_interval_hour,'03',s.value,0)) h03
, SUM(DECODE(s.end_interval_hour,'04',s.value,0)) h04
, SUM(DECODE(s.end_interval_hour,'05',s.value,0)) h05
, SUM(DECODE(s.end_interval_hour,'06',s.value,0)) h06
, SUM(DECODE(s.end_interval_hour,'07',s.value,0)) h07
, SUM(DECODE(s.end_interval_hour,'08',s.value,0)) h08
, SUM(DECODE(s.end_interval_hour,'09',s.value,0)) h09
, SUM(DECODE(s.end_interval_hour,'10',s.value,0)) h10
, SUM(DECODE(s.end_interval_hour,'11',s.value,0)) h11
, SUM(DECODE(s.end_interval_hour,'12',s.value,0)) h12
, SUM(DECODE(s.end_interval_hour,'13',s.value,0)) h13
, SUM(DECODE(s.end_interval_hour,'14',s.value,0)) h14
, SUM(DECODE(s.end_interval_hour,'15',s.value,0)) h15
, SUM(DECODE(s.end_interval_hour,'16',s.value,0)) h16
, SUM(DECODE(s.end_interval_hour,'17',s.value,0)) h17
, SUM(DECODE(s.end_interval_hour,'18',s.value,0)) h18
, SUM(DECODE(s.end_interval_hour,'19',s.value,0)) h19
, SUM(DECODE(s.end_interval_hour,'20',s.value,0)) h20
, SUM(DECODE(s.end_interval_hour,'21',s.value,0)) h21
, SUM(DECODE(s.end_interval_hour,'22',s.value,0)) h22
, SUM(DECODE(s.end_interval_hour,'23',s.value,0)) h23
FROM awr_stats s
GROUP BY s.end_interval_day
ORDER BY s.end_interval_day
/
UNDEFINE days
UNDEFINE INST_ID
@@footer

212
vg/awr_osstat.sql Normal file
View File

@@ -0,0 +1,212 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display hourly OS Statistics from AWR
*
* Parameter : 1 - InstanceNumber (Use % for all instances)
* 2 - From Timestamp (In YYYY-MM-DD HH24:MI:SS format)
* 3 - To Timestamp (In YYYY-MM-DD HH24:MI:SS format)
* 4 - Statistics Name (Exact Name, use @osstatname script to find exact name)
*
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 20-Feb-15 Vishal Gupta Change input parameter order
* 25-May-12 Vishal Gupta Created
*
*/
/************************************
* INPUT PARAMETERS
************************************/
DEFINE STAT_NAME="&1"
DEFINE FROM_TIMESTAMP="&2"
DEFINE TO_TIMESTAMP="&3"
DEFINE INST_ID="&&4"
DEFINE IF_NON_CUMULATIVE_VALUE="--"
DEFINE IF_CUMULATIVE_VALUE="--"
set term off
COLUMN "_STAT_NAME" new_value STAT_NAME NOPRINT
COLUMN "_FROM_TIMESTAMP" new_value FROM_TIMESTAMP NOPRINT
COLUMN "_TO_TIMESTAMP" new_value TO_TIMESTAMP NOPRINT
COLUMN "_INST_ID" new_value INST_ID NOPRINT
SELECT DECODE('&&STAT_NAME','','BUSY_TIME','&&STAT_NAME') "_STAT_NAME"
, DECODE('&&FROM_TIMESTAMP','',TO_CHAR(sysdate - 1,'YYYY-MM-DD HH24:MI:SS'),'&&FROM_TIMESTAMP') "_FROM_TIMESTAMP"
, DECODE('&&TO_TIMESTAMP','',TO_CHAR(sysdate,'YYYY-MM-DD HH24:MI:SS'),'&&TO_TIMESTAMP') "_TO_TIMESTAMP"
, DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID"
FROM DUAL
;
COLUMN "_IF_CUMULATIVE_VALUE" new_value IF_CUMULATIVE_VALUE NOPRINT
COLUMN "_IF_NON_CUMULATIVE_VALUE" new_value IF_NON_CUMULATIVE_VALUE NOPRINT
SELECT DECODE(cumulative,'YES','','--') "_IF_CUMULATIVE_VALUE"
, DECODE(cumulative,'NO','','--') "_IF_NON_CUMULATIVE_VALUE"
FROM v$osstat
WHERE stat_name = '&&STAT_NAME'
;
COLUMN "_HEADING" new_value "HEADING" NOPRINT
COLUMN "_DIVIDER" new_value "DIVIDER" NOPRINT
COLUMN "_STAT_DESCRIPTION" new_value "STAT_DESCRIPTION" NOPRINT
SELECT DECODE('&&STAT_NAME'
,'BUSY_TIME','(s)'
,'USER_TIME','(s)'
,'IOWAIT_TIME','(s)'
,'SYS_TIME','(s)'
,'IDLE_TIME','(s)'
,'NICE_TIME','(s)'
,'RSRC_MGR_CPU_WAIT_TIME','(s)'
,'VM_IN_BYTES','MB'
,'VM_OUT_BYTES','MB'
,''
) "_HEADING"
, DECODE('&&STAT_NAME'
,'BUSY_TIME','100'
,'USER_TIME','100'
,'IOWAIT_TIME','100'
,'SYS_TIME','100'
,'IDLE_TIME','100'
,'NICE_TIME','100'
,'RSRC_MGR_CPU_WAIT_TIME','100'
,'VM_IN_BYTES','power(1024,2)'
,'VM_OUT_BYTES','power(1024,2)'
,1
) "_DIVIDER"
, DECODE('&&STAT_NAME'
,'BUSY_TIME','Time stat CPUs have been in busy state'
,'USER_TIME','Time spent in user code'
,'IOWAIT_TIME','Time spent waiting for IO'
,'SYS_TIME','Time spent in the kernel'
,'IDLE_TIME','Time that CPUs have been in idle state'
,'NICE_TIME','100'
,'RSRC_MGR_CPU_WAIT_TIME','100'
,'VM_IN_BYTES','power(1024,2)'
,'VM_OUT_BYTES','power(1024,2)'
,''
) "_STAT_DESCRIPTION"
FROM v$osstat
WHERE stat_name = '&&STAT_NAME'
;
set term on
/************************************
* CONFIGURATION PARAMETERS
************************************/
set pages 50000
DEFINE FORMAT="999,999,999,999"
DEFINE TOTAL_FORMAT="999,999,999,999"
DEFINE HEADING="#"
DEFINE DIVIDER="1"
--DEFINE HEADING="'1000s"
--DEFINE DIVIDER="1000"
--DEFINE HEADING="min"
--DEFINE DIVIDER="60/100"
--DEFINE HEADING="hr"
--DEFINE DIVIDER="60/60/100"
--DEFINE HEADING="'KB"
--DEFINE DIVIDER="1024"
--DEFINE HEADING="'MB"
--DEFINE DIVIDER="1024/1024"
--DEFINE HEADING="'GB"
--DEFINE DIVIDER="1024/1024/1024"
PROMPT
PROMPT #############################################################################
PROMPT # AWR Operation System Statistics
PROMPT #
PROMPT # From AWR Repository
PROMPT # - Statistic Name - "&&STAT_NAME" - &&STAT_DESCRIPTION
PROMPT # - From Timestamp - "&&FROM_TIMESTAMP" (YYYY-MM-DD HH24:MI:SS)
PROMPT # - To Timestamp - "&&TO_TIMESTAMP" (YYYY-MM-DD HH24:MI:SS)
PROMPT # - For Instance ID - "&&INST_ID"
PROMPT #############################################################################
COLUMN end_interval_time HEADING "SnapTime" FORMAT A15
COLUMN all_inst_value HEADING "All Inst|Value" FORMAT &&TOTAL_FORMAT
COLUMN inst1_value HEADING "Inst 1|Value" FORMAT &&FORMAT
COLUMN inst2_value HEADING "Inst 2|Value" FORMAT &&FORMAT
COLUMN inst3_value HEADING "Inst 3|Value" FORMAT &&FORMAT
COLUMN inst4_value HEADING "Inst 4|Value" FORMAT &&FORMAT
COLUMN inst5_value HEADING "Inst 5|Value" FORMAT &&FORMAT
COLUMN inst6_value HEADING "Inst 6|Value" FORMAT &&FORMAT
COLUMN inst7_value HEADING "Inst 7|Value" FORMAT &&FORMAT
COLUMN inst8_value HEADING "Inst 8|Value" FORMAT &&FORMAT
WITH snap
AS
(SELECT s.dbid
, s.instance_number
, s.snap_id
, LEAD (s.snap_id) OVER (ORDER BY s.dbid, s.instance_number, s.snap_id) next_snap_id
, s.end_interval_time
FROM dba_hist_snapshot s
, v$database d
WHERE s.dbid = d.dbid
AND s.instance_number LIKE '&&INST_ID'
AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&FROM_TIMESTAMP','YYYY-MM-DD HH24:MI:SS')
AND TO_TIMESTAMP('&&TO_TIMESTAMP' ,'YYYY-MM-DD HH24:MI:SS')
)
SELECT /*+ USE_NL(s1 ss1 ss_prev) */
TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI') end_interval_time
&&IF_CUMULATIVE_VALUE , ROUND(SUM(ss.value - LEAST(ss_prev.value,ss.value)) / &&DIVIDER ) all_inst_value
&&IF_CUMULATIVE_VALUE , ROUND(SUM(DECODE(ss.instance_number,1,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst1_value
&&IF_CUMULATIVE_VALUE , ROUND(SUM(DECODE(ss.instance_number,2,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst2_value
&&IF_CUMULATIVE_VALUE , ROUND(SUM(DECODE(ss.instance_number,3,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst3_value
&&IF_CUMULATIVE_VALUE , ROUND(SUM(DECODE(ss.instance_number,4,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst4_value
&&IF_CUMULATIVE_VALUE , ROUND(SUM(DECODE(ss.instance_number,5,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst5_value
&&IF_CUMULATIVE_VALUE , ROUND(SUM(DECODE(ss.instance_number,6,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst6_value
&&IF_CUMULATIVE_VALUE , ROUND(SUM(DECODE(ss.instance_number,7,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst7_value
&&IF_CUMULATIVE_VALUE , ROUND(SUM(DECODE(ss.instance_number,8,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst8_value
&&IF_NON_CUMULATIVE_VALUE , ROUND(MAX(ss.value) / &&DIVIDER ) all_inst_value
&&IF_NON_CUMULATIVE_VALUE , ROUND(MAX(DECODE(ss.instance_number,1,ss.value,0)) / &&DIVIDER ) inst1_value
&&IF_NON_CUMULATIVE_VALUE , ROUND(MAX(DECODE(ss.instance_number,2,ss.value,0)) / &&DIVIDER ) inst2_value
&&IF_NON_CUMULATIVE_VALUE , ROUND(MAX(DECODE(ss.instance_number,3,ss.value,0)) / &&DIVIDER ) inst3_value
&&IF_NON_CUMULATIVE_VALUE , ROUND(MAX(DECODE(ss.instance_number,4,ss.value,0)) / &&DIVIDER ) inst4_value
&&IF_NON_CUMULATIVE_VALUE , ROUND(MAX(DECODE(ss.instance_number,5,ss.value,0)) / &&DIVIDER ) inst5_value
&&IF_NON_CUMULATIVE_VALUE , ROUND(MAX(DECODE(ss.instance_number,6,ss.value,0)) / &&DIVIDER ) inst6_value
&&IF_NON_CUMULATIVE_VALUE , ROUND(MAX(DECODE(ss.instance_number,7,ss.value,0)) / &&DIVIDER ) inst7_value
&&IF_NON_CUMULATIVE_VALUE , ROUND(MAX(DECODE(ss.instance_number,8,ss.value,0)) / &&DIVIDER ) inst8_value
FROM snap s
, dba_hist_osstat ss
, dba_hist_osstat ss_prev
where s.next_snap_id IS NOT NULL
and s.dbid = ss_prev.dbid
and s.instance_number = ss_prev.instance_number
and s.snap_id = ss_prev.snap_id
and s.dbid = ss.dbid
and s.instance_number = ss.instance_number
and s.next_snap_id = ss.snap_id
and ss_prev.stat_name = ss.stat_name
and ss.stat_name = '&&STAT_NAME'
GROUP BY TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI')
ORDER BY TO_DATE(TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI'),'DD-MON-YY HH24:MI') asc
;
UNDEFINE IF_NON_CUMULATIVE_VALUE
UNDEFINE IF_CUMULATIVE_VALUE
@@footer

97
vg/awr_parameter.sql Normal file
View File

@@ -0,0 +1,97 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display database parameter changes from AWR Repository
* Parameters : 1 - Parameter Name (Use % as wild card and \ as escape character)
* 2 - Instance Number ( Use % to query for all instances)
* 3 - Number of days to query ( Default 30)
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 05-Jul-12 Vishal Gupta Created
*
*/
/************************************
* INPUT PARAMETERS
************************************/
VARIABLE PARAM_NAME VARCHAR2(100)
VARIABLE INST_ID VARCHAR2(100)
VARIABLE DAYS VARCHAR2(100)
VARIABLE WHERECLAUSE VARCHAR2(4000)
BEGIN
:PARAM_NAME:= '&&1';
:INST_ID := '&&2';
:DAYS := '&&3';
:WHERECLAUSE := '&&4';
:PARAM_NAME := CASE WHEN NVL(:PARAM_NAME,'x') = 'x' THEN '%' ELSE :PARAM_NAME END;
:INST_ID := CASE WHEN NVL(:INST_ID,'x') = 'x' THEN '%' ELSE :INST_ID END;
:DAYS := CASE WHEN NVL(:DAYS,'x') = 'x' THEN '7' ELSE :DAYS END;
END;
/
set head off
SELECT '**********************************************' || chr(10) ||
'* init.ora Parameter Change History' || chr(10) ||
'* (From AWR Repository)' || chr(10) ||
'*' || chr(10) ||
'* Input Parameters' || chr(10) ||
'* - Parameter Name = "' || :PARAM_NAME || '"' || chr(10) ||
'* - Instance# = "' || :INST_ID || '"' || chr(10) ||
'* - Days = "' || :DAYS || '"' || chr(10) ||
'**********************************************' || chr(10) ||
''
FROM DUAL;
set head on
COLUMN end_interval_time HEADING "Snapshot Time" FORMAT a18
COLUMN instance_number HEADING "I#" FORMAT 99
COLUMN parameter_name HEADING "ParameterName" FORMAT a31
COLUMN value HEADING "Current Value" FORMAT a50
COLUMN prev_value HEADING "Previous Value" FORMAT a50
select TO_CHAR(a.end_interval_time,'DD-MON-YY HH24:MI:SS') end_interval_time
, a.instance_number
, a.parameter_name
--, a.ordinal
, a.value
, a.prev_value
FROM
(SELECT /*+ LEADING(s pn) parallel(s,4) parallel(pn,4) */
s.end_interval_time
, p.instance_number
, p.parameter_name
, p.VALUE
, lag(p.VALUE) OVER (PARTITION BY p.dbid, p.instance_number, p.parameter_hash
ORDER BY p.dbid, p.snap_id, p.instance_number, p.parameter_hash) prev_value
FROM v$database d
JOIN dba_hist_snapshot s ON s.dbid = d.dbid
JOIN dba_hist_parameter p ON p.dbid = s.dbid AND p.snap_id = s.snap_id AND p.instance_number = s.instance_number
WHERE 1=1
AND s.instance_number LIKE :INST_ID
AND s.end_interval_time > SYSDATE - :DAYS - (5/24) -- Check for 5 extra hours in past
AND p.parameter_name LIKE :PARAM_NAME
--AND REPLACE(p.parameter_name,'_','!') NOT LIKE '!!%' -- Filter AMM or ASMM modified parameters if in AWR.
AND p.parameter_name NOT LIKE '\_\_%' ESCAPE '\' -- Filter AMM or ASMM modified parameters if in AWR.
AND p.parameter_name NOT IN ('service_names')
AND NVL(p.VALUE,'x') NOT LIKE '%SYS.KUPC$%' -- Ignore DataPump export/import service name change
) a
WHERE 1=1
AND LOWER(NVL(a.value,'x')) <> LOWER(NVL(a.prev_value,'x'))
AND a.end_interval_time > sysdate - :DAYS
ORDER BY TO_DATE(TO_CHAR(a.end_interval_time,'DD-MON-YY HH24:MI'),'DD-MON-YY HH24:MI')
, a.parameter_name
, a.instance_number
;
@@footer

105
vg/awr_parameter2.sql Normal file
View File

@@ -0,0 +1,105 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display database parameter changes from AWR Repository
* Parameters : 1 - Parameter Name (Use % as wild card and \ as escape character)
* 2 - Instance Number ( Use % to query for all instances)
* 3 - Number of days to query ( Default 30)
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 02-Nov-13 Vishal Gupta Modified to use multiple value view
* (DBA_HIST_PARAMETER -> DBA_HIST_MVPARAMETER)
* 05-Jul-12 Vishal Gupta Created
*
*/
/************************************
* INPUT PARAMETERS
************************************/
VARIABLE PARAM_NAME VARCHAR2(100)
VARIABLE INST_ID VARCHAR2(100)
VARIABLE DAYS VARCHAR2(100)
BEGIN
:PARAM_NAME:= '&&1';
:INST_ID := '&&2';
:DAYS := '&&3';
:PARAM_NAME := CASE WHEN NVL(:PARAM_NAME,'x') = 'x' THEN '%' ELSE :PARAM_NAME END;
:INST_ID := CASE WHEN NVL(:INST_ID,'x') = 'x' THEN '%' ELSE :INST_ID END;
:DAYS := CASE WHEN NVL(:DAYS,'x') = 'x' THEN '7' ELSE :DAYS END;
END;
/
set head off
SELECT '**********************************************' || chr(10) ||
'* init.ora Parameter Change History' || chr(10) ||
'* (From AWR Repository)' || chr(10) ||
'*' || chr(10) ||
'* Input Parameters' || chr(10) ||
'* - Parameter Name = "' || :PARAM_NAME || '"' || chr(10) ||
'* - Instance# = "' || :INST_ID || '"' || chr(10) ||
'* - Days = "' || :DAYS || '"' || chr(10) ||
'**********************************************' || chr(10) ||
''
FROM DUAL;
set head on
COLUMN end_interval_time HEADING "Snapshot Time" FORMAT a18
COLUMN instance_number HEADING "I#" FORMAT 99
COLUMN parameter_name HEADING "ParameterName" FORMAT a30
COLUMN value HEADING "Current Value" FORMAT a50
COLUMN prev_value HEADING "Previous Value" FORMAT a50
WITH snapshots
AS
(
SELECT s.dbid
, s.instance_number
, s.snap_id
, s.end_interval_time
, lag(s.snap_id) OVER (PARTITION BY s.dbid, s.instance_number
ORDER BY s.dbid, s.instance_number, s.snap_id) prev_snap_id
FROM v$database d
JOIN dba_hist_snapshot s ON s.dbid = d.dbid
WHERE s.end_interval_time > SYSDATE - :DAYS - 5/24 -- Check for 5 extra hours in past
AND s.instance_number LIKE :INST_ID
)
select TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI:SS') end_interval_time
, p.instance_number
, pn.parameter_name
--, p.ordinal
, p.VALUE
, prev.value prev_value
FROM snapshots s
JOIN dba_hist_parameter_name pn ON s.dbid = pn.dbid
-- multi value parameter view
LEFT OUTER JOIN dba_hist_mvparameter prev ON prev.dbid = s.dbid
AND prev.instance_number = s.instance_number
AND prev.snap_id = s.prev_snap_id
AND prev.parameter_hash = pn.parameter_hash
OUTER JOIN dba_hist_mvparameter p ON p.dbid = s.dbid
AND p.instance_number = s.instance_number
AND p.snap_id = s.snap_id
AND p.parameter_hash = pn.parameter_hash
AND NVL(p.value,'x') = NVL(prev.value,'x')
WHERE NVL(pn.parameter_name,'x') LIKE :PARAM_NAME
--AND REPLACE(pn.parameter_name,'_','!') NOT LIKE '!!%' -- Filter AMM or ASMM modified parameters if in AWR.
AND pn.parameter_name NOT LIKE '\_\_%' ESCAPE '\' -- Filter AMM or ASMM modified parameters if in AWR.
AND NVL(p.VALUE,'x') NOT LIKE '%SYS.KUPC$%' -- Ignore DataPump export/import service name change
AND NVL(p.value,'x') <> NVL(prev.value,'x')
ORDER BY TO_DATE(TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI'),'DD-MON-YY HH24:MI')
, pn.parameter_name
, s.instance_number
;
@@footer

View File

@@ -0,0 +1,121 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display PGA statistics
* Parameter : 1 - InstanceNumber (Use % for all instances)
* 2 - From Timestamp (In YYYY-MM-DD HH24:MI:SS format)
* 3 - To Timestamp (In YYYY-MM-DD HH24:MI:SS format)
* 4 - PGA Statistics Name (For exact name, use @pga_stats script to find exact name)
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 27-Jun-12 Vishal Gupta Created
*
*/
/************************************
* INPUT PARAMETERS
************************************/
DEFINE INST_ID="&&1"
DEFINE FROM_TIMESTAMP="&2"
DEFINE TO_TIMESTAMP="&3"
DEFINE STAT_NAME="&4"
/************************************
* CONFIGURATION PARAMETERS
************************************/
set pages 50000
DEFINE COUNT_FORMAT=999,999,999
--DEFINE COUNT_DIVIDER="1"
--DEFINE COUNT_HEADING="#"
DEFINE COUNT_DIVIDER="1000"
DEFINE COUNT_HEADING="#1000"
DEFINE BYTES_FORMAT="999,999"
--DEFINE BYTES_DIVIDER="1024"
--DEFINE BYTES_HEADING="KB"
DEFINE BYTES_DIVIDER="1024/1024"
DEFINE BYTES_HEADING="MB"
--DEFINE BYTES_DIVIDER="1024/1024/1024"
--DEFINE BYTES_HEADING="GB"
PROMPT
PROMPT ***************************************************
PROMPT * PGA Statistics from AWR
PROMPT *
PROMPT * From AWR Repository
PROMPT * - For Instance ID - &INST_ID
PROMPT * - Between &&FROM_TIMESTAMP and &&TO_TIMESTAMP (YYYY-MM-DD HH24:MI:SS)
PROMPT * - Statistic Name - "&&STAT_NAME"
PROMPT ***************************************************
COLUMN end_interval_time HEADING "SnapTime" FORMAT a18
COLUMN name HEADING "Name" FORMAT a40
COLUMN unit HEADING "Unit" FORMAT a10
COLUMN all_inst_value HEADING "AllInst" FORMAT &&COUNT_FORMAT
COLUMN inst1_value HEADING "Inst1" FORMAT &&COUNT_FORMAT
COLUMN inst2_value HEADING "Inst2" FORMAT &&COUNT_FORMAT
COLUMN inst3_value HEADING "Inst3" FORMAT &&COUNT_FORMAT
COLUMN inst4_value HEADING "Inst4" FORMAT &&COUNT_FORMAT
COLUMN inst5_value HEADING "Inst5" FORMAT &&COUNT_FORMAT
COLUMN inst6_value HEADING "Inst6" FORMAT &&COUNT_FORMAT
COLUMN inst7_value HEADING "Inst7" FORMAT &&COUNT_FORMAT
COLUMN inst8_value HEADING "Inst8" FORMAT &&COUNT_FORMAT
SELECT TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI') end_interval_time
, p.name
, DECODE(pn.unit
, 'bytes','&&BYTES_HEADING'
, pn.unit) unit
, SUM(DECODE(pn.unit,'bytes',p.value/&&BYTES_DIVIDER,p.value)) all_inst_value
, SUM(DECODE(p.instance_number, 1, DECODE(pn.unit,'bytes',p.value/&&BYTES_DIVIDER,p.value))) inst1_value
, SUM(DECODE(p.instance_number, 2, DECODE(pn.unit,'bytes',p.value/&&BYTES_DIVIDER,p.value))) inst2_value
, SUM(DECODE(p.instance_number, 3, DECODE(pn.unit,'bytes',p.value/&&BYTES_DIVIDER,p.value))) inst3_value
, SUM(DECODE(p.instance_number, 4, DECODE(pn.unit,'bytes',p.value/&&BYTES_DIVIDER,p.value))) inst4_value
, SUM(DECODE(p.instance_number, 5, DECODE(pn.unit,'bytes',p.value/&&BYTES_DIVIDER,p.value))) inst5_value
, SUM(DECODE(p.instance_number, 6, DECODE(pn.unit,'bytes',p.value/&&BYTES_DIVIDER,p.value))) inst6_value
, SUM(DECODE(p.instance_number, 7, DECODE(pn.unit,'bytes',p.value/&&BYTES_DIVIDER,p.value))) inst7_value
, SUM(DECODE(p.instance_number, 8, DECODE(pn.unit,'bytes',p.value/&&BYTES_DIVIDER,p.value))) inst8_value
FROM dba_hist_pgastat p
, dba_hist_snapshot s
, v$pgastat pn
WHERE p.dbid = s.dbid
AND p.instance_number = s.instance_number
AND p.snap_id = s.snap_id
AND p.name = pn.name
AND s.instance_number LIKE '&&INST_ID'
AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&FROM_TIMESTAMP','YYYY-MM-DD HH24:MI:SS')
AND TO_TIMESTAMP('&&TO_TIMESTAMP' ,'YYYY-MM-DD HH24:MI:SS')
AND p.name = '&&STAT_NAME'
GROUP BY TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI')
, p.name
, pn.unit
ORDER BY TO_DATE(TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI'),'DD-MON-YY HH24:MI')
, p.name
, pn.unit
;
UNDEFINE INST_ID
UNDEFINE FROM_TIMESTAMP
UNDEFINE TO_TIMESTAMP
UNDEFINE STAT_NAME
@@footer

View File

@@ -0,0 +1,136 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display PGA statistics
* Parameter : 1 - InstanceNumber (Use % for all instances)
* 2 - From Timestamp (In YYYY-MM-DD HH24:MI:SS format)
* 3 - To Timestamp (In YYYY-MM-DD HH24:MI:SS format)
* 4 - PGA Statistics Name (For exact name, use @pga_stats script to find exact name)
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 27-Jun-12 Vishal Gupta Created
*
*/
/************************************
* INPUT PARAMETERS
************************************/
DEFINE INST_ID="&&1"
DEFINE FROM_TIMESTAMP="&2"
DEFINE TO_TIMESTAMP="&3"
DEFINE STAT_NAME="&4"
/************************************
* CONFIGURATION PARAMETERS
************************************/
set pages 50000
DEFINE COUNT_FORMAT=999,999,999
--DEFINE COUNT_DIVIDER="1"
--DEFINE COUNT_HEADING="#"
DEFINE COUNT_DIVIDER="1000"
DEFINE COUNT_HEADING="#1000"
DEFINE BYTES_FORMAT="999,999"
--DEFINE BYTES_DIVIDER="1024"
--DEFINE BYTES_HEADING="KB"
DEFINE BYTES_DIVIDER="1024/1024"
DEFINE BYTES_HEADING="MB"
--DEFINE BYTES_DIVIDER="1024/1024/1024"
--DEFINE BYTES_HEADING="GB"
PROMPT
PROMPT ***************************************************
PROMPT * P G A S T A T I S T I C S
PROMPT *
PROMPT * From AWR Repository (Delta Figures)
PROMPT * - For Instance ID - &INST_ID
PROMPT * - Between &&FROM_TIMESTAMP and &&TO_TIMESTAMP (YYYY-MM-DD HH24:MI:SS)
PROMPT * - Statistic Name - "&&STAT_NAME"
PROMPT ***************************************************
COLUMN end_interval_time HEADING "SnapTime" FORMAT a18
COLUMN name HEADING "Name" FORMAT a40
COLUMN unit HEADING "Unit" FORMAT a10
COLUMN all_inst_value HEADING "AllInst" FORMAT &&COUNT_FORMAT
COLUMN inst1_value HEADING "Inst1" FORMAT &&COUNT_FORMAT
COLUMN inst2_value HEADING "Inst2" FORMAT &&COUNT_FORMAT
COLUMN inst3_value HEADING "Inst3" FORMAT &&COUNT_FORMAT
COLUMN inst4_value HEADING "Inst4" FORMAT &&COUNT_FORMAT
COLUMN inst5_value HEADING "Inst5" FORMAT &&COUNT_FORMAT
COLUMN inst6_value HEADING "Inst6" FORMAT &&COUNT_FORMAT
COLUMN inst7_value HEADING "Inst7" FORMAT &&COUNT_FORMAT
COLUMN inst8_value HEADING "Inst8" FORMAT &&COUNT_FORMAT
WITH snap
AS
(SELECT s.dbid
, s.instance_number
, s.snap_id
, LEAD (s.snap_id) OVER (ORDER BY s.dbid, s.instance_number, s.snap_id) next_snap_id
, s.end_interval_time
FROM dba_hist_snapshot s
, v$database d
WHERE s.dbid = d.dbid
AND s.instance_number LIKE '&&INST_ID'
AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&FROM_TIMESTAMP','YYYY-MM-DD HH24:MI:SS')
AND TO_TIMESTAMP('&&TO_TIMESTAMP' ,'YYYY-MM-DD HH24:MI:SS')
)
SELECT TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI') end_interval_time
, p.name
, DECODE(pn.unit
, 'bytes','&&BYTES_HEADING'
, pn.unit) unit
, SUM(DECODE(pn.unit,'bytes',(p.value - LEAST(p_prev.value,p.value))/&&BYTES_DIVIDER,(p.value - LEAST(p_prev.value,p.value)))) all_inst_value
, SUM(DECODE(p.instance_number, 1, DECODE(pn.unit,'bytes',(p.value - LEAST(p_prev.value,p.value))/&&BYTES_DIVIDER,(p.value - LEAST(p_prev.value,p.value))))) inst1_value
, SUM(DECODE(p.instance_number, 2, DECODE(pn.unit,'bytes',(p.value - LEAST(p_prev.value,p.value))/&&BYTES_DIVIDER,(p.value - LEAST(p_prev.value,p.value))))) inst2_value
, SUM(DECODE(p.instance_number, 3, DECODE(pn.unit,'bytes',(p.value - LEAST(p_prev.value,p.value))/&&BYTES_DIVIDER,(p.value - LEAST(p_prev.value,p.value))))) inst3_value
, SUM(DECODE(p.instance_number, 4, DECODE(pn.unit,'bytes',(p.value - LEAST(p_prev.value,p.value))/&&BYTES_DIVIDER,(p.value - LEAST(p_prev.value,p.value))))) inst4_value
, SUM(DECODE(p.instance_number, 5, DECODE(pn.unit,'bytes',(p.value - LEAST(p_prev.value,p.value))/&&BYTES_DIVIDER,(p.value - LEAST(p_prev.value,p.value))))) inst5_value
, SUM(DECODE(p.instance_number, 6, DECODE(pn.unit,'bytes',(p.value - LEAST(p_prev.value,p.value))/&&BYTES_DIVIDER,(p.value - LEAST(p_prev.value,p.value))))) inst6_value
, SUM(DECODE(p.instance_number, 7, DECODE(pn.unit,'bytes',(p.value - LEAST(p_prev.value,p.value))/&&BYTES_DIVIDER,(p.value - LEAST(p_prev.value,p.value))))) inst7_value
, SUM(DECODE(p.instance_number, 8, DECODE(pn.unit,'bytes',(p.value - LEAST(p_prev.value,p.value))/&&BYTES_DIVIDER,(p.value - LEAST(p_prev.value,p.value))))) inst8_value
FROM snap s
, dba_hist_pgastat p
, dba_hist_pgastat p_prev
, v$pgastat pn
WHERE p.dbid = s.dbid
AND p.instance_number = s.instance_number
AND p.snap_id = s.next_snap_id
AND p.name = pn.name
AND p_prev.dbid = s.dbid
AND p_prev.instance_number = s.instance_number
AND p_prev.snap_id = s.snap_id
AND p_prev.name = pn.name
AND p_prev.name = p.name
AND p.name = '&&STAT_NAME'
GROUP BY TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI')
, p.name
, pn.unit
ORDER BY TO_DATE(TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI'),'DD-MON-YY HH24:MI')
, p.name
, pn.unit
;
UNDEFINE INST_ID
UNDEFINE FROM_TIMESTAMP
UNDEFINE TO_TIMESTAMP
UNDEFINE STAT_NAME
@@footer

112
vg/awr_pgausage.sql Normal file
View File

@@ -0,0 +1,112 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display instance level PGA usage from AWR Repository
* Compability: 10.x, 11.x
* Parameters : 1 - DAYS - Default Value - 7
* 2 - INST_ID - Default Value - %, (Use % as wildcard)
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 30-Sep-13 Vishal Gupta Created
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE DAYS
UNDEFINE INST_ID
DEFINE DAYS="&&1"
DEFINE INST_ID="&&2"
set term off
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
COLUMN _DAYS NEW_VALUE DAYS NOPRINT
SELECT TRIM(DECODE('&&DAYS','',7,'&&DAYS')) "_DAYS"
, DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID"
FROM DUAL;
set term on
/************************************
* CONFIGURATION PARAMETERS
************************************/
DEFINE BYTES_LARGE_FORMAT="9,999,999"
DEFINE BYTES_FORMAT="99,999"
--DEFINE BYTES_DIVIDER="1024"
--DEFINE BYTES_HEADING="KB"
DEFINE BYTES_DIVIDER="1024/1024"
DEFINE BYTES_HEADING="MB"
--DEFINE BYTES_DIVIDER="1024/1024/1024"
--DEFINE BYTES_HEADING="GB"
PROMPT *-------------------------------------------------------------------*
PROMPT * I N S T A N C E L E V E L P G A U S A G E S U M M A R Y *
PROMPT * (From AWR Repository) *
PROMPT * *
PROMPT * Input Parameters *
PROMPT * - Days = '&&DAYS'
PROMPT * - INST_ID = '&&INST_ID'
PROMPT *-------------------------------------------------------------------*
COLUMN seperator HEADING "!|!|!" FORMAT a1
COLUMN total_allocated HEADING "Total|Alloc|(&&BYTES_HEADING)" FORMAT &&BYTES_LARGE_FORMAT
COLUMN freeable_allocated HEADING "Freeable|Alloc|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN sql_allocated HEADING "SQL|Alloc|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN plsql_allocated HEADING "PL/SQL|Alloc|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN olap_allocated HEADING "OLAP|Alloc|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN java_allocated HEADING "Java|Alloc|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN other_allocated HEADING "Other|Alloc|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN total_used HEADING "Total|Used|(&&BYTES_HEADING)" FORMAT &&BYTES_LARGE_FORMAT
COLUMN freeable_used HEADING "Freeable|Used|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN sql_used HEADING "SQL|Used|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN plsql_used HEADING "PL/SQL|Used|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN olap_used HEADING "OLAP|Used|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN java_used HEADING "Java|Used|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN other_used HEADING "Other|Used|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN end_interval_time HEADING "Snap Time" FORMAT a15
COLUMN instance_number HEADING "Instance" FORMAT 9999999
SELECT /*+ USE_NL(d s p) */
TO_CHAR(TRUNC(s.end_interval_time,'MI'),'DD-MON-YY HH24:MI') end_interval_time
, s.instance_number
, ROUND(SUM(p.allocated_total)/ &&BYTES_DIVIDER) total_allocated
, ROUND(SUM(p.used_total)/ &&BYTES_DIVIDER) total_used
, ROUND(MAX(DECODE(p.category,'Freeable',p.allocated_total,0))/ &&BYTES_DIVIDER) freeable_allocated
, ROUND(MAX(DECODE(p.category,'Freeable',p.used_total,0))/ &&BYTES_DIVIDER) freeable_used
, ROUND(MAX(DECODE(p.category,'SQL',p.allocated_total,0))/ &&BYTES_DIVIDER) sql_allocated
, ROUND(MAX(DECODE(p.category,'SQL',p.used_total,0))/ &&BYTES_DIVIDER) sql_used
, ROUND(MAX(DECODE(p.category,'PL/SQL',p.allocated_total,0))/ &&BYTES_DIVIDER) plsql_allocated
, ROUND(MAX(DECODE(p.category,'PL/SQL',p.used_total,0))/ &&BYTES_DIVIDER) plsql_used
, ROUND(MAX(DECODE(p.category,'OLAP',p.allocated_total,0))/ &&BYTES_DIVIDER) olap_allocated
, ROUND(MAX(DECODE(p.category,'OLAP',p.used_total,0))/ &&BYTES_DIVIDER) olap_used
, ROUND(MAX(DECODE(p.category,'Other',p.allocated_total,0))/ &&BYTES_DIVIDER) other_allocated
, ROUND(MAX(DECODE(p.category,'Other',p.used_total,0))/ &&BYTES_DIVIDER) other_used
FROM dba_hist_snapshot s
JOIN v$database d ON s.dbid = d.dbid
JOIN dba_hist_process_mem_summary p ON p.dbid = s.dbid
AND p.instance_number = s.instance_number
AND p.snap_id = s.snap_id
WHERE s.end_interval_time > sysdate - &&DAYS
AND s.instance_number LIKE '&&INST_ID'
GROUP BY TRUNC(s.end_interval_time,'MI')
, s.instance_number
ORDER BY TRUNC(s.end_interval_time,'MI')
, s.instance_number
;
@@footer

488
vg/awr_queries.sql Normal file
View File

@@ -0,0 +1,488 @@
/*
**********************************************
AWR Queries
**********************************************
Contents
- AWR SQL Stats Query
- AWR SQL Statistics (Daily/Weekly/Monthly Totals)
- AWR Segment Statistics Query
- AWR Active Session History (ASH) queries
- AWR ASH Largest TEMP and PGA Users
*/
--**************************************************
-- AWR SQL Stats Query
--**************************************************
SELECT s.end_interval_time
, ss.instance_number
, ss.sql_id
, (ss.elapsed_time_total/1000000) "ElapsedTime (Total)"
, (ss.elapsed_time_total/1000000) / ss.executions_total "ElapsedTime/Exec"
, ss.executions_total
, ss.parsing_schema_name
, ss.*
FROM dba_hist_sqlstat ss
JOIN dba_hist_snapshot s ON s.dbid = ss.dbid AND s.instance_number = ss.instance_number AND s.snap_id = ss.snap_id
JOIN v$database d ON d.dbid = s.dbid
WHERE 1=1
-- AND s.end_interval_time BETWEEN TO_TIMESTAMP('2012-04-10 00:00:00','YYYY-MM-DD HH24:MI:SS') AND TO_TIMESTAMP('2012-10-18 00:00:00','YYYY-MM-DD HH24:MI:SS')
-- AND ss.sql_id = ''
-- AND upper(ss.module) like upper('bum%')
-- AND upper(ss.action) like upper('%%')
-- AND ss.sql_profile IS NOT NULL
-- AND ss.parsing_schema_name LIKE '%%'
-- AND (ss.elapsed_time_total/1000000) / ss.executions_total > 10 -- ElapsedTime/Exec > 10s
-- AND ss.executions_delta > 0
-- AND (ss.elapsed_time_total/1000000) > 100
--ORDER BY (ss.elapsed_time_total/1000000) / ss.executions_total DESC
ORDER BY (ss.elapsed_time_total/1000000) DESC
;
-- **********************************************
-- AWR SQL Statistics (Daily/Weekly/Monthly Totals)
-- **********************************************
SELECT TO_CHAR(s.end_interval_time,'YYYY-MM-DD') "Day" /* Daily */
--SELECT TO_CHAR(s.end_interval_time,'IYYY-IW') "Week" /* Weekly */
--SELECT TO_CHAR(s.end_interval_time,'YYYY-MM') "Month" /* Monthly */
, ss.sql_id "SQLId"
, MIN(s.end_interval_time) "StartTimestamp"
, MAX(s.end_interval_time) "EndTimeStamp"
, ROUND(SUM(ss.executions_delta)) "Executions"
, ROUND(SUM(ss.iowait_delta/1000000)) "IO Wait (Sec)"
, ROUND(SUM(ss.apwait_delta/1000000)) "App Wait (Sec)"
, ROUND(SUM(ss.ccwait_delta/1000000)) "Concurrency Wait (Sec)"
, ROUND(SUM(ss.clwait_delta/1000000)) "Cluster Wait (Sec)"
, ROUND(SUM(ss.plsexec_time_delta/1000000)) "PL/SQL Exec (Sec)"
, ROUND(SUM(ss.cpu_time_delta/1000000)) "CPU Time (Sec)"
, ROUND(SUM(ss.elapsed_time_delta/1000000)) "Elapsed Time (Sec)"
, ROUND(SUM(ss.rows_processed_delta)) "RowsProcessed (#)"
, ROUND(SUM(ss.sorts_delta)) "Sorts"
, ROUND(SUM(ss.buffer_gets_delta)) "Buffer Gets"
, ROUND(SUM(ss.direct_writes_delta)/1024/1024/1024) "DirectWrite (GB)"
, ROUND(SUM(ss.physical_read_bytes_delta)/1024/1024/1024) "PhyReads (GB)"
, ROUND(SUM(ss.physical_write_bytes_delta)/1024/1024/1024) "PhyWrites (GB)"
, ROUND(SUM(ss.optimized_physical_reads_delta)/1024/1024/1024) "PhyReads Optimized (GB)"
, ROUND(SUM(ss.io_offload_elig_bytes_delta)/1024/1024/1024) "PhyReads IO Offload Elig (GB)"
, ROUND(SUM(ss.io_offload_return_bytes_delta)/1024/1024/1024) "PhyReads Offload Return (GB)"
, ROUND(SUM(ss.io_interconnect_bytes_delta)/1024/1024/1024) "IO Interconnect (GB)"
FROM dba_hist_sqlstat ss
JOIN dba_hist_snapshot s ON s.dbid = ss.dbid AND s.instance_number = ss.instance_number AND s.snap_id = ss.snap_id
WHERE 1=1
-- AND ss.sql_id = '1awt7p3ua5tnz'
-- AND TO_CHAR(s.end_interval_time,'Dy') NOT IN ('Sat','Sun')
-- AND s.end_interval_time > sysdate - 30
GROUP BY TO_CHAR(s.end_interval_time,'YYYY-MM-DD') /* Daily */
--- GROUP BY TO_CHAR(s.end_interval_time,'IYYY-IW') /* Weekly */
--GROUP BY TO_CHAR(s.end_interval_time,'YYYY-MM') /* Monthly */
, ss.sql_id
ORDER BY 1 DESC
;
--**************************************************
-- AWR Segment Statistics Query
-- - Captures only top segment's statistics.
--**************************************************
SELECT s.end_interval_time
, ss.instance_number
, o.owner
, o.object_name
, o.subobject_name
, o.object_type
, o.tablespace_name
, o.partition_type
, ss.space_allocated_delta
, ss.space_used_delta
, ss.physical_reads_delta
, ss.physical_reads_direct_delta
, ss.physical_read_requests_delta
, ss.optimized_physical_reads_delta
, ss.physical_writes_delta
, ss.physical_writes_direct_delta
, ss.physical_write_requests_delta
, ss.itl_waits_delta
, ss.row_lock_waits_delta
, ss.gc_buffer_busy_delta
, ss.gc_cr_blocks_served_delta
, ss.gc_cu_blocks_served_delta
, ss.gc_cr_blocks_received_delta
, ss.gc_cu_blocks_received_delta
, ss.buffer_busy_waits_delta
, ss.db_block_changes_delta
, ss.table_scans_delta
, ss.chain_row_excess_delta
FROM v$database d
JOIN dba_hist_snapshot s USING (dbid)
JOIN dba_hist_seg_stat ss USING (dbid, instance_number,
, dba_hist_snapshot s
, dba_hist_seg_stat_obj o
WHERE d.dbid = s.dbid
AND ss.dbid = s.dbid
AND ss.instance_number = s.instance_number
AND ss.snap_id = s.snap_id
AND o.dbid = o.dbid
AND o.obj# = o.obj#
AND o.dataobj# = o.dataobj#
AND o.owner like 'PM_OWN'
AND o.object_name LIKE 'PMA_A'
AND o.subobject_name LIKE '%%'
AND s.end_interval_time > systimestamp - 30
ORDER BY s.end_interval_time desc
, ss.instance_number
;
SELECT MAX(s.end_interval_time) end_interval_time
, o.owner
, o.object_name
, o.subobject_name
, o.object_type
, o.tablespace_name
, o.partition_type
, SUM(ss.space_allocated_delta)
, SUM(ss.space_used_delta)
, SUM(ss.physical_reads_delta)
, SUM(ss.physical_reads_direct_delta)
, SUM(ss.physical_read_requests_delta)
, SUM(ss.optimized_physical_reads_delta)
, SUM(ss.physical_writes_delta)
, SUM(ss.physical_writes_direct_delta)
, SUM(ss.physical_write_requests_delta)
, SUM(ss.itl_waits_delta)
, SUM(ss.row_lock_waits_delta)
, SUM(ss.gc_buffer_busy_delta)
, SUM(ss.gc_cr_blocks_served_delta)
, SUM(ss.gc_cu_blocks_served_delta)
, SUM(ss.gc_cr_blocks_received_delta)
, SUM(ss.gc_cu_blocks_received_delta)
, SUM(ss.buffer_busy_waits_delta)
, SUM(ss.db_block_changes_delta)
, SUM(ss.table_scans_delta)
, SUM(ss.chain_row_excess_delta)
FROM v$database d
, dba_hist_seg_stat ss
, dba_hist_snapshot s
, dba_hist_seg_stat_obj o
WHERE d.dbid = s.dbid
AND s.dbid = ss.dbid
AND s.instance_number = ss.instance_number
AND s.snap_id = ss.snap_id
AND ss.dbid = o.dbid
AND ss.obj# = o.obj#
AND ss.dataobj# = o.dataobj#
AND o.owner like 'PM_OWN'
AND o.object_name LIKE 'PMA_A'
AND o.subobject_name LIKE '%%'
AND s.end_interval_time > systimestamp - 30
GROUP BY o.owner
, o.object_name
, o.subobject_name
, o.object_type
, o.tablespace_name
, o.partition_type
ORDER BY end_interval_time desc
--ORDER BY SUM(ss.space_allocated_delta) desc
--ORDER BY SUM(ss.space_used_delta) desc
--ORDER BY SUM(ss.physical_reads_delta) desc
--ORDER BY SUM(ss.physical_reads_direct_delta) desc
--ORDER BY SUM(ss.physical_read_requests_delta) desc
--ORDER BY SUM(ss.optimized_physical_reads_delta) desc
--ORDER BY SUM(ss.physical_writes_delta) desc
--ORDER BY SUM(ss.physical_writes_direct_delta) desc
--ORDER BY SUM(ss.physical_write_requests_delta) desc
--ORDER BY SUM(ss.itl_waits_delta) desc
--ORDER BY SUM(ss.row_lock_waits_delta) desc
--ORDER BY SUM(ss.gc_buffer_busy_delta) desc
--ORDER BY SUM(ss.gc_cr_blocks_served_delta) desc
--ORDER BY SUM(ss.gc_cu_blocks_served_delta) desc
--ORDER BY SUM(ss.gc_cr_blocks_received_delta) desc
--ORDER BY SUM(ss.gc_cu_blocks_received_delta) desc
--ORDER BY SUM(ss.buffer_busy_waits_delta) desc
--ORDER BY SUM(ss.db_block_changes_delta) desc
--ORDER BY SUM(ss.table_scans_delta) desc
--ORDER BY SUM(ss.chain_row_excess_delta) desc
;
--**************************************************
-- AWR Active Session History (ASH) queries
--**************************************************
SELECT ash.sample_time
, ash.instance_number I#
, ash.session_id
, ash.session_serial#
, ash.session_type
, sn.service_name
, u.username
, ash.machine
, ash.PROGRAM
, ash.client_id
, ash.sql_exec_start
, ash.force_matching_signature
, ash.sql_id
, ash.sql_child_number
, ash.sql_plan_hash_value
, ash.top_level_sql_id
-- , ash.plsql_entry_object_id
-- , ash.plsql_entry_subprogram_id
-- , ash.plsql_object_id
-- , ash.plsql_subprogram_id
, NVL2(p2.owner,p2.owner || '.' || p2.object_name || nvl2(p2.procedure_name,'.' || p2.procedure_name, ''),'') plsql_program
, NVL2(p1.owner, p1.owner || '.' || p1.object_name || nvl2(p1.procedure_name,'.' || p1.procedure_name, ''),'') plsql_entry_program
, ash.module
, ash.action
, ash.event
, ash.blocking_session_status
, ash.blocking_session
, ash.blocking_session_serial#
, ash.blocking_inst_id
, ash.blocking_hangchain_info
, ash.tm_delta_time
, ash.tm_delta_cpu_time
, ash.tm_delta_db_time
, ash.delta_time
, ash.delta_read_io_requests
, ash.delta_read_io_bytes
, ash.delta_write_io_requests
, ash.delta_write_io_bytes
, ash.delta_interconnect_io_bytes
, ash.pga_allocated
, ash.temp_space_allocated
FROM dba_hist_snapshot s
, dba_hist_active_sess_history ash
, dba_users u
, dba_hist_service_name sn
, v$database d
, dba_procedures p1
, dba_procedures p2
WHERE d.dbid = s.dbid
AND s.dbid = ash.dbid
AND s.instance_number = ash.instance_number
and s.snap_id = ash.snap_id
AND ash.dbid = sn.dbid
and ash.service_hash = sn.service_name_hash
AND ash.user_id = u.user_id
AND ash.plsql_entry_object_id = p1.object_id (+)
AND ash.plsql_entry_subprogram_id = p1.subprogram_id (+)
AND ash.plsql_object_id = p2.object_id (+)
AND ash.plsql_subprogram_id = p2.subprogram_id (+)
-- and s.end_interval_time between TO_TIMESTAMP('2012-06-09 17:00:00','YYYY-MM-DD HH24:MI:SS') and TO_TIMESTAMP('2012-06-09 23:00:07','YYYY-MM-DD HH24:MI:SS')
--and ash.sample_time between TO_TIMESTAMP('2013-02-19 17:00:00','YYYY-MM-DD HH24:MI:SS') and TO_TIMESTAMP('2013-02-19 17:51:00','YYYY-MM-DD HH24:MI:SS')
AND ash.sample_time > SYSTIMESTAMP - 2/24
-- AND ash.instance_number = '7'
-- AND ash.session_id = '1923'
-- AND ash.session_serial# = '12265'
-- and ash.service_hash = '1859414386'
-- and ash.sql_id like '1u585mt959ub3'
-- AND ash.top_level_sql_id LIKE '%'
-- and u.username like 'KQIU'
-- and upper(ash.machine) like upper('%beta%')
-- AND upper(sn.service_name) like upper('SYS$USERS')
-- and upper(ash.program) like upper('%SQL%')
-- and upper(ash.module) like upper('%PiNT%')
-- ORDER BY s.end_interval_time
ORDER BY ash.sample_time
;
SELECT ash.sql_id
, ROUND(SUM(ash.tm_delta_time)/1000000) "Total Time (sec)"
, ROUND(SUM(ash.tm_delta_cpu_time)/1000000) "CPU Time (sec)"
, ROUND(SUM(ash.tm_delta_db_time)/1000000) "DB Time (sec)"
, ROUND(SUM(ash.delta_time)/1000000) "Time (sec)"
, SUM(ash.delta_read_io_requests) "PhyRead Requests"
, ROUND(SUM(ash.delta_read_io_bytes)/1024/1024/1024) "PhyRead (GB)"
, SUM(ash.delta_write_io_requests) "PhyWrite Requests"
, ROUND(SUM(ash.delta_write_io_bytes)/1024/1024/1024) "PhyWrite (GB)"
, ROUND(SUM(ash.delta_interconnect_io_bytes)/1024/1024/1024) "InterConnectIO (GB)"
, ROUND(SUM(ash.pga_allocated)/1024/1024) "PGA (MB)"
, ROUND(SUM(ash.temp_space_allocated)/1024/1024) "TempSpace (MB)"
FROM dba_hist_snapshot s
, dba_hist_active_sess_history ash
, dba_users u
, dba_hist_service_name sn
, v$database d
WHERE d.dbid = s.dbid
AND s.dbid = ash.dbid
AND s.instance_number = ash.instance_number
and s.snap_id = ash.snap_id
AND ash.dbid = sn.dbid
and ash.service_hash = sn.service_name_hash
AND ash.user_id = u.user_id
-- and s.end_interval_time between TO_TIMESTAMP('2012-06-09 17:00:00','YYYY-MM-DD HH24:MI:SS') and TO_TIMESTAMP('2012-06-09 23:00:07','YYYY-MM-DD HH24:MI:SS')
--and ash.sample_time between TO_TIMESTAMP('2013-02-19 17:00:00','YYYY-MM-DD HH24:MI:SS') and TO_TIMESTAMP('2013-02-19 17:51:00','YYYY-MM-DD HH24:MI:SS')
and ash.sample_time > systimestamp - 10
-- AND ash.instance_number = '5'
-- AND ash.session_id = '2471'
-- AND ash.session_serial# = '38281'
-- and ash.service_hash = '1859414386'
-- and ash.sql_id like '9m4qqj5uzzn3k'
-- AND ash.top_level_sql_id LIKE '%'
and u.username like 'username'
-- and upper(ash.machine) like upper('%beta%')
-- AND upper(sn.service_name) like upper('SYS$USERS')
-- and upper(ash.program) like upper('%SQL%')
-- and upper(ash.module) like upper('%PiNT%')
GROUP BY ash.sql_id
-- ORDER BY SUM(ash.tm_delta_time) nulls last
-- ORDER BY SUM(ash.tm_delta_cpu_time) nulls last
-- ORDER BY SUM(ash.tm_delta_db_time) nulls last
-- ORDER BY SUM(ash.delta_time) nulls last
-- ORDER BY SUM(ash.delta_read_io_requests) nulls last
-- ORDER BY SUM(ash.delta_read_io_bytes) nulls last
-- ORDER BY SUM(ash.delta_write_io_requests) nulls last
-- ORDER BY SUM(ash.delta_write_io_bytes) nulls last
-- ORDER BY SUM(ash.delta_interconnect_io_bytes) nulls last
-- ORDER BY SUM(ash.pga_allocated) nulls last
ORDER BY SUM(ash.temp_space_allocated) desc nulls last
;
SELECT ash.sample_time
, ash.inst_id I#
, ash.session_id
, ash.session_serial#
, ash.session_type
, sn.name service_name
, u.username
, ash.machine
, ash.program
, ash.sql_opname
, ash.force_matching_signature
, ash.sql_id
, ash.sql_child_number
, ash.sql_plan_hash_value
, ash.top_level_sql_id
, ash.sql_exec_start
-- , ash.plsql_entry_object_id
-- , ash.plsql_entry_subprogram_id
-- , ash.plsql_object_id
-- , ash.plsql_subprogram_id
, NVL2(p2.owner,p2.owner || '.' || p2.object_name || nvl2(p2.procedure_name,'.' || p2.procedure_name, ''),'') plsql_program
, NVL2(p1.owner, p1.owner || '.' || p1.object_name || nvl2(p1.procedure_name,'.' || p1.procedure_name, ''),'') plsql_entry_program
, ash.module
, ash.action
, ash.event
, ash.blocking_session_status
, ash.blocking_session
, ash.blocking_session_serial#
, ash.blocking_inst_id
, ash.blocking_hangchain_info
, ash.TM_DELTA_TIME
, ash.TM_DELTA_CPU_TIME
, ash.TM_DELTA_DB_TIME
, ash.DELTA_TIME
, ash.DELTA_READ_IO_REQUESTS
, ash.DELTA_WRITE_IO_REQUESTS
, ash.DELTA_READ_IO_BYTES
, ash.DELTA_WRITE_IO_BYTES
, ash.DELTA_INTERCONNECT_IO_BYTES
, ash.PGA_ALLOCATED
, ash.TEMP_SPACE_ALLOCATED
FROM gv$active_session_history ash
, dba_users u
, dba_services sn
, dba_procedures p1
, dba_procedures p2
WHERE ash.service_hash = sn.name_hash
AND ash.user_id = u.user_id
AND ash.plsql_entry_object_id = p1.object_id (+)
AND ash.plsql_entry_subprogram_id = p1.subprogram_id (+)
AND ash.plsql_object_id = p2.object_id (+)
AND ash.plsql_subprogram_id = p2.subprogram_id (+)
--and ash.sample_time between TO_TIMESTAMP('2012-09-18 23:00:00','YYYY-MM-DD HH24:MI:SS') and TO_TIMESTAMP('2012-09-19 15:00:00','YYYY-MM-DD HH24:MI:SS')
and ash.sample_time > systimestamp - 5/24
-- AND ash.inst_id = '2'
-- AND ash.session_id = '1781'
-- AND ash.session_serial# = '12265'
-- and ash.service_hash = '1859414386'
-- and ash.sql_id like '9m4qqj5uzzn3k'
-- and ash.sql_id IS NOT NULL
-- AND ash.top_level_sql_id LIKE '0bxc9a7r0vczs'
-- and u.username like '%ATTRIB%'
-- and upper(ash.machine) like upper('%beta%')
-- AND upper(sn.name) like upper('SYS$USERS') -- service_name
-- and upper(ash.program) like upper('%SQL%')
-- and upper(ash.module) like upper('%PiNT%')
-- AND ash.inst_id = 3
-- AND ash.SESSION_ID = 1057
-- AND ash.SESSION_SERIAL# = 10989
-- ORDER BY s.end_interval_time
ORDER BY ash.sample_time
;
------------------------------------------
-- AWR ASH Largest TEMP and PGA Users
------------------------------------------
SELECT service_name, username, max(temp_space_allocated), max(PGA_ALLOCATED)
FROM
(
SELECT ash.instance_number, ash.session_id, session_serial#, sn.service_name, u.username, max(NVL(temp_space_allocated,0)) temp_space_allocated, max(NVL(PGA_ALLOCATED,0)) PGA_ALLOCATED
FROM dba_hist_snapshot s
, dba_hist_active_sess_history ash
, dba_users u
, dba_hist_service_name sn
, v$database d
WHERE d.dbid = s.dbid
AND s.dbid = ash.dbid
AND s.instance_number = ash.instance_number
and s.snap_id = ash.snap_id
and s.end_interval_time between TO_TIMESTAMP('2012-04-01 00:04:25','YYYY-MM-DD HH24:MI:SS') and TO_TIMESTAMP('2012-05-03 00:49:30','YYYY-MM-DD HH24:MI:SS')
AND ash.dbid = sn.dbid
and ash.service_hash = sn.service_name_hash
AND ash.user_id = u.user_id
-- AND sn.service_name LIKE '%%'
-- and ash.sql_id = '7c3kd9m29awf8'
-- and ash.program = 'BumPlusCacheJob.exe'
group by ash.instance_number, ash.session_id,session_serial#, sn.service_name, u.username
)
GROUP BY service_name, username
order by max(temp_space_allocated) desc nulls last
--order by max(PGA_ALLOCATED) desc nulls last
;
select ash.instance_number
, ash.session_id
, ash.sql_id
, ash.SQL_PLAN_HASH_VALUE
, ash.SQL_EXEC_ID
, ash.sql_exec_start
, max(ash.sample_time) end_time
--, ROUNd(max(ash.wait_time)/100/60) "dur(min)"
, ( max(ash.sample_time) - ash.sql_exec_start) "Duration (D hh:mm:ss.fff)"
FROM dba_hist_snapshot s
, dba_hist_active_sess_history ash
, dba_users u
, dba_services sn
WHERE s.dbid = ash.dbid
AND s.instance_number = ash.instance_number
and s.snap_id = ash.snap_id
and s.end_interval_time between TO_TIMESTAMP('2012-04-01 00:04:25','YYYY-MM-DD HH24:MI:SS') and TO_TIMESTAMP('2012-05-03 00:49:30','YYYY-MM-DD HH24:MI:SS')
and ash.service_hash = '1859414386'
and ash.sql_id = '7c3kd9m29awf8'
and ash.program = 'BumPlusCacheJob.exe'
--ORDER BY ash.WAIT_TIME desc
group by ash.instance_number, ash.session_id
,ash.sql_id,ash.SQL_PLAN_HASH_VALUE, ash.SQL_EXEC_ID, ash.sql_exec_start
order by ( max(ash.sample_time) - ash.sql_exec_start) desc nulls last
, ash.sql_exec_start desc nulls last
;

105
vg/awr_report.sql Normal file
View File

@@ -0,0 +1,105 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Generate AWR Report for RAC
* Parameters : 1 - From Time ( YYYY-MM-DD HH24:MI:SS format) (Default = sysdate-1)
* 2 - To Time ( YYYY-MM-DD HH24:MI:SS format) (Default = sysdate)
* 3 - Instance ID List separated by comma( default value - All instances)
* 4 - Report Type ( text/html, default value - html)
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 17-Feb-14 Vishal Gupta Changed order of input parameters
* 18-Oct-12 Vishal Gupta Created
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE FROM_TIME
UNDEFINE TO_TIME
UNDEFINE REPORT_TYPE
UNDEFINE INST_ID_LIST
UNDEFINE begin_snap_id
UNDEFINE end_snap_id
--UNDEFINE DBID
DEFINE FROM_TIME="&&1"
DEFINE TO_TIME="&&2"
DEFINE INST_ID_LIST="&&3"
DEFINE REPORT_TYPE="&&4"
DEFINE begin_snap_id=""
DEFINE end_snap_id=""
--DEFINE DBID=""
COLUMN _FROM_TIME NEW_VALUE FROM_TIME NOPRINT
COLUMN _TO_TIME NEW_VALUE TO_TIME NOPRINT
COLUMN _INST_ID_LIST NEW_VALUE INST_ID_LIST NOPRINT
COLUMN _REPORT_TYPE NEW_VALUE REPORT_TYPE NOPRINT
set term off
SELECT DECODE('&&FROM_TIME','',to_char(sysdate - 1 - (1/1440),'YYYY-MM-DD HH24:MI:SS'),'&&FROM_TIME') "_FROM_TIME"
, DECODE('&&TO_TIME','',to_char(sysdate + (1/1440),'YYYY-MM-DD HH24:MI:SS'),'&&TO_TIME') "_TO_TIME"
, DECODE('&&INST_ID_LIST','',NULL,'&&INST_ID_LIST') "_INST_ID_LIST"
, DECODE('&&REPORT_TYPE','','html','&&REPORT_TYPE') "_REPORT_TYPE"
FROM DUAL;
set term on
PROMPT
PROMPT ***********************************************************************
PROMPT * A W R R E P O R T ( R A C )
PROMPT *
PROMPT * Input Parameters
PROMPT * - From Timestamp = '&&FROM_TIME' ( YYYY-MM-DD HH24:MI:SS format)
PROMPT * - To Timestamp = '&&TO_TIME' ( YYYY-MM-DD HH24:MI:SS format)
PROMPT * - INST_ID_LIST = '&&INST_ID_LIST'
PROMPT * - Report Type = '&&REPORT_TYPE'
PROMPT ***********************************************************************
COLUMN _begin_snap_id NEW_VALUE begin_snap_id NOPRINT
COLUMN _end_snap_id NEW_VALUE end_snap_id NOPRINT
COLUMN _dbid NEW_VALUE dbid NOPRINT
set term off
SELECT min(s.snap_id) "_begin_snap_id"
, max(s.snap_id) "_end_snap_id"
, d.dbid "_dbid"
FROM dba_hist_snapshot s, v$database d
WHERE d.dbid = s.dbid
AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&FROM_TIME','YYYY-MM-DD HH24:MI:SS')
AND TO_TIMESTAMP('&&to_time','YYYY-MM-DD HH24:MI:SS')
GROUP BY d.dbid
;
set term on
set pages 0
set lines 1500
PROMPT spooling to file &&_CONNECT_IDENTIFIER._awr_report.html
set term off
spool &&_CONNECT_IDENTIFIER._awr_report.html
SELECT * from table(dbms_workload_repository.awr_global_report_html
( l_dbid => &&DBID
, l_inst_num => '&&INST_ID_LIST'
, l_bid => &&begin_snap_id
, l_eid => &&end_snap_id
, l_options => 1 -- Currently not used used (as of v11.2.0.3)
)
);
spool off
set term on
PROMPT report generated as &&_CONNECT_IDENTIFIER._awr_report.html file.
host &&_CONNECT_IDENTIFIER._awr_report.html
set pages 5000
@@footer

147
vg/awr_segstat.sql Normal file
View File

@@ -0,0 +1,147 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display segment statistics from AWR
* Parameters : 1 - Number of Days
* 2 - Owner
* 3 - Object Name
* 4 - SubObject Name
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 14-Sep-12 Vishal Gupta Created
*
*
*/
/************************************
* INPUT PARAMETERS
************************************/
DEFINE no_of_days="&&1"
DEFINE owner="&&2"
DEFINE object_name="&&3"
DEFINE subobject_name="&&4"
COLUMN _no_of_days NEW_VALUE no_of_days NOPRINT
COLUMN _owner NEW_VALUE owner NOPRINT
COLUMN _object_name NEW_VALUE object_name NOPRINT
COLUMN _subobject_name NEW_VALUE subobject_name NOPRINT
COLUMN _object_type NEW_VALUE object_type NOPRINT
set term off
SELECT DECODE('&&no_of_days','','30','&&no_of_days') "_no_of_days"
, DECODE('&&owner','','%',UPPER('&&owner')) "_owner"
, DECODE('&&object_name','','%',UPPER('&&object_name')) "_object_name"
, DECODE('&&subobject_name','','%',UPPER('&&subobject_name')) "_subobject_name"
FROM DUAL
;
set term on
PROMPT ************************************************************************
PROMPT * AWR Segment Statistics
PROMPT *
PROMPT * Input Parameters
PROMPT * - NoOfDays - "&&no_of_days"
PROMPT * - Owner - "&&owner"
PROMPT * - ObjectName - "&&object_name"
PROMPT * - SubObjectName - "&&subobject_name"
PROMPT ************************************************************************
COLUMN end_interval_time HEADING "SnapTime" FORMAT a15
COLUMN object HEADING "Object" FORMAT a40
COLUMN subobject_name HEADING "SubObject" FORMAT a25
COLUMN object_type HEADING "ObjectType" FORMAT a20
COLUMN tablespace_name HEADING "Tablespace|Name" FORMAT a15
COLUMN partition_type HEADING "Partition|Type" FORMAT a10
COLUMN changes_delta HEADING "Changes|Delta|(MB)" FORMAT 999,999,999
COLUMN used_delta HEADING "Used|Delta|(MB)" FORMAT 999,999,999
COLUMN allocated_delta HEADING "Alloc|Delta|(MB)" FORMAT 999,999,999
COLUMN itl_waits_delta HEADING "ITL|Waits|Delta" FORMAT 999,999,999
COLUMN row_lock_waits_delta HEADING "Row|Lock|Waits|Delta" FORMAT 999,999,999
COLUMN physical_reads_delta HEADING "Phy|Reads|Delta" FORMAT 999,999,999
COLUMN physical_writes_delta HEADING "Phy|Write|Delta" FORMAT 999,999,999
COLUMN physical_reads_direct_delta HEADING "Phy|Reads|Direct|Delta" FORMAT 999,999,999
COLUMN physical_writes_direct_delta HEADING "Phy|Writes|Direct|Delta" FORMAT 999,999,999
COLUMN gc_cr_blocks_served_delta HEADING "GC CR|Blocks|Served|Delta" FORMAT 999,999,999
COLUMN gc_cu_blocks_served_delta HEADING "GC CU|Blocks|Served|Delta" FORMAT 999,999,999
COLUMN gc_buffer_busy_delta HEADING "GC|Buffer|Busy|Delta" FORMAT 999,999,999
COLUMN gc_cr_blocks_received_delta HEADING "GC CR|Blocks|Recvd|Delta" FORMAT 999,999,999
COLUMN gc_cu_blocks_received_delta HEADING "GC CU|Blocks|Recvd|Delta" FORMAT 999,999,999
COLUMN table_scans_delta HEADING "Table|Scans|Delta" FORMAT 999,999,999
COLUMN chain_row_excess_delta HEADING "Chain|Row|Excess|Delta" FORMAT 999,999,999
COLUMN physical_read_requests_delta HEADING "Phy|Read|Reqs|Delta" FORMAT 999,999,999
COLUMN physical_write_requests_delta HEADING "Phy|Write|Reqs|Delta" FORMAT 999,999,999
COLUMN optimized_physical_reads_delta HEADING "Opt'z|Phy|Reads||Delta" FORMAT 999,999,999
COLUMN changes_total HEADING "Changes|Total|(MB)" FORMAT 999,999,999
COLUMN used_total HEADING "Used|Total|(MB)" FORMAT 999,999,999
COLUMN allocated_total HEADING "Alloc|Total|(MB)" FORMAT 999,999,999
COLUMN itl_waits_total HEADING "ITL|Waits|Total" FORMAT 999,999,999,999
set lines 4000
SELECT /*+ parallel(8) */
to_char(TRUNC(s.end_interval_time,'MI'),'DD-MON-YY HH24:MI') end_interval_time
--, o.owner || '.' || o.object_name || NVL2(o.subobject_name,':' || o.subobject_name,'') object
, o.owner || '.' || o.object_name object
--, o.subobject_name
--, o.object_type
--, o.tablespace_name
--, o.partition_type
, ROUND(SUM(ss.db_block_changes_delta * p.value)/1024/1024) changes_delta
, ROUND(SUM(ss.space_used_delta )/1024/1024) used_delta
, ROUND(SUM(ss.space_allocated_delta )/1024/1024) allocated_delta
, ROUND(SUM(ss.itl_waits_delta )) itl_waits_delta
, ROUND(SUM(ss.row_lock_waits_delta )) row_lock_waits_delta
, ROUND(SUM(ss.physical_reads_delta )) physical_reads_delta
, ROUND(SUM(ss.physical_writes_delta )) physical_writes_delta
, ROUND(SUM(ss.physical_reads_direct_delta )) physical_reads_direct_delta
, ROUND(SUM(ss.physical_writes_direct_delta )) physical_writes_direct_delta
-- , ROUND(SUM(ss.gc_cr_blocks_served_delta )) gc_cr_blocks_served_delta
-- , ROUND(SUM(ss.gc_cu_blocks_served_delta )) gc_cu_blocks_served_delta
, ROUND(SUM(ss.gc_buffer_busy_delta )) gc_buffer_busy_delta
, ROUND(SUM(ss.gc_cr_blocks_received_delta )) gc_cr_blocks_received_delta
, ROUND(SUM(ss.gc_cu_blocks_received_delta )) gc_cu_blocks_received_delta
, ROUND(SUM(ss.table_scans_delta )) table_scans_delta
, ROUND(SUM(ss.chain_row_excess_delta )) chain_row_excess_delta
, ROUND(SUM(ss.physical_read_requests_delta )) physical_read_requests_delta
, ROUND(SUM(ss.physical_write_requests_delta )) physical_write_requests_delta
, ROUND(SUM(ss.optimized_physical_reads_delta )) optimized_physical_reads_delta
-- , ROUND(MAX(ss.db_block_changes_total * p.value)/1024/1024) changes_total
-- , ROUND(MAX(ss.space_used_total )/1024/1024) used_total
-- , ROUND(MAX(ss.space_allocated_total )/1024/1024) allocated_total
-- , ROUND(SUM(ss.itl_waits_total )) itl_waits_total
FROM v$database d
JOIN dba_hist_snapshot s ON d.dbid = s.dbid
JOIN sys.WRH$_SEG_STAT ss ON s.dbid = ss.dbid
AND s.instance_number = ss.instance_number
AND s.snap_id = ss.snap_id
JOIN v$system_parameter p ON p.name = 'db_block_size'
JOIN dba_hist_seg_stat_obj o ON o.dbid = ss.dbid
AND o.ts# = ss.ts#
AND o.obj# = ss.obj#
AND o.dataobj# = ss.dataobj#
WHERE s.end_interval_time > systimestamp - INTERVAL '&&no_of_days' DAY
AND o.owner LIKE '&&owner' ESCAPE '\'
AND o.object_name LIKE '&&object_name' ESCAPE '\'
AND NVL(o.subobject_name,'x') LIKE '&&subobject_name' ESCAPE '\'
GROUP BY ss.dbid
, TRUNC(s.end_interval_time,'MI')
--, o.owner || '.' || o.object_name || NVL2(o.subobject_name,':' || o.subobject_name,'')
, o.owner || '.' || o.object_name
--, o.subobject_name
--, o.object_type
--, o.tablespace_name
--, o.partition_type
ORDER BY TRUNC(s.end_interval_time,'MI')
;
@@footer

152
vg/awr_service_stats.sql Normal file
View File

@@ -0,0 +1,152 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display Service statistics from AWR
* Parameters : 1 - Statistic Name (Use % as wildcard, escape with \)
* 2 - SERVICE_NAME (Use % as wildcard, escape with \)
* 3 - From timestamp (YYYY-MM-DD HH24:MI:SS format, Default value sysdate - 2 hours)
* 4 - To timstamp (YYYY-MM-DD HH24:MI:SS format, Default value sysdate)
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 19-Mar-12 Vishal Gupta Intial version
* 15-May-12 Vishal Gupta Change from/to relative hours to absolute timestamp
*
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE service_name
UNDEFINE stat_name
UNDEFINE from_timestamp
UNDEFINE to_timestamp
DEFINE stat_name="&&1"
DEFINE service_name="&&2"
DEFINE from_timestamp="&&3"
DEFINE to_timestamp="&&4"
set term off
COLUMN _stat_name NEW_VALUE stat_name NOPRINT
COLUMN _service_name NEW_VALUE service_name NOPRINT
COLUMN _from_timestamp NEW_VALUE from_timestamp NOPRINT
COLUMN _to_timestamp NEW_VALUE to_timestamp NOPRINT
SELECT UPPER(DECODE('&&stat_name','','physical reads','&&stat_name')) "_stat_name"
, UPPER(DECODE('&&service_name','','%','&&service_name')) "_service_name"
, UPPER(DECODE('&&from_timestamp','',TO_CHAR(sysdate - 120/(24*60),'YYYY-MM-DD HH24:MI:SS'),'&&from_timestamp')) "_from_timestamp"
, UPPER(DECODE('&&to_timestamp','',TO_CHAR(sysdate ,'YYYY-MM-DD HH24:MI:SS'),'&&to_timestamp')) "_to_timestamp"
FROM DUAL;
set term on
/************************************
* CONFIGURATION PARAMETERS
************************************/
DEFINE FORMAT=999,999,999
DEFINE DIVIDER="1"
DEFINE HEADING="#s"
--DEFINE DIVIDER="1000"
--DEFINE HEADING="#1000s"
--DEFINE DIVIDER="1000000"
--DEFINE HEADING="#1000000s"
DEFINE TOTAL_FORMAT=999,999,999,999
DEFINE TOTAL_HEADING="#1000s"
PROMPT ***************************************************************************************************
PROMPT * AWR Service Statistics (Delta)
PROMPT *
PROMPT * Input Parameters
PROMPT * - Service Name = '&&service_name'
PROMPT * - Statistic Name = '&&stat_name'
PROMPT * - From Timestamp = '&&from_timestamp'
PROMPT * - To Timestamp = '&&to_timestamp'
PROMPT ***************************************************************************************************
COLUMN end_interval_time HEADING "SnapTime" FORMAT a15
COLUMN service_name HEADING "ServiceName" FORMAT a25
COLUMN stat_name HEADING "StatisticName" FORMAT a25
COLUMN value_clusterwide HEADING "RAC Wide|Value|(&&TOTAL_HEADING)" FORMAT &&TOTAL_FORMAT
COLUMN value_inst1 HEADING "Inst 1|Value|(&&HEADING)" FORMAT &&FORMAT
COLUMN value_inst2 HEADING "Inst 2|Value|(&&HEADING)" FORMAT &&FORMAT
COLUMN value_inst3 HEADING "Inst 3|Value|(&&HEADING)" FORMAT &&FORMAT
COLUMN value_inst4 HEADING "Inst 4|Value|(&&HEADING)" FORMAT &&FORMAT
COLUMN value_inst5 HEADING "Inst 5|Value|(&&HEADING)" FORMAT &&FORMAT
COLUMN value_inst6 HEADING "Inst 6|Value|(&&HEADING)" FORMAT &&FORMAT
COLUMN value_inst7 HEADING "Inst 7|Value|(&&HEADING)" FORMAT &&FORMAT
COLUMN value_inst8 HEADING "Inst 8|Value|(&&HEADING)" FORMAT &&FORMAT
BREAK ON REPORT
COMPUTE SUM LABEL 'Total' OF value_clusterwide FORMAT &&TOTAL_FORMAT ON REPORT
COMPUTE SUM LABEL 'Total' OF value_inst1 FORMAT &&TOTAL_FORMAT ON REPORT
COMPUTE SUM LABEL 'Total' OF value_inst2 FORMAT &&TOTAL_FORMAT ON REPORT
COMPUTE SUM LABEL 'Total' OF value_inst3 FORMAT &&TOTAL_FORMAT ON REPORT
COMPUTE SUM LABEL 'Total' OF value_inst4 FORMAT &&TOTAL_FORMAT ON REPORT
COMPUTE SUM LABEL 'Total' OF value_inst5 FORMAT &&TOTAL_FORMAT ON REPORT
COMPUTE SUM LABEL 'Total' OF value_inst6 FORMAT &&TOTAL_FORMAT ON REPORT
COMPUTE SUM LABEL 'Total' OF value_inst7 FORMAT &&TOTAL_FORMAT ON REPORT
COMPUTE SUM LABEL 'Total' OF value_inst8 FORMAT &&TOTAL_FORMAT ON REPORT
WITH snap as
(
SELECT s.dbid
, s.instance_number
, s.snap_id
, LAG (s.snap_id) OVER(PARTITION BY s.dbid, s.instance_number ORDER BY s.dbid, s.instance_number, s.snap_id) prev_snap_id
, s.end_interval_time
FROM dba_hist_snapshot s
, v$database d
WHERE d.dbid = s.dbid
AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&from_timestamp','YYYY-MM-DD HH24:MI:SS')
AND TO_TIMESTAMP('&&to_timestamp','YYYY-MM-DD HH24:MI:SS')
)
SELECT TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI') end_interval_time
, ss.service_name
, ss.stat_name
, SUM( ss.value-LEAST(ss_prev.value,ss.value))/&&DIVIDER value_clusterwide
, SUM(DECODE(ss.instance_number, 1, ss.value-LEAST(ss_prev.value,ss.value), 0))/&&DIVIDER value_inst1
, SUM(DECODE(ss.instance_number, 2, ss.value-LEAST(ss_prev.value,ss.value), 0))/&&DIVIDER value_inst2
, SUM(DECODE(ss.instance_number, 3, ss.value-LEAST(ss_prev.value,ss.value), 0))/&&DIVIDER value_inst3
, SUM(DECODE(ss.instance_number, 4, ss.value-LEAST(ss_prev.value,ss.value), 0))/&&DIVIDER value_inst4
, SUM(DECODE(ss.instance_number, 5, ss.value-LEAST(ss_prev.value,ss.value), 0))/&&DIVIDER value_inst5
, SUM(DECODE(ss.instance_number, 6, ss.value-LEAST(ss_prev.value,ss.value), 0))/&&DIVIDER value_inst6
, SUM(DECODE(ss.instance_number, 7, ss.value-LEAST(ss_prev.value,ss.value), 0))/&&DIVIDER value_inst7
, SUM(DECODE(ss.instance_number, 8, ss.value-LEAST(ss_prev.value,ss.value), 0))/&&DIVIDER value_inst8
FROM snap s
, dba_hist_service_stat ss
, dba_hist_service_stat ss_prev
WHERE s.dbid = ss.dbid
AND s.instance_number = ss.instance_number
AND s.snap_id = ss.snap_id
AND s.dbid = ss_prev.dbid
AND s.instance_number = ss_prev.instance_number
AND s.prev_snap_id = ss_prev.snap_id
AND ss.service_name = ss_prev.service_name
AND ss.stat_name = ss_prev.stat_name
AND UPPER(ss.service_name) LIKE UPPER('&&service_name') ESCAPE '\'
AND UPPER(ss.stat_name) LIKE UPPER('&&stat_name') ESCAPE '\'
GROUP BY TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI')
, ss.service_name
, ss.stat_name
ORDER BY TO_DATE(TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI'),'DD-MON-YY HH24:MI')
, ss.service_name
, ss.stat_name
;
UNDEFINE service_name
UNDEFINE stat_name
UNDEFINE from_timestamp
UNDEFINE to_timestamp
@@footer

143
vg/awr_service_waits.sql Normal file
View File

@@ -0,0 +1,143 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display Service Waits from AWR
* Parameters : 1 - SERVICE_NAME (Use % as wildcard, escape with \)
* 2 - Instance (Use % for all instances in the RAC database)
* 3 - From timestamp (YYYY-MM-DD HH24:MI:SS format)
* 4 - To timstamp (YYYY-MM-DD HH24:MI:SS format)
*
* Wait Classes are as follows:-
* Concurrency
* User I/O
* System I/O
* Administrative
* Other
* Configuration
* Scheduler
* Cluster
* Application
* Queueing
* Idle
* Network
* Commit
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 17-May-12 Vishal Gupta Intial version
*
*/
DEFINE service_name="&&1"
DEFINE instance_number="&2"
DEFINE from_timestamp="&3"
DEFINE to_timestamp="&4"
DEFINE COUNT_FORMAT=999,999
--DEFINE COUNT_DIVIDER="1"
--DEFINE COUNT_HEADING="(#)"
DEFINE COUNT_DIVIDER="1000"
DEFINE COUNT_HEADING="#1000"
DEFINE TIME_FORMAT=999,999
DEFINE TIME_DIVIDER="1"
DEFINE TIME_HEADING="sec"
--DEFINE TIME_DIVIDER="1000"
--DEFINE TIME_HEADING="1000s"
DEFINE TOTAL_FORMAT=999,999,999,999
DEFINE TOTAL_DIVIDER="1000"
DEFINE TOTAL_HEADING="'1000"
COLUMN end_interval_time HEADING "SnapTime" FORMAT a15
COLUMN service_name HEADING "ServiceName" FORMAT a25
COLUMN Concurrency_total_waits HEADING "Concurr|Total|Waits|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN user_io_total_waits HEADING "UserIO|Total|Waits|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN system_io_total_waits HEADING "SystemIO|Total|Waits|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN application_total_waits HEADING "App|Total|Waits|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN network_total_waits HEADING "Network|Total|Waits|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN commit_total_waits HEADING "Commit|Total|Waits|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN idle_total_waits HEADING "Idle|Total|Waits|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN cluster_total_waits HEADING "Cluster|Total|Waits|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN scheduler_total_waits HEADING "Scheduler|Total|Waits|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN Concurrency_time_waited HEADING "Concurr|Timel|Waited|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN user_io_time_waited HEADING "UserIO|Timel|Waited|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN system_io_time_waited HEADING "SystemIO|Timel|Waited|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN application_time_waited HEADING "App|Timel|Waited|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN network_time_waited HEADING "Network|Timel|Waited|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN commit_time_waited HEADING "Commit|Timel|Waited|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN idle_time_waited HEADING "Idle|Timel|Waited|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN cluster_time_waited HEADING "Cluster|Timel|Waited|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN scheduler_time_waited HEADING "Scheduler|Timel|Waited|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
WITH snap as
(
SELECT s.dbid
, s.instance_number
, s.snap_id
, LAG (s.snap_id) OVER(PARTITION BY s.dbid, s.instance_number ORDER BY s.dbid, s.instance_number, s.snap_id) prev_snap_id
, s.end_interval_time
FROM dba_hist_snapshot s
WHERE s.end_interval_time BETWEEN TO_TIMESTAMP('&&from_timestamp','YYYY-MM-DD HH24:MI:SS')
AND TO_TIMESTAMP('&&to_timestamp','YYYY-MM-DD HH24:MI:SS')
)
SELECT TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI') end_interval_time
, swc.service_name
-- Total Waits in centisecs
, SUM(DECODE(swc.wait_class, 'Concurrency', (swc.total_waits-LEAST(swc_prev.total_waits,swc.total_waits)), 0))/&&COUNT_DIVIDER Concurrency_total_waits
, SUM(DECODE(swc.wait_class, 'User I/O', (swc.total_waits-LEAST(swc_prev.total_waits,swc.total_waits)), 0))/&&COUNT_DIVIDER user_io_total_waits
, SUM(DECODE(swc.wait_class, 'System I/O', (swc.total_waits-LEAST(swc_prev.total_waits,swc.total_waits)), 0))/&&COUNT_DIVIDER system_io_total_waits
, SUM(DECODE(swc.wait_class, 'Application', (swc.total_waits-LEAST(swc_prev.total_waits,swc.total_waits)), 0))/&&COUNT_DIVIDER application_total_waits
, SUM(DECODE(swc.wait_class, 'Network', (swc.total_waits-LEAST(swc_prev.total_waits,swc.total_waits)), 0))/&&COUNT_DIVIDER network_total_waits
, SUM(DECODE(swc.wait_class, 'Commit', (swc.total_waits-LEAST(swc_prev.total_waits,swc.total_waits)), 0))/&&COUNT_DIVIDER commit_total_waits
, SUM(DECODE(swc.wait_class, 'Idle', (swc.total_waits-LEAST(swc_prev.total_waits,swc.total_waits)), 0))/&&COUNT_DIVIDER idle_total_waits
, SUM(DECODE(swc.wait_class, 'Cluster', (swc.total_waits-LEAST(swc_prev.total_waits,swc.total_waits)), 0))/&&COUNT_DIVIDER cluster_total_waits
, SUM(DECODE(swc.wait_class, 'Scheduler', (swc.total_waits-LEAST(swc_prev.total_waits,swc.total_waits)), 0))/&&COUNT_DIVIDER scheduler_total_waits
-- Time Waited in centisecs
, SUM(DECODE(swc.wait_class, 'Concurrency', (swc.time_waited-LEAST(swc_prev.time_waited,swc.time_waited)), 0))/100/&&TIME_DIVIDER Concurrency_time_waited
, SUM(DECODE(swc.wait_class, 'User I/O', (swc.time_waited-LEAST(swc_prev.time_waited,swc.time_waited)), 0))/100/&&TIME_DIVIDER user_io_time_waited
, SUM(DECODE(swc.wait_class, 'System I/O', (swc.time_waited-LEAST(swc_prev.time_waited,swc.time_waited)), 0))/100/&&TIME_DIVIDER system_io_time_waited
, SUM(DECODE(swc.wait_class, 'Application', (swc.time_waited-LEAST(swc_prev.time_waited,swc.time_waited)), 0))/100/&&TIME_DIVIDER application_time_waited
, SUM(DECODE(swc.wait_class, 'Network', (swc.time_waited-LEAST(swc_prev.time_waited,swc.time_waited)), 0))/100/&&TIME_DIVIDER network_time_waited
, SUM(DECODE(swc.wait_class, 'Commit', (swc.time_waited-LEAST(swc_prev.time_waited,swc.time_waited)), 0))/100/&&TIME_DIVIDER commit_time_waited
, SUM(DECODE(swc.wait_class, 'Idle', (swc.time_waited-LEAST(swc_prev.time_waited,swc.time_waited)), 0))/100/&&TIME_DIVIDER idle_time_waited
, SUM(DECODE(swc.wait_class, 'Cluster', (swc.time_waited-LEAST(swc_prev.time_waited,swc.time_waited)), 0))/100/&&TIME_DIVIDER cluster_time_waited
, SUM(DECODE(swc.wait_class, 'Scheduler', (swc.time_waited-LEAST(swc_prev.time_waited,swc.time_waited)), 0))/100/&&TIME_DIVIDER scheduler_time_waited
FROM snap s
, dba_hist_service_wait_class swc
, dba_hist_service_wait_class swc_prev
WHERE s.dbid = swc.dbid
AND s.instance_number = swc.instance_number
AND s.snap_id = swc.snap_id
AND s.dbid = swc_prev.dbid
AND s.instance_number = swc_prev.instance_number
AND s.prev_snap_id = swc_prev.snap_id
AND swc.service_name = swc_prev.service_name
AND swc.wait_class = swc_prev.wait_class
AND UPPER(swc.service_name) LIKE UPPER('&&service_name') ESCAPE '\'
AND swc.instance_number LIKE '&&instance_number'
GROUP BY TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI')
, swc.service_name
ORDER BY TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI')
, swc.service_name
;
PROMPT '&&from_timestamp'
UNDEFINE service_name
UNDEFINE instance_number
UNDEFINE from_timestamp
UNDEFINE to_timestamp
@@footer

View File

@@ -0,0 +1,21 @@
@@header
SELECT TO_CHAR(A.END_INTERVAL_TIME,'DD-Mon-YY HH24:MI:SS') "Time"
, ROUND(sum(b.bytes)/1024/1024) total
, ROUND(sum(DECODE(b.pool,null, DECODE(b.name,'buffer_cache',b.bytes,0),0))/1024/1024) buffercache
, ROUND(sum(DECODE(b.pool,'shared pool', b.bytes,0))/1024/1024) sharedpooltotal
, ROUND(sum(DECODE(b.name,'free memory',b.bytes,0))/1024/1024) sharedpoolfree
, ROUND(sum(DECODE(b.pool,'java pool', b.bytes,0))/1024/1024) javapool
, ROUND(sum(DECODE(b.pool,'large pool', b.bytes,0))/1024/1024) largepool
, ROUND(sum(DECODE(b.pool,'streams pool', b.bytes,0))/1024/1024) streamspool
, ROUND(sum(DECODE(b.pool,null, DECODE(b.name,'fixed_sga',b.bytes,0),0))/1024/1024) fixedsga
, ROUND(sum(DECODE(b.pool,null, DECODE(b.name,'log_buffer',b.bytes,0),0))/1024/1024) logbuffer
FROM v$database d
JOIN DBA_HIST_SNAPSHOT A ON A.DBID = d.DBID
JOIN DBA_HIST_SGAstat B ON A.DBID = B.DBID AND A.INSTANCE_NUMBER = B.INSTANCE_NUMBER AND A.SNAP_ID = B.SNAP_ID
WHERE 1=1
and a.END_INTERVAL_TIME > sysdate - 3
group by a.end_interval_time
ORDER BY a.end_interval_time ASC;
@@footer

116
vg/awr_sid_details.sql Normal file
View File

@@ -0,0 +1,116 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display Session details from AWR ASH data
* Compatibility : 10.1 and above
* Parameters : 1 - SID
* 2 - INST_ID (optional, default to 1)
* 3 - Serial# (Default %)
* 4 - Number of hours (Default 24)
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 31-Dec-15 Vishal Gupta Added duration in the output
* 03-FEB-14 Vishal Gupta Created
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE SID
UNDEFINE INST_ID
UNDEFINE SERIAL
UNDEFINE HOURS
DEFINE SID="&&1"
DEFINE INST_ID="&&2"
DEFINE SERIAL="&&3"
DEFINE HOURS="&&4"
DEFINE WHERECLAUSE="&&5"
COLUMN _SID NEW_VALUE SID NOPRINT
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
COLUMN _SERIAL NEW_VALUE SERIAL NOPRINT
COLUMN _HOURS NEW_VALUE HOURS NOPRINT
set term off
SELECT DECODE(UPPER('&&SID'),'','%',UPPER('&&SID')) "_SID"
, DECODE(UPPER('&&INST_ID'),'','1',UPPER('&&INST_ID')) "_INST_ID"
, DECODE(UPPER('&&SERIAL'),'','%',UPPER('&&SERIAL')) "_SERIAL"
, DECODE(UPPER('&&HOURS'),'','24',UPPER('&&HOURS')) "_HOURS"
FROM DUAL;
set term on
/***********************************/
PROMPT ***************************************************
PROMPT * AWR ASH Session Details
PROMPT *
PROMPT * Input Parameter:
PROMPT * SID = "&&SID"
PROMPT * Instance ID = "&&INST_ID"
PROMPT * Serial# = "&&SERIAL"
PROMPT * Number of Hours = "&&HOURS"
PROMPT * WhereClause = "&&WHERECLAUSE"
PROMPT ***************************************************
COLUMN session_id HEADING "SID" FORMAT 99999
COLUMN instance_number HEADING "I#" FORMAT 99
COLUMN "session_serial#" HEADING "Serial#" FORMAT 999999
COLUMN sample_time_min FORMAT a18
COLUMN sample_time_max FORMAT a18
COLUMN duration FORMAT a12
COLUMN username HEADING "DBUser" FORMAT a18
COLUMN service_name HEADING "ServiceName" FORMAT a21
COLUMN program HEADING "Program" FORMAT a25 TRUNCATE
COLUMN machine HEADING "Machine" FORMAT a25
-- Get the SQL Statements from ASH
SELECT /*+ parallel(ash, 10) */
--ash.sql_exec_id,
NVL(ash.qc_session_id,ash.session_id) session_id
, NVL(ash.qc_instance_id,ash.instance_number) instance_number
, NVL(ash.qc_session_serial#,ash.session_serial#) session_serial#
, TO_CHAR(MIN(ash.sample_time),'DD-MON-YY HH24:MI:SS') sample_time_min
, TO_CHAR(max(ash.sample_time) ,'DD-MON-YY HH24:MI:SS') sample_time_max
, SUBSTR(REPLACE(max(ash.sample_time) - MIN(ash.sample_time),'+00000000','+')
,1,INSTR(REPLACE(max(ash.sample_time) - MIN(ash.sample_time),'+00000000','+'),'.')-1
) duration
, u.username
, s.name service_name
, NVL(ash_parent.program,ash.program) program
, ash.machine
FROM dba_hist_active_sess_history ash
JOIN dba_users u ON u.user_id = ash.user_id
JOIN dba_services s ON s.name_hash = ash.service_hash
LEFT OUTER JOIN dba_hist_active_sess_history ash_parent
ON ash_parent.instance_number = ash.qc_instance_id
AND ash_parent.session_id = ash.qc_session_id
AND ash_parent.session_serial# = ash.qc_session_serial#
AND CAST(ash_parent.sample_time as DATE) = ash.sql_exec_start
WHERE NVL(ash.qc_instance_id,ash.instance_number) LIKE '&&INST_ID'
AND NVL(ash.qc_session_id,ash.session_id) LIKE '&&SID'
AND NVL(ash.qc_session_serial#,ash.session_serial#) LIKE '&&SERIAL'
AND ash.sample_time > sysdate - (&&HOURS/24)
AND (ash_parent.sample_time IS NULL or ash_parent.sample_time > sysdate - (&&HOURS/24))
&&WHERECLAUSE
GROUP BY NVL(ash.qc_session_id,ash.session_id)
, NVL(ash.qc_instance_id,ash.instance_number)
, NVL(ash.qc_session_serial#,ash.session_serial#)
, u.username
, s.name
, NVL(ash_parent.program,ash.program)
, ash.machine
ORDER BY MIN(ash.sample_time) ASC
, max(ash.sample_time) asc
;
@@footer

122
vg/awr_sid_events.sql Normal file
View File

@@ -0,0 +1,122 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display Session's events from ASH
* Compatibility : 10.1 and above
* Parameters : 1 - SID
* 2 - INST_ID (optional, default to 1)
* 3 - Serial# (Default %)
* 4 - Number of hours (Default 24)
* 5 - WhereClause
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 15-MAY-14 Vishal Gupta Created
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE SID
UNDEFINE INST_ID
UNDEFINE SERIAL
UNDEFINE HOURS
UNDEFINE SQL_ID
UNDEFINE WHERECLAUSE
DEFINE SID="&&1"
DEFINE INST_ID="&&2"
DEFINE SERIAL="&&3"
DEFINE HOURS="&&4"
DEFINE WHERECLAUSE="&&5"
COLUMN _SID NEW_VALUE SID NOPRINT
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
COLUMN _SERIAL NEW_VALUE SERIAL NOPRINT
COLUMN _HOURS NEW_VALUE HOURS NOPRINT
set term off
SELECT DECODE(UPPER('&&SID'),'','%',UPPER('&&SID')) "_SID"
, DECODE(UPPER('&&INST_ID'),'','1',UPPER('&&INST_ID')) "_INST_ID"
, DECODE(UPPER('&&SERIAL'),'','%',UPPER('&&SERIAL')) "_SERIAL"
, DECODE(UPPER('&&HOURS'),'','24',UPPER('&&HOURS')) "_HOURS"
FROM DUAL;
set term on
/***********************************/
PROMPT ***************************************************
PROMPT * AWR ASH Session Events
PROMPT *
PROMPT * Input Parameter:
PROMPT * SID = "&&SID"
PROMPT * Instance ID = "&&INST_ID"
PROMPT * Serial# = "&&SERIAL"
PROMPT * Number of Hours = "&&HOURS"
PROMPT * Where Clause = "&&WHERECLAUSE"
PROMPT ***************************************************
COLUMN session_id HEADING "SID" FORMAT 99999
COLUMN inst_id HEADING "I#" FORMAT 99
COLUMN "session_serial#" HEADING "Serial#" FORMAT 999999
COLUMN FORCE_MATCHING_SIGNATURE FORMAT 99999999999999999999999
COLUMN sql_plan_hash_value HEADING "Plan|Hash|Value" FORMAT 9999999999
COLUMN sql_exec_start FORMAT a20
COLUMN sql_exec_end FORMAT a20
COLUMN duration FORMAT a15
COLUMN sql_opname HEADING "SQL|Operation" FORMAT a15 TRUNCATE
COLUMN sql_child_number HEADING "SQL|Ch#" FORMAT 999
COLUMN current_dop HEADING "DOP" FORMAT 999
COLUMN event HEADING "Event" FORMAT a40 TRUNCATE
COLUMN event_count HEADING "EventCount" FORMAT 99999999999
BREAK ON session_id ON inst_id ON session_serial# ON sql_exec_start ON sql_opname ON sql_id ON sql_child_number ON sql_plan_hash_value
-- Get the session events from ASH
SELECT /*+ parallel(ash, 10) */
--ash.sql_exec_id,
NVL(ash.qc_session_id,ash.session_id) session_id
, NVL(ash.qc_instance_id,ash.instance_number) inst_id
, NVL(ash.qc_session_serial#,ash.session_serial#) session_serial#
, TO_CHAR(NVL(ash.sql_exec_start,MIN(ash.sample_time)),'DD-MON-YY HH24:MI:SS') sql_exec_start
, ash.sql_opname
, ash.sql_id
, ash.sql_child_number
, ash.sql_plan_hash_value
, count(1) event_count
, ash.event
FROM dba_hist_active_sess_history ash
WHERE ash.sql_id IS NOT NULL
AND NVL(ash.qc_instance_id,ash.instance_number) LIKE '&&INST_ID'
AND NVL(ash.qc_session_id,ash.session_id) LIKE '&&SID'
AND NVL(ash.qc_session_serial#,ash.session_serial#) LIKE '&&SERIAL'
AND ash.sample_time > sysdate - (&&HOURS/24)
AND ash.sql_exec_id IS NOT NULL
&&WHERECLAUSE
GROUP BY NVL(ash.qc_session_id,ash.session_id)
, NVL(ash.qc_instance_id,ash.instance_number)
, NVL(ash.qc_session_serial#,ash.session_serial#)
, ash.sql_exec_id
, ash.sql_exec_start
, ash.sql_opname
, ash.sql_id
, ash.sql_child_number
, ash.sql_plan_hash_value
, ash.force_matching_signature
, ash.event
ORDER BY --max(ash.sample_time) asc
--,
NVL(ash.sql_exec_start,MIN(ash.sample_time)) ASC
, ash.sql_id
, count(1) desc
;
@@footer

170
vg/awr_sid_sqlids.sql Normal file
View File

@@ -0,0 +1,170 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display Session's SQL IDs from AWR
* Compatibility : 10.1 and above
* Parameters : 1 - SID
* 2 - INST_ID (optional, default to 1)
* 3 - Serial# (Default %)
* 4 - Number of hours (Default 24)
* 5 - SQL_ID (Default %)
* 6 - WhereClause
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 31-DEC-15 Vishal Gupta Change logic of query to start with parent session to optimize performance
* 28-JAN-14 Vishal Gupta Added grand parent logic
* 21-JAN-14 Vishal Gupta Added SQL_ID and whereclause as input parameter
* 28-Jun-12 Vishal Gupta Created
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE SID
UNDEFINE INST_ID
UNDEFINE SERIAL
UNDEFINE HOURS
UNDEFINE SQL_ID
UNDEFINE WHERECLAUSE
UNDEFINE WHERECLAUSE2
UNDEFINE HAVINGCLAUSE
DEFINE SID="&&1"
DEFINE INST_ID="&&2"
DEFINE SERIAL="&&3"
DEFINE HOURS="&&4"
DEFINE SQL_ID="&&5"
DEFINE WHERECLAUSE="&&6"
DEFINE WHERECLAUSE2="&&7"
DEFINE HAVINGCLAUSE="&&8"
COLUMN _SID NEW_VALUE SID NOPRINT
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
COLUMN _SERIAL NEW_VALUE SERIAL NOPRINT
COLUMN _HOURS NEW_VALUE HOURS NOPRINT
COLUMN _SQL_ID NEW_VALUE SQL_ID NOPRINT
set term off
SELECT DECODE(UPPER('&&SID'),'','%',UPPER('&&SID')) "_SID"
, DECODE(UPPER('&&INST_ID'),'','1',UPPER('&&INST_ID')) "_INST_ID"
, DECODE(UPPER('&&SERIAL'),'','%',UPPER('&&SERIAL')) "_SERIAL"
, DECODE(UPPER('&&HOURS'),'','24',UPPER('&&HOURS')) "_HOURS"
, DECODE('&&SQL_ID','','%','&&SQL_ID') "_SQL_ID"
FROM DUAL;
set term on
/***********************************/
PROMPT ***************************************************
PROMPT * AWR - ASH SQL Ids
PROMPT *
PROMPT * Input Parameter:
PROMPT * SID = "&&SID"
PROMPT * Instance ID = "&&INST_ID"
PROMPT * Serial# = "&&SERIAL"
PROMPT * Number of Hours = "&&HOURS"
PROMPT * SQL Id = "&&SQL_ID"
PROMPT * Where Clause = "&&WHERECLAUSE"
PROMPT * Where Clause2 = "&&WHERECLAUSE2"
PROMPT * Having Clause = "&&HAVINGCLAUSE"
PROMPT ***************************************************
COLUMN session_id HEADING "SID" FORMAT 99999
COLUMN instance_number HEADING "I#" FORMAT 99
COLUMN inst_id HEADING "I#" FORMAT 99
COLUMN "session_serial#" HEADING "Serial#" FORMAT 999999
COLUMN FORCE_MATCHING_SIGNATURE HEADING "Force|Matching|Signature" FORMAT 99999999999999999999999
COLUMN sql_plan_hash_value HEADING "Plan|Hash|Value" FORMAT 9999999999
COLUMN sql_exec_start FORMAT a18
COLUMN sql_exec_end FORMAT a18
COLUMN duration HEADING "Duration|+D HH:MM:SS" FORMAT a12
COLUMN sql_opname HEADING "SQL|Operation" FORMAT a10 TRUNCATE
COLUMN sql_child_number HEADING "SQL|Ch#" FORMAT 999
COLUMN current_dop HEADING "DOP" FORMAT 999
COLUMN phyread_requests HEADING "Phy|Read|Reqs|(#1000)" FORMAT 999999
COLUMN phywrite_requests HEADING "Phy|Write|Reqs|(#1000)" FORMAT 999999
COLUMN phyread HEADING "Phy|Read|(GB)" FORMAT 9999
COLUMN phywrite HEADING "Phy|Write|(GB)" FORMAT 9999
COLUMN interconnect_io HEADING "Inter|Connect|IO|(GB)" FORMAT 9999
COLUMN pga_allocated HEADING "PGA|(GB)" FORMAT 999.00
COLUMN temp_space_allocated HEADING "Temp|Space|(GB)" FORMAT 9999.00
-- Get the SQL Statements from ASH
SELECT /*+ parallel(ash,8) parallel(ash_child,8) */
decode(ash_child.qc_session_id, 0, ash_child.session_id, ash.session_id) session_id
, decode(ash_child.qc_session_id, 0, ash_child.instance_number, ash.instance_number) instance_number
, decode(ash_child.qc_session_id, 0, ash_child.session_serial#, ash.session_serial#) session_serial#
&&_IF_ORA_11gR1_OR_HIGHER , TO_CHAR(NVL(ash.sql_exec_start,MIN(NVL(ash_child.sample_time,ash.sample_time))),'DD-MON-YY HH24:MI:SS') sql_exec_start
, TO_CHAR(max(NVL(ash_child.sample_time,ash.sample_time)) ,'DD-MON-YY HH24:MI:SS') sql_exec_end
, SUBSTR(REPLACE( max(NVL(ash_child.sample_time,ash.sample_time)) - NVL(ash.sql_exec_start,MIN(NVL(ash_child.sample_time,ash.sample_time))) ,'+00000000','+')
,1,INSTR(REPLACE( max(NVL(ash_child.sample_time,ash.sample_time)) - NVL(ash.sql_exec_start,MIN(NVL(ash_child.sample_time,ash.sample_time))),'+00000000','+'),'.')-1
) duration
--&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname
, ash.sql_id
, ash.sql_child_number
, ash.sql_plan_hash_value
&&_IF_ORA_11202_OR_HIGHER , max(trunc(NVL(ash_child.px_flags,ash.px_flags) / 2097152)) current_dop
, ash.force_matching_signature
&&_IF_ORA_11gR1_OR_HIGHER , NVL(ash.top_level_sql_id,ash_child.top_level_sql_id) top_level_sql_id
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(NVL(ash.delta_read_io_requests,0) + NVL(ash_child.delta_read_io_requests,0) )/power(1000,1)) phyread_requests
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(NVL(ash.delta_write_io_requests,0) + NVL(ash_child.delta_write_io_requests,0) )/power(1000,1)) phywrite_requests
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(NVL(ash.delta_read_io_bytes,0) + NVL(ash_child.delta_read_io_bytes,0) )/power(1024,3)) phyread
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(NVL(ash.delta_write_io_bytes,0) + NVL(ash_child.delta_write_io_bytes,0) )/power(1024,3)) phywrite
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(NVL(ash.delta_interconnect_io_bytes,0) + NVL(ash_child.delta_interconnect_io_bytes,0) )/power(1024,3)) interconnect_io
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(MAX(NVL(ash.pga_allocated,0) + NVL(ash_child.pga_allocated,0) )/power(1024,3),2) pga_allocated
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(MAX(NVL(ash.temp_space_allocated,0) + NVL(ash_child.temp_space_allocated,0) )/power(1024,3),2) temp_space_allocated
FROM v$database d
JOIN sys.wrh$_active_session_history ash
ON ash.dbid = d.dbid
AND ash.instance_number LIKE '&&INST_ID'
AND ash.session_id LIKE '&&SID'
AND ash.session_serial# LIKE '&&SERIAL'
AND ash.sql_id LIKE '&&SQL_ID'
AND ash.sample_time > sysdate - (&&HOURS/24)
&&WHERECLAUSE
LEFT OUTER JOIN sys.wrh$_active_session_history ash_child
ON ash_child.dbid = ash.dbid
AND ash_child.qc_instance_id = ash.instance_number
AND ash_child.qc_session_id = ash.session_id
AND ash_child.qc_session_serial# = ash.session_serial#
AND ash_child.qc_session_id <> 0
&&_IF_ORA_11gR1_OR_HIGHER AND ash_child.sql_exec_start = ash.sql_exec_start
AND ash_child.sample_time > sysdate - (&&HOURS/24)
AND ash_child.qc_instance_id LIKE '&&INST_ID'
AND ash_child.qc_session_id LIKE '&&SID'
AND ash_child.qc_session_serial# LIKE '&&SERIAL'
AND ash_child.sql_id LIKE '&&SQL_ID'
&&WHERECLAUSE2
GROUP BY decode(ash_child.qc_session_id, 0, ash_child.session_id, ash.session_id)
, decode(ash_child.qc_session_id, 0, ash_child.instance_number, ash.instance_number)
, decode(ash_child.qc_session_id, 0, ash_child.session_serial#, ash.session_serial#)
&&_IF_ORA_11gR1_OR_HIGHER , ash.sql_exec_id
&&_IF_ORA_11gR1_OR_HIGHER , ash.sql_exec_start
--&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname
, ash.sql_id
, ash.sql_child_number
, ash.sql_plan_hash_value
, ash.force_matching_signature
&&_IF_ORA_11gR1_OR_HIGHER , NVL(ash.top_level_sql_id,ash_child.top_level_sql_id)
&&HAVINGCLAUSE
--having (SUM(ash.delta_read_io_bytes)+SUM(ash.delta_interconnect_io_bytes) ) / power(1024,3) > 20 -- Physical Read + Write GBs
--having (SUM(ash.delta_read_io_bytes) ) / power(1024,3) > 100 -- Physical Write GBs
--having (SUM(ash.delta_interconnect_io_bytes) ) / power(1024,3) > 100 -- Interconnect IO GBs
--having (SUM(ash.pga_allocated) ) / power(1024,3) > 2 -- PGA GBs
--having (SUM(ash.temp_space_allocated) ) / power(1024,3) > 10 -- Temp Space GBs
ORDER BY
max(ash.sample_time) asc
&&_IF_ORA_11gR1_OR_HIGHER, NVL(ash.sql_exec_start,MIN(NVL(ash_child.sample_time,ash.sample_time))) ASC
;
@@footer

View File

@@ -0,0 +1,189 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display SQLStats from AWR
* Version : 10.1.0.4 and above
* Parameters : 1 - SQL_ID (Use % as wildcard)
* 2 - PLAN_HASH_VALUE (Use % as wildcard)
* 3 - Number of Days (Default 7 days)
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 08-Mar-12 Vishal Gupta Intial version
* 20-Mar-12 Vishal Gupta Added PLAN_HASH_VALUE in output
* 23-Apr-12 Vishal Gupta Added PLAN_HASH_VALUE as the input variable
* 09-Oct-12 Vishal Gupta Removed the instance_number from output and
* aggregated stats for all instances in output.
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE force_matching_signature
UNDEFINE plan_hash_value
UNDEFINE days
UNDEFINE whereclause
DEFINE force_matching_signature="&&1"
DEFINE plan_hash_value="&&2"
DEFINE days="&&3"
DEFINE whereclause="&&4"
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
COLUMN _plan_hash_value NEW_VALUE plan_hash_value NOPRINT
COLUMN _days NEW_VALUE days NOPRINT
set term off
SELECT DECODE('&&plan_hash_value','','%','&&plan_hash_value') "_plan_hash_value"
, DECODE('&&days','','7','&&days') "_days"
FROM DUAL;
set term on
/************************************
* CONFIGURATION PARAMETERS
************************************/
DEFINE COUNT_SMALL_FORMAT=99,999
DEFINE COUNT_SMALL_DIVIDER="1"
DEFINE COUNT_SMALL_HEADING="#"
--DEFINE COUNT_SMALL_DIVIDER="1000"
--DEFINE COUNT_SMALL_HEADING="#1000"
--DEFINE COUNT_SMALL_DIVIDER="1000000"
--DEFINE COUNT_SMALL_HEADING="#mill"
DEFINE COUNT_FORMAT=999,999
--DEFINE COUNT_DIVIDER="1"
--DEFINE COUNT_HEADING="#"
DEFINE COUNT_DIVIDER="1000"
DEFINE COUNT_HEADING="#1000"
--DEFINE COUNT_DIVIDER="1000000"
--DEFINE COUNT_HEADING="million"
DEFINE BYTES_FORMAT=999,999
--DEFINE BYTES_DIVIDER="1024"
--DEFINE BYTES_HEADING="KB"
--DEFINE BYTES_DIVIDER="1024/1024"
--DEFINE BYTES_HEADING="MB"
DEFINE BYTES_DIVIDER="1024/1024/1024"
DEFINE BYTES_HEADING="GB"
DEFINE TIME_FORMAT=9,999
DEFINE TIME_DIVIDER="1"
DEFINE TIME_HEADING="sec"
--DEFINE TIME_DIVIDER="60"
--DEFINE TIME_HEADING="min"
Prompt
Prompt ***************************************************************************************************
Prompt * AWR SQL Executions Statistics (Delta) - By FORCE_MATCHING_SIGNATURE
PROMPT *
PROMPT * Input Parameters
PROMPT * - Force Matching Signature = '&&force_matching_signature'
PROMPT * - Plan Hash Value = '&&plan_hash_value'
PROMPT * - Days = '&&days'
PROMPT * - WhereClause = '&&whereclause'
Prompt ***************************************************************************************************
COLUMN seperator HEADING "!|!|!|!" FORMAT a1
COLUMN end_interval_time HEADING "Snap Time" FORMAT a15
COLUMN instance_number HEADING "I#" FORMAT 99
COLUMN force_matching_signature HEADING "Force|Matching|Signature" FORMAT 99999999999999999999
COLUMN SQL_ID HEADING "SQLId" FORMAT a13
COLUMN plan_hash_value HEADING "Plan|Hash|Value" FORMAT 999999999999
COLUMN invalidations_delta HEADING "Invalid|Delta|(&&COUNT_HEADING)" FORMAT 9,999
COLUMN iowait_delta HEADING "IO|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN apwait_delta HEADING "Appl|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN ccwait_delta HEADING "Conc|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN clwait_delta HEADING "Cluster|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN plsexec_time_delta HEADING "PLsexec|Time|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN cpu_time_delta HEADING "CPU|Time|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN elapsed_time_delta HEADING "Elapsed|Time|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN executions_delta HEADING "Exec|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN px_servers_execs_delta HEADING "Par'l|Serv|Exec|Delta" FORMAT 999
COLUMN rows_processed_delta HEADING "Rows|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN sorts_delta HEADING "Sorts|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN buffer_gets_bytes_delta HEADING "Logical|Read|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN buffer_gets_delta HEADING "Buffer|Gets|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN direct_writes_delta HEADING "Direct|Write|Delta|(&&BYTES_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN io_interconnect_bytes_delta HEADING "IO|Inter|Connect|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN physical_read_bytes_delta HEADING "Phy|Read|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN physical_write_bytes_delta HEADING "Phy|Write|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN optimized_physical_reads_delta HEADING "Optimized|Phy|ReadReq|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN io_offload_elig_bytes_delta HEADING "IO|Offload|Elig|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN io_offload_return_bytes_delta HEADING "IO|Offload|Return|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN sql_profile HEADING "sql_profile" FORMAT a30
SELECT TO_CHAR(MAX(s.end_interval_time),'DD-MON-YY HH24:MI') end_interval_time
, ss.force_matching_signature
, ss.plan_hash_value
, ROUND(SUM(ss.iowait_delta)/1000000/&&TIME_DIVIDER) iowait_delta
, ROUND(SUM(ss.apwait_delta)/1000000/&&TIME_DIVIDER) apwait_delta
, ROUND(SUM(ss.ccwait_delta)/1000000/&&TIME_DIVIDER) ccwait_delta
, ROUND(SUM(ss.clwait_delta)/1000000/&&TIME_DIVIDER) clwait_delta
, ROUND(SUM(ss.plsexec_time_delta)/1000000/&&TIME_DIVIDER) plsexec_time_delta
, ROUND(SUM(ss.cpu_time_delta)/1000000/&&TIME_DIVIDER) cpu_time_delta
, ROUND(SUM(ss.elapsed_time_delta)/1000000/&&TIME_DIVIDER) elapsed_time_delta
, '|' seperator
, SUM(ss.executions_delta)/&&COUNT_DIVIDER executions_delta
--&&_IF_ORA_10gR2_OR_HIGHER , SUM(ss.px_servers_execs_delta) px_servers_execs_delta
-- , SUM(ss.invalidations_delta)/&&COUNT_DIVIDER invalidations_delta
, SUM(ss.rows_processed_delta)/&&COUNT_DIVIDER rows_processed_delta
, SUM(ss.sorts_delta)/&&COUNT_DIVIDER sorts_delta
, SUM(ss.buffer_gets_delta)/&&COUNT_DIVIDER buffer_gets_delta
, SUM(ss.buffer_gets_delta* p.value)/&&BYTES_DIVIDER buffer_gets_bytes_delta
, ROUND(SUM(ss.direct_writes_delta)/&&COUNT_DIVIDER) direct_writes_delta
, '|' seperator
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_interconnect_bytes_delta)/&&BYTES_DIVIDER io_interconnect_bytes_delta
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.physical_read_bytes_delta)/&&BYTES_DIVIDER physical_read_bytes_delta
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.physical_write_bytes_delta)/&&BYTES_DIVIDER physical_write_bytes_delta
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.optimized_physical_reads_delta)/&&COUNT_DIVIDER optimized_physical_reads_delta
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_offload_elig_bytes_delta)/&&BYTES_DIVIDER io_offload_elig_bytes_delta
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_offload_return_bytes_delta)/&&BYTES_DIVIDER io_offload_return_bytes_delta
, '|' seperator
--, ss.sql_profile
from dba_hist_sqlstat ss
, dba_hist_snapshot s
, v$database d
, v$system_parameter p
where p.name = 'db_block_size'
AND ss.instance_number = s.instance_number
AND ss.dbid = s.dbid
AND ss.snap_id = s.snap_id
AND ss.dbid = d.dbid
AND s.end_interval_time > SYSDATE - &&days
AND ss.force_matching_signature LIKE '&&force_matching_signature'
AND ss.plan_hash_value LIKE '&&plan_hash_value'
--AND ss.executions_delta > 0
&&whereclause
GROUP BY ss.dbid
, ss.snap_id
, ss.force_matching_signature
, ss.plan_hash_value
--, ss.sql_profile
ORDER BY TO_CHAR(MAX(s.end_interval_time),'YYYY-MM-DD HH24:MI')
, ss.force_matching_signature
, ss.plan_hash_value
--, ss.sql_profile
;
UNDEFINE sql_id
UNDEFINE plan_hash_value
UNDEFINE days
UNDEFINE force_matching_signature
UNDEFINE whereclause
@@footer

133
vg/awr_sql_binds.sql Normal file
View File

@@ -0,0 +1,133 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display SQL Binds from AWR
* Version : 10.2 and above
* Parameters : 1 - SQL_ID
* 2 - Number of Days (Default 7 days)
* 2 - Whereclause
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 27-Aug-15 Vishal Gupta Created
*
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE sql_id
UNDEFINE days
UNDEFINE whereclause
UNDEFINE force_matching_signature
UNDEFINE use_force_matching_signature
DEFINE sql_id="&&1"
DEFINE days="&&2"
DEFINE whereclause="&&3"
DEFINE force_matching_signature=""
COLUMN _days NEW_VALUE days NOPRINT
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
set term off
SELECT DECODE('&&days','','7','&&days') "_days"
, DECODE('&&sql_id','%','%','') "_force_matching_signature"
FROM DUAL
;
set term on
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
set term off
select to_char(ss2.force_matching_signature) "_force_matching_signature"
from v$database d
, dba_hist_sqlstat ss2
where d.dbid = ss2.dbid
AND ss2.sql_id = '&&sql_id' and rownum = 1;
select CASE WHEN '&&force_matching_signature' IS NULL THEN '0'
WHEN '&&force_matching_signature' = '' THEN '0'
ELSE '&&force_matching_signature'
END "_force_matching_signature"
from dual
;
set term on
/************************************/
Prompt
Prompt **************************************************************
Prompt * AWR SQL Bind Values
Prompt * (Force Matching Signature = '&&force_matching_signature')
PROMPT *
PROMPT * Input Parameters
PROMPT * - SQL Id = '&&sql_id'
PROMPT * - Days = '&&days'
PROMPT * - WhereClause = '&&whereclause'
Prompt **************************************************************
COLUMN seperator HEADING "!|!|!|!" FORMAT a1
COLUMN end_interval_time HEADING "Snap Time" FORMAT a15
COLUMN instance_number HEADING "I#" FORMAT 99
COLUMN SQL_ID HEADING "SQLId" FORMAT a13
COLUMN plan_hash_value HEADING "Plan|Hash|Value" FORMAT 999999999999
COLUMN bind_values HEADING "Bind Values" FORMAT a100
COLUMN bind_datatype HEADING "Bind DataType" FORMAT a80
SELECT TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI') end_interval_time
, ss.instance_number
, ss.sql_id
, ss.plan_hash_value
, (select listagg(NVL(name,':B' || position)
||'['
|| datatype_string || NVL2(scale
,'(' || scale || NVL2(precision,','|| precision,'') || ')'
,''
)
|| ']'
||'='
|| CASE
WHEN datatype_string <> 'TIMESTAMP' THEN NVL(value_string,'NULL')
ELSE TO_CHAR(ANYDATA.ACCESStimestamp(VALUE_ANYDATA))
END
,','
) WITHIN GROUP (order by position)
from table(dbms_sqltune.extract_binds(ss.BIND_DATA))
) bind_values
/*
, (select listagg(NVL(name,':B' || position) || '='
|| datatype_string || NVL2(scale,'(' || scale || NVL2(precision,','|| precision, '') || ')' ,'' )
,','
) WITHIN GROUP (order by position)
from table(dbms_sqltune.extract_binds(ss.BIND_DATA))
) bind_datatype
*/
from v$database d
JOIN dba_hist_snapshot s ON s.dbid = d.dbid
JOIN dba_hist_sqlstat ss ON ss.dbid = s.dbid AND ss.instance_number = s.instance_number AND ss.snap_id = s.snap_id
AND ss.executions_delta > 0
where s.end_interval_time > SYSDATE - &&days
AND ss.sql_id LIKE CASE ss.force_matching_signature
WHEN 0 THEN '&&sql_id'
ELSE '%'
END
AND ss.force_matching_signature = '&&force_matching_signature'
&&whereclause
ORDER BY s.end_interval_time
, ss.instance_number
;
@@footer

38
vg/awr_sql_hints.sql Normal file
View File

@@ -0,0 +1,38 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display Hints in a SQL Statement
* Parameters : 1 - SQLID
* 2 - Child Number
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 01-May-12 Vishal Gupta First Draft
*
*/
set pages 50
DEFINE sql_id="&&1"
DEFINE child_no="&&2"
SELECT extractvalue(value(d), '/hint') AS outline_hints
FROM xmltable('/*/outline_data/hint'
passing ( SELECT xmltype(other_xml) AS xmlval
FROM v$sql_plan
WHERE sql_id LIKE NVL('&sql_id',sql_id)
AND child_number = &child_no
AND other_xml IS NOT NULL
)
) d
;
UNDEFINE sql_id
UNDEFINE child_no
@@footer

View File

@@ -0,0 +1,88 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Search SQL Text from AWR repository to find SQLId
* Parameters : 1 - SQLText to search (Use % as wild card)
* 2 - Number of days history to search (Default 7 days)
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 08-JUL-14 Vishal Gupta Added plan_hash_value to output
* 12-JUN-13 Vishal Gupta Added force_matching_signature to output
* 08-MAR-12 Vishal Gupta Created
*
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE FORCE_MATCHING_SINGATURE
UNDEFINE no_of_days
DEFINE FORCE_MATCHING_SINGATURE="&&1"
DEFINE no_of_days="&&2"
COLUMN _no_of_days NEW_VALUE no_of_days NOPRINT
set term off
SELECT DECODE('&&no_of_days','','7','&&no_of_days') "_no_of_days"
FROM DUAL;
set term on
PROMPT ************************************************************************
PROMPT * AWR SQL Text Search by using FORCE_MATCHING_SINGATURE
PROMPT *
PROMPT * Input Parameters
PROMPT * - FORCE_MATCHING_SINGATURE - "&&FORCE_MATCHING_SINGATURE"
PROMPT * - NoOfDays - "&&no_of_days"
PROMPT ************************************************************************
COLUMN END_INTERVAL_TIME HEADING "Max Snap Time" FORMAT a18
COLUMN sql_text HEADING "SQLText" FORMAT a150 WRAP
COLUMN force_matching_signature HEADING "FORCE_MATCHING_SIGNATURE" FORMAT 999999999999999999999
set timing on
/*
SELECT --+ FULL(sql) parallel(12)
sql.sql_id
FROM dba_hist_sqltext sql
WHERE upper(sql.sql_text) like upper(q'[&&sqltext]')
AND upper(SQL.sql_text) NOT LIKE upper('%dba_hist_sqltext%')
;
*/
SELECT --+ FIRST_ROWS LEADING(s) USE_NL(sql ss s ) INDEX(ss.sn) FULL(s)
-- FULL(s) FULL(ss) FULL(sql) parallel(12)
TO_CHAR(max(s.END_INTERVAL_TIME),'DD-MON-YY HH24:MI:SS') END_INTERVAL_TIME
, ss.sql_id
, ss.plan_hash_value
, ss.force_matching_signature
FROM v$database d
, dba_hist_snapshot s
, dba_hist_sqlstat ss
, dba_hist_sqltext sql
WHERE d.dbid = s.dbid
AND s.end_interval_time > sysdate - &&no_of_days
AND s.dbid = ss.dbid
AND s.instance_number = ss.instance_number
AND s.snap_id = ss.snap_id
AND ss.dbid = sql.dbid
AND ss.sql_id = sql.sql_id
AND ss.force_matching_signature = &&FORCE_MATCHING_SINGATURE
GROUP BY ss.sql_id
, ss.plan_hash_value
, ss.force_matching_signature
ORDER BY max(s.END_INTERVAL_TIME) desc
;
set timing off
@@footer

View File

@@ -0,0 +1,169 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display Statistics of a table (including part, sub-par, ind, ind-part, ind-subpart)
* Parameters : 1 - SQLId
* 2 - SQL Child Number
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ --------------------------------------------------------------------
* 14-Jul-15 Vishal Gupta Added last_ddl_time, last_spec_change and created columns to output
* 01-Oct-12 Vishal Gupta Created
*
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE sql_id
UNDEFINE plan_hash_value
DEFINE sql_id="&&1"
DEFINE plan_hash_value="&&2"
COLUMN _child_number NEW_VALUE child_number NOPRINT
set term off
SELECT DECODE('&&child_number','','0','&&child_number') "_child_number"
FROM DUAL
/
set term on
PROMPT
PROMPT ***********************************************************************
PROMPT * AWR - SQL Statement Object Statistics
PROMPT *
PROMPT * Input Parameters
PROMPT * - SQL Id = '&&sql_id'
PROMPT * - Plan Hash Value = '&&plan_hash_value'
PROMPT ***********************************************************************
COLUMN object_name HEADING "TableName" FORMAT a50
COLUMN Object_type HEADING "Object|Type" FORMAT a6
COLUMN stale_stats HEADING "Stale|Stats" FORMAT a5
COLUMN stattype_locked HEADING "Locked|Stats" FORMAT a5
COLUMN last_analyzed HEADING "LastAnalyzed" FORMAT a18
COLUMN user_stats HEADING "U|s|e|r" FORMAT a1 TRUNCATE
COLUMN sample_size HEADING "SampleSize" FORMAT 9,999,999,999
COLUMN num_rows HEADING "RowCount" FORMAT 9,999,999,999
COLUMN blocks HEADING "Blocks" FORMAT 9,999,999,999
COLUMN Size_MB HEADING "Size(MB)" FORMAT 9,999,999,999
COLUMN last_ddl_time HEADING "LastDDLTime" FORMAT a18
COLUMN last_specification_change HEADING "Last|Specification|Change" FORMAT a18
COLUMN created HEADING "Created" FORMAT a18
WITH objects AS
(
SELECT /*+ ALL_ROWS NO_MERGE LEADING (sp) MATERIALIZE */
DISTINCT
o.owner
, o.object_name
, o.subobject_name
, REPLACE(o.object_type,'MATERIALIZED','MAT') object_type
, sp.partition_id
, TO_CHAR(o.last_ddl_time,'DD-MON-YY HH24:MI:SS') last_ddl_time
, TO_CHAR(TO_DATE(o.timestamp,'YYYY-MM-DD HH24:MI:SS'),'DD-MON-YY HH24:MI:SS') last_specification_change
, TO_CHAR(o.created,'DD-MON-YY HH24:MI:SS') created
FROM dba_hist_sql_plan sp
JOIN dba_objects o ON o.owner = sp.object_owner AND o.object_name = sp.object_name
/* Dont join by object id, as it does not cover cases when object has been dropped and recreated*/
WHERE sp.object_type IS NOT NULL
AND sp.sql_id = '&&sql_id'
AND sp.plan_hash_value = '&&plan_hash_value'
)
,stats AS
(
SELECT /*+ ALL_ROWS NO_MERGE LEADING(o) MATERIALIZE */
s.owner
|| '.' || s.table_name
|| NVL2(s.partition_name,':' || s.partition_name, '')
|| NVL2(s.subpartition_name,':' || s.subpartition_name, '')
object_name
, o.object_type
, s.stale_stats
, s.stattype_locked
, s.last_analyzed
, s.sample_size
, s.num_rows
, s.blocks
, (seg.bytes)/1024/1024 Size_MB
, o.last_ddl_time
, o.last_specification_change
, o.created
FROM objects o
JOIN dba_tab_statistics s ON o.owner = s.owner
AND o.object_name = s.table_name
AND NVL(s.partition_name,'%') LIKE NVL(o.subobject_name,'%')
AND NVL(s.partition_position,0) LIKE NVL(o.partition_id,0)
JOIN dba_segments seg ON seg.owner = o.owner
AND seg.segment_name = o.object_name
--AND seg.segment_type = o.object_type
AND NVL(o.subobject_name,'%') LIKE NVL(seg.partition_name,'%')
AND NVL(s.partition_position,0) = NVL(o.partition_id,0)
WHERE s.table_name NOT LIKE 'BIN$%'
AND s.table_name NOT LIKE '%==%'
UNION ALL
SELECT /*+ ALL_ROWS NO_MERGE LEADING(o) MATERIALIZE */
s.owner
|| '.' || s.index_name
|| NVL2(s.partition_name,':' || s.partition_name, '')
|| NVL2(s.subpartition_name,':' || s.subpartition_name, '')
object_name
, o.object_type
, s.stale_stats
, s.stattype_locked
, s.last_analyzed
, s.sample_size
, s.num_rows
, s.leaf_blocks blocks
, (seg.bytes)/1024/1024 Size_MB
, o.last_ddl_time
, o.last_specification_change
, o.created
FROM objects o
JOIN dba_ind_statistics s ON o.owner = s.owner
AND o.object_name = s.index_name
AND NVL(o.subobject_name,'%') = NVL(s.partition_name,'%')
JOIN dba_segments seg ON seg.owner = o.owner
AND seg.segment_name = o.object_name
-- AND seg.segment_type = o.object_type
AND NVL(seg.partition_name,'%') = NVL(o.subobject_name,'%')
WHERE s.table_name NOT LIKE 'BIN$%'
AND s.index_name NOT LIKE 'BIN$%'
AND s.table_name NOT LIKE '%==%'
AND s.index_name NOT LIKE '%==%'
)
SELECT /*+ ALL_ROWS */
object_name
, object_type
, stale_stats
, stattype_locked
, to_char(s.last_analyzed,'DD-MON-YY HH24:MI:SS') last_analyzed
, sample_size
, num_rows
, blocks
, Size_MB
, last_ddl_time
, last_specification_change
, created
FROM stats s
--ORDER BY s.last_analyzed ASC
ORDER BY object_name
;
@@footer

64
vg/awr_sqlid_objects.sql Normal file
View File

@@ -0,0 +1,64 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display objects used in a SQL Id
* Parameters : 1 - SQLId
* 2 - SQL Child Number
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ --------------------------------------------------------------------
* 22-Jul-15 Vishal Gupta Created
*
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE sql_id
UNDEFINE plan_hash_value
DEFINE sql_id="&&1"
DEFINE plan_hash_value="&&2"
PROMPT
PROMPT ***********************************************************************
PROMPT * Objects Used in a SQL Statement
PROMPT *
PROMPT * Input Parameters
PROMPT * - SQL Id = '&&sql_id'
PROMPT * - Plan Hash Value = '&&plan_hash_value'
PROMPT ***********************************************************************
COLUMN object_name HEADING "TableName" FORMAT a50
COLUMN Object_type HEADING "Object|Type" FORMAT a15
COLUMN Size_MB HEADING "Size(MB)" FORMAT 9,999,999,999
COLUMN last_ddl_time HEADING "LastDDLTime" FORMAT a18
COLUMN last_specification_change HEADING "Last|Specification|Change" FORMAT a18
COLUMN created HEADING "Created" FORMAT a18
SELECT DISTINCT
o.owner || '.' || o.object_name || NVL2(o.subobject_name,':' || o.subobject_name, '') object_name
, REPLACE(o.object_type,'MATERIALIZED','MAT') object_type
, TO_CHAR(o.last_ddl_time,'DD-MON-YY HH24:MI:SS') last_ddl_time
, TO_CHAR(TO_DATE(o.timestamp,'YYYY-MM-DD HH24:MI:SS'),'DD-MON-YY HH24:MI:SS') last_specification_change
, TO_CHAR(o.created,'DD-MON-YY HH24:MI:SS') created
FROM dba_hist_sql_plan sp
JOIN dba_objects o ON o.owner = sp.object_owner AND o.object_name = sp.object_name AND ( sp.object# = o.object_ID OR o.object_type not like '%PARTITION')
/* Dont join by object id, as it does not cover cases when object has been dropped and recreated*/
WHERE sp.object_type IS NOT NULL
AND sp.sql_id = '&&sql_id'
AND sp.plan_hash_value = '&&plan_hash_value'
ORDER BY 1
;
@@footer

125
vg/awr_sqlid_tree.sql Normal file
View File

@@ -0,0 +1,125 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display SQL ID Heirarchy from AWR
* Version : 10.1 and above
* Parameters : 1 - SQL_ID
* 2 - Number of Days (Default 7 days)
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 07-Mar-13 Vishal Gupta Created
*
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE sql_id
UNDEFINE days
UNDEFINE whereclause
DEFINE sql_id="&&1"
DEFINE days="&&2"
DEFINE whereclause="&&3"
COLUMN _days NEW_VALUE days NOPRINT
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
set term off
SELECT DECODE('&&plan_hash_value','','%','&&plan_hash_value') "_plan_hash_value"
, DECODE('&&days','','7','&&days') "_days"
FROM DUAL;
set term on
Prompt
Prompt **************************************************************
Prompt * AWR SQL Execution Hierarchy
PROMPT *
PROMPT * Input Parameters
PROMPT * - SQL Id = '&&sql_id'
PROMPT * - Days = '&&days'
PROMPT * - WhereClause = '&&whereclause'
Prompt **************************************************************
/*
COLUMN sample_time HEADING "SampleTime" FORMAT a18
COLUMN SQL_ID HEADING "SQLId" FORMAT a50
COLUMN sql_opname HEADING "SQL Opname" FORMAT a10
SELECT --+ parallel(ash 10)
TO_CHAR(ash.sample_time,'DD-MON-YY HH24:MI:SS') sample_time
, LPAD(' ',level*4,'`---') || ash.sql_id sql_id
, ash.sql_opname
FROM dba_hist_active_sess_history ash
WHERE ash.sample_time > sysdate - '&&days'
&&whereclause
START WITH ash.top_level_sql_id = '&&sql_id'
CONNECT BY PRIOR ash.top_level_sql_id = ash.sql_id
ORDER BY ash.sample_time
;
*/
COLUMN FORCE_MATCHING_SIGNATURE FORMAT 99999999999999999999999
COLUMN sql_exec_start FORMAT a20
COLUMN sql_exec_end FORMAT a27
COLUMN duration FORMAT a23
COLUMN sql_opname FORMAT a20
SELECT DISTINCT
ash.sql_opname
, ash.sql_id
, ash.sql_child_number
, ash.FORCE_MATCHING_SIGNATURE
, ash.top_level_sql_id
FROM dba_hist_active_sess_history ash
, v$database d
WHERE ash.dbid = d.dbid
AND ash.top_level_sql_id = '&&sql_id'
AND ash.sample_time > sysdate - '&&days'
;
SELECT --ash.sql_exec_id,
TO_CHAR(NVL(ash.sql_exec_start,MIN(ash.sample_time)),'DD-MON-YY HH24:MI:SS') sql_exec_start
, max(ash.sample_time) sql_exec_end
, max(ash.sample_time) - NVL(ash.sql_exec_start,MIN(ash.sample_time)) duration
, ash.sql_opname
, ash.sql_id
, ash.sql_child_number
, ash.FORCE_MATCHING_SIGNATURE
, ash.top_level_sql_id
FROM dba_hist_active_sess_history ash
, v$database d
WHERE ash.dbid = d.dbid
AND ash.top_level_sql_id = '&&sql_id'
AND ash.sample_time > sysdate - '&&days'
GROUP BY ash.FORCE_MATCHING_SIGNATURE
, ash.sql_exec_id
, ash.sql_exec_start
, ash.sql_id
, ash.sql_child_number
, ash.sql_opname
, ash.top_level_sql_id
ORDER BY max(ash.sample_time) asc
, NVL(ash.sql_exec_start,MIN(ash.sample_time)) ASC
;
@@footer

42
vg/awr_sqlplan_flips.sql Normal file
View File

@@ -0,0 +1,42 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display all SQL Ids with degraded execution plan flips
* Parameters : 1 - Number of days
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 11-Oct-12 Vishal Gupta Created
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE DAYS
DEFINE DAYS="&&1"
COLUMN _DAYS NEW_VALUE DAYS NOPRINT
set term off
SELECT DECODE('&&DAYS','','7','&&DAYS') "_DAYS"
FROM DUAL;
set term on
/************************************
* CONFIGURATION PARAMETERS
************************************/
DEFINE elapsed_time_threshold=
@@footer

244
vg/awr_sqlstats.sql Normal file
View File

@@ -0,0 +1,244 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display SQLStats from AWR
* Version : 10.1 and above
* Parameters : 1 - SQL_ID
* 2 - PLAN_HASH_VALUE (Use % as wildcard)
* 3 - Number of Days (Default 7 days)
* 4 - Whereclause
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 10-Feb-16 Vishal Gupta Add following columns to output
* - End of Fetch Count
* - Phy Read Requests
* - Phy Write Requests
* Added conditional use of follwoing based on version
* - Force matching signature
* 13-Feb-14 Vishal Gupta Add PX_SERVERS to output
* 09-Oct-12 Vishal Gupta Removed the instance_number from output and
* aggregated stats for all instances in output.
* 23-Apr-12 Vishal Gupta Added PLAN_HASH_VALUE as the input variable
* 20-Mar-12 Vishal Gupta Added PLAN_HASH_VALUE in output
* 08-Mar-12 Vishal Gupta Intial version
*
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE sql_id
UNDEFINE plan_hash_value
UNDEFINE days
UNDEFINE whereclause
UNDEFINE force_matching_signature
UNDEFINE use_force_matching_signature
DEFINE sql_id="&&1"
DEFINE plan_hash_value="&&2"
DEFINE days="&&3"
DEFINE whereclause="&&4"
DEFINE force_matching_signature=""
COLUMN _plan_hash_value NEW_VALUE plan_hash_value NOPRINT
COLUMN _days NEW_VALUE days NOPRINT
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
set term off
SELECT DECODE('&&plan_hash_value','','%','&&plan_hash_value') "_plan_hash_value"
, DECODE('&&days','','7','&&days') "_days"
, DECODE('&&sql_id','%','%','') "_force_matching_signature"
FROM DUAL;
set term on
/************************************
* CONFIGURATION PARAMETERS
************************************/
DEFINE COUNT_SMALL_FORMAT=99,999
DEFINE COUNT_SMALL_DIVIDER="1"
DEFINE COUNT_SMALL_HEADING="#"
--DEFINE COUNT_SMALL_DIVIDER="1000"
--DEFINE COUNT_SMALL_HEADING="#1000"
DEFINE COUNT_FORMAT=99,999
DEFINE COUNT_DIVIDER="1"
DEFINE COUNT_HEADING="#"
--DEFINE COUNT_DIVIDER="1000"
--DEFINE COUNT_HEADING="#1000"
DEFINE COUNT_LARGE_FORMAT=99,999
--DEFINE COUNT_LARGE_DIVIDER="1"
--DEFINE COUNT_LARGE_HEADING="#"
DEFINE COUNT_LARGE_DIVIDER="1000"
DEFINE COUNT_LARGE_HEADING="#1000"
--DEFINE COUNT_LARGE_DIVIDER="1000000"
--DEFINE COUNT_LARGE_HEADING="million"
DEFINE BYTES_FORMAT=99,999
--DEFINE BYTES_DIVIDER="1024"
--DEFINE BYTES_HEADING="KB"
--DEFINE BYTES_DIVIDER="1024/1024"
--DEFINE BYTES_HEADING="MB"
DEFINE BYTES_DIVIDER="1024/1024/1024"
DEFINE BYTES_HEADING="GB"
DEFINE TIME_FORMAT=9,999
DEFINE TIME_DIVIDER="60"
DEFINE TIME_HEADING="min"
/************************************/
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
set term off
select NULL
&&_IF_ORA_10gR2_OR_HIGHER , to_char(ss2.force_matching_signature) "_force_matching_signature"
from v$database d
, dba_hist_sqlstat ss2
where d.dbid = ss2.dbid
AND ss2.sql_id = '&&sql_id'
and rownum = 1
;
select CASE WHEN '&&force_matching_signature' IS NULL THEN '0'
WHEN '&&force_matching_signature' = '' THEN '0'
ELSE '&&force_matching_signature'
END "_force_matching_signature"
from dual
;
set term on
/************************************/
Prompt
Prompt **************************************************************
Prompt * AWR SQL Executions Statistics (Cummulative)
Prompt * (Force Matching Signature = '&&force_matching_signature')
PROMPT *
PROMPT * Input Parameters
PROMPT * - SQL Id = '&&sql_id'
PROMPT * - Plan Hash Value = '&&plan_hash_value'
PROMPT * - Days = '&&days'
PROMPT * - WhereClause = '&&whereclause'
Prompt **************************************************************
COLUMN seperator HEADING "!|!|!|!" FORMAT a1
COLUMN end_interval_time HEADING "Snap Time" FORMAT a15
COLUMN instance_number HEADING "I#" FORMAT 99
COLUMN SQL_ID HEADING "SQLId" FORMAT a13
COLUMN plan_hash_value HEADING "Plan|Hash|Value" FORMAT 999999999999
COLUMN iowait_total HEADING "IO|Wait|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT
COLUMN apwait_total HEADING "Appl|Wait|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT
COLUMN ccwait_total HEADING "Conc|Wait|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT
COLUMN clwait_total HEADING "Cluster|Wait|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT
COLUMN plsexec_time_total HEADING "PLsexec|Time|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT
COLUMN cpu_time_total HEADING "CPU|Time|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT
COLUMN elapsed_time_total HEADING "Elapsed|Time|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT
COLUMN executions_delta HEADING "Exec|Delta|(&COUNT_SMALL_HEADING)" FORMAT &COUNT_SMALL_FORMAT
COLUMN executions_total HEADING "Exec|Total|(&COUNT_HEADING)" FORMAT &COUNT_FORMAT
COLUMN end_of_fetch_count_total HEADING "End Of|Fetch|Total|(&COUNT_HEADING)" FORMAT &COUNT_FORMAT
COLUMN invalidations_total HEADING "Invalid|Total|(&COUNT_HEADING)" FORMAT &COUNT_FORMAT
COLUMN px_servers_execs_total HEADING "Par'l|Serv|Exec|Total|(&COUNT_SMALL_HEADING)" FORMAT 999
--COLUMN px_servers_execs_total HEADING "Par'l|Server|Exec|Total|(&COUNT_SMALL_HEADING)" FORMAT &COUNT_SMALL_FORMAT
COLUMN rows_processed_total HEADING "Rows|Total|(&COUNT_LARGE_HEADING)" FORMAT &COUNT_LARGE_FORMAT
COLUMN sorts_total HEADING "Sorts|Total|(&COUNT_SMALL_HEADING)" FORMAT &COUNT_SMALL_FORMAT
COLUMN buffer_gets_bytes_delta HEADING "Logical|Read|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN buffer_gets_total HEADING "Buffer|Gets|Total|(&COUNT_LARGE_HEADING)" FORMAT &COUNT_LARGE_FORMAT
COLUMN physical_read_requests_total HEADING "Phy|Read|Req|(&COUNT_LARGE_HEADING)" FORMAT &COUNT_LARGE_FORMAT
COLUMN physical_write_requests_total HEADING "Phy|Write|Req|(&COUNT_LARGE_HEADING)" FORMAT &COUNT_LARGE_FORMAT
COLUMN direct_writes_total HEADING "Direct|Path|Write|Total|(&COUNT_LARGE_HEADING)" FORMAT &COUNT_LARGE_FORMAT
COLUMN optimized_physical_reads_total HEADING "Optim'd|Phy|Read|Req|(&COUNT_LARGE_HEADING)" FORMAT &COUNT_LARGE_FORMAT
COLUMN physical_read_bytes_total HEADING "Phy|Read|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN physical_write_bytes_total HEADING "Phy|Write|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN io_interconnect_bytes_total HEADING "IO|Inter|Connect|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN io_offload_elig_bytes_total HEADING "IO|Offload|Elig|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN io_offload_return_bytes_total HEADING "IO|Offload|Return|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN cell_uncompressed_bytes_total HEADING "Cell|UnComp|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
COLUMN sql_profile HEADING "sql_profile" FORMAT a30
SELECT TO_CHAR(MAX(ss.end_interval_time),'DD-MON-YY HH24:MI') end_interval_time
--, ss.instance_number
, ss.sql_id
, ss.plan_hash_value
, ROUND(SUM(ss.iowait_total)/1000000/&TIME_DIVIDER) iowait_total
, ROUND(SUM(ss.apwait_total)/1000000/&TIME_DIVIDER) apwait_total
, ROUND(SUM(ss.ccwait_total)/1000000/&TIME_DIVIDER) ccwait_total
, ROUND(SUM(ss.clwait_total)/1000000/&TIME_DIVIDER) clwait_total
--, ROUND(SUM(ss.plsexec_time_total)/1000000/&TIME_DIVIDER) plsexec_time_total
, ROUND(SUM(ss.cpu_time_total)/1000000/&TIME_DIVIDER) cpu_time_total
, ROUND(SUM(ss.elapsed_time_total)/1000000/&TIME_DIVIDER) elapsed_time_total
, '|' seperator
, SUM(ss.executions_total)/&COUNT_DIVIDER executions_total
&&_IF_ORA_10gR2_OR_HIGHER , SUM(ss.px_servers_execs_total)/&COUNT_SMALL_DIVIDER px_servers_execs_total
, SUM(ss.sorts_total)/&COUNT_SMALL_DIVIDER sorts_total
, SUM(ss.end_of_fetch_count_total )/&COUNT_DIVIDER end_of_fetch_count_total
--, SUM(ss.invalidations_total)/&COUNT_DIVIDER invalidations_total
, SUM(ss.rows_processed_total)/&COUNT_LARGE_DIVIDER rows_processed_total
, SUM(ss.buffer_gets_total)/&COUNT_LARGE_DIVIDER buffer_gets_total
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ROUND(ss.physical_read_requests_total)/&COUNT_LARGE_DIVIDER) physical_read_requests_total
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ROUND(ss.physical_write_requests_total)/&COUNT_LARGE_DIVIDER) physical_write_requests_total
, SUM(ROUND(ss.direct_writes_total)/&COUNT_LARGE_DIVIDER) direct_writes_total
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ROUND(ss.optimized_physical_reads_total)/&COUNT_LARGE_DIVIDER) optimized_physical_reads_total
, '|' seperator
-- , SUM(ss.buffer_gets_delta* ss.value)/&&BYTES_DIVIDER buffer_gets_bytes_delta
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_interconnect_bytes_total)/&BYTES_DIVIDER io_interconnect_bytes_total
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.physical_read_bytes_total)/&BYTES_DIVIDER physical_read_bytes_total
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.physical_write_bytes_total)/&BYTES_DIVIDER physical_write_bytes_total
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_offload_elig_bytes_total)/&BYTES_DIVIDER io_offload_elig_bytes_total
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_offload_return_bytes_total)/&BYTES_DIVIDER io_offload_return_bytes_total
--&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.cell_uncompressed_bytes_total)/&BYTES_DIVIDER cell_uncompressed_bytes_total
, '|' seperator
, ss.sql_profile
-- , ss.module
-- , ss.action
FROM
(
SELECT s.end_interval_time
, ss.*
, p.value
, NVL(LEAD (ss.snap_id) OVER (ORDER BY ss.dbid, ss.instance_number, ss.snap_id),0) next_snap_id
from dba_hist_sqlstat ss
, dba_hist_snapshot s
, v$database d
, v$system_parameter p
where p.name = 'db_block_size'
AND s.dbid = d.dbid
AND ss.instance_number = s.instance_number
AND ss.dbid = s.dbid
AND ss.snap_id = s.snap_id
AND s.end_interval_time > SYSDATE - &&days
&&_IF_ORA_10gR1_OR_LOWER AND ss.sql_id = '&&sql_id'
&&_IF_ORA_10gR2_OR_HIGHER AND ss.sql_id LIKE CASE ss.force_matching_signature
&&_IF_ORA_10gR2_OR_HIGHER WHEN 0 THEN '&&sql_id'
&&_IF_ORA_10gR2_OR_HIGHER ELSE '%'
&&_IF_ORA_10gR2_OR_HIGHER END
&&_IF_ORA_10gR2_OR_HIGHER AND ss.force_matching_signature = '&&force_matching_signature'
AND ss.plan_hash_value LIKE '&&plan_hash_value'
&&whereclause
) ss
WHERE (ss.executions_delta > 0 OR ss.snap_id + 1 <> ss.next_snap_id)
GROUP BY ss.dbid
, ss.snap_id
, ss.sql_id
, ss.plan_hash_value
, ss.sql_profile
ORDER BY TO_CHAR(MAX(ss.end_interval_time),'YYYY-MM-DD HH24:MI')
, ss.plan_hash_value
, ss.sql_profile
;
@@footer

206
vg/awr_sqlstats_daily.sql Normal file
View File

@@ -0,0 +1,206 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display SQLStats from AWR
* Version : 10.1 and above
* Parameters : 1 - SQL_ID
* 2 - Number of Days (Default 30 days)
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 08-Mar-12 Vishal Gupta Intial version
* 20-Mar-12 Vishal Gupta Added PLAN_HASH_VALUE in output
* 23-Apr-12 Vishal Gupta Added PLAN_HASH_VALUE as the input variable
* 09-Oct-12 Vishal Gupta Removed the instance_number from output and
* aggregated stats for all instances in output.
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE sql_id
UNDEFINE days
UNDEFINE whereclause
UNDEFINE force_matching_signature
DEFINE sql_id="&&1"
DEFINE days="&&2"
DEFINE whereclause="&&4"
DEFINE force_matching_signature=""
COLUMN _days NEW_VALUE days NOPRINT
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
set term off
SELECT DECODE('&&days','','30','&&days') "_days"
, DECODE('&&sql_id','%','%','') "_force_matching_signature"
FROM DUAL;
set term on
/************************************
* CONFIGURATION PARAMETERS
************************************/
DEFINE COUNT_SMALL_FORMAT=999,999
--DEFINE COUNT_SMALL_DIVIDER="1"
--DEFINE COUNT_SMALL_HEADING="#"
DEFINE COUNT_SMALL_DIVIDER="1000"
DEFINE COUNT_SMALL_HEADING="#1000"
--DEFINE COUNT_SMALL_DIVIDER="1000000"
--DEFINE COUNT_SMALL_HEADING="#mill"
DEFINE COUNT_FORMAT=99,999,999
DEFINE COUNT_DIVIDER="1"
DEFINE COUNT_HEADING="#"
--DEFINE COUNT_DIVIDER="1000"
--DEFINE COUNT_HEADING="#1000"
--DEFINE COUNT_DIVIDER="1000000"
--DEFINE COUNT_HEADING="million"
DEFINE COUNT_LARGE_FORMAT=99,999,999
--DEFINE COUNT_LARGE_DIVIDER="1"
--DEFINE COUNT_LARGE_HEADING="#"
DEFINE COUNT_LARGE_DIVIDER="1000"
DEFINE COUNT_LARGE_HEADING="#1000"
--DEFINE COUNT_LARGE_DIVIDER="1000000"
--DEFINE COUNT_LARGE_HEADING="million"
DEFINE BYTES_FORMAT="999,999"
--DEFINE BYTES_DIVIDER="1024"
--DEFINE BYTES_HEADING="KB"
--DEFINE BYTES_DIVIDER="1024/1024"
--DEFINE BYTES_HEADING="MB"
DEFINE BYTES_DIVIDER="1024/1024/1024"
DEFINE BYTES_HEADING="GB"
DEFINE TIME_FORMAT=999,999
--DEFINE TIME_DIVIDER="1"
--DEFINE TIME_HEADING="sec"
DEFINE TIME_DIVIDER="60"
DEFINE TIME_HEADING="min"
/************************************/
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
set term off
select to_char(ss2.force_matching_signature) "_force_matching_signature"
from v$database d
JOIN sys.WRH$_SQLSTAT ss2 on ss2.dbid = d.dbid
where ss2.sql_id = '&&sql_id' and rownum = 1;
set term on
/************************************/
Prompt
Prompt ***************************************************************************************************
Prompt * AWR SQL Executions Statistics (Daily - Delta)
Prompt * (Force Matching Signature = '&&force_matching_signature')
PROMPT *
PROMPT * Input Parameters
PROMPT * - SQL Id = '&&sql_id'
PROMPT * - Days = '&&days'
PROMPT * - WhereClause = '&&whereclause'
Prompt ***************************************************************************************************
COLUMN seperator HEADING "!|!|!|!" FORMAT a1
COLUMN end_interval_time HEADING "Date" FORMAT a9
COLUMN instance_number HEADING "I#" FORMAT 99
COLUMN SQL_ID HEADING "SQLId" FORMAT a13
COLUMN force_matching_signature HEADING "Force Matching Signature" FORMAT 999999999999999999999
COLUMN plan_hash_value HEADING "Plan|Hash|Value" FORMAT 999999999999
COLUMN invalidations_delta HEADING "Invalid|Delta|(&&COUNT_HEADING)" FORMAT 9,999
COLUMN iowait_delta HEADING "IO|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN apwait_delta HEADING "Appl|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN ccwait_delta HEADING "Conc|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN clwait_delta HEADING "Cluster|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN plsexec_time_delta HEADING "PLsexec|Time|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN cpu_time_delta HEADING "CPU|Time|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN elapsed_time_delta HEADING "Elapsed|Time|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN executions_delta HEADING "Exec|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN px_servers_execs_delta HEADING "Par'l|Serv|Exec|Delta|(&&COUNT_HEADING)" FORMAT 999
COLUMN rows_processed_delta HEADING "Rows|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN sorts_delta HEADING "Sorts|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN buffer_gets_bytes_delta HEADING "Logical|Read|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN buffer_gets_delta HEADING "Buffer|Gets|Delta|(&&COUNT_LARGE_HEADING)" FORMAT &&COUNT_LARGE_FORMAT
COLUMN direct_writes_delta HEADING "Direct|Write|Delta|(&&BYTES_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN io_interconnect_bytes_delta HEADING "IO|Inter|Connect|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN physical_read_bytes_delta HEADING "Phy|Read|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN physical_write_bytes_delta HEADING "Phy|Write|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN optimized_physical_reads_delta HEADING "Optimized|Phy|ReadReq|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN io_offload_elig_bytes_delta HEADING "IO|Offload|Elig|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN io_offload_return_bytes_delta HEADING "IO|Offload|Return|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN sql_profile HEADING "sql_profile" FORMAT a30
SELECT TO_CHAR(TRUNC(s.end_interval_time,'DD'),'DD-MON-YY') end_interval_time
, ss.force_matching_signature
, max(ss.sql_id) sql_id
--, ss.plan_hash_value
, ROUND(SUM(ss.iowait_delta)/1000000/&&TIME_DIVIDER) iowait_delta
, ROUND(SUM(ss.apwait_delta)/1000000/&&TIME_DIVIDER) apwait_delta
, ROUND(SUM(ss.ccwait_delta)/1000000/&&TIME_DIVIDER) ccwait_delta
, ROUND(SUM(ss.clwait_delta)/1000000/&&TIME_DIVIDER) clwait_delta
, ROUND(SUM(ss.plsexec_time_delta)/1000000/&&TIME_DIVIDER) plsexec_time_delta
, ROUND(SUM(ss.cpu_time_delta)/1000000/&&TIME_DIVIDER) cpu_time_delta
, ROUND(SUM(ss.elapsed_time_delta)/1000000/&&TIME_DIVIDER) elapsed_time_delta
, '|' seperator
, SUM(ss.executions_delta)/&&COUNT_DIVIDER executions_delta
--&&_IF_ORA_10gR2_OR_HIGHER , SUM(ss.px_servers_execs_delta)/&&COUNT_DIVIDER px_servers_execs_delta
-- , SUM(ss.invalidations_delta)/&&COUNT_DIVIDER invalidations_delta
, SUM(ss.rows_processed_delta)/&&COUNT_DIVIDER rows_processed_delta
, SUM(ss.sorts_delta)/&&COUNT_DIVIDER sorts_delta
, SUM(ss.buffer_gets_delta)/&&COUNT_LARGE_DIVIDER buffer_gets_delta
, SUM(ss.buffer_gets_delta* p.value)/&&BYTES_DIVIDER buffer_gets_bytes_delta
, ROUND(SUM(ss.direct_writes_delta)/&&COUNT_DIVIDER) direct_writes_delta
, '|' seperator
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_interconnect_bytes_delta)/&&BYTES_DIVIDER io_interconnect_bytes_delta
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.physical_read_bytes_delta)/&&BYTES_DIVIDER physical_read_bytes_delta
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.physical_write_bytes_delta)/&&BYTES_DIVIDER physical_write_bytes_delta
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.optimized_physical_reads_delta)/&&COUNT_DIVIDER optimized_physical_reads_delta
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_offload_elig_bytes_delta)/&&BYTES_DIVIDER io_offload_elig_bytes_delta
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_offload_return_bytes_delta)/&&BYTES_DIVIDER io_offload_return_bytes_delta
, '|' seperator
from dba_hist_sqlstat ss
, dba_hist_snapshot s
, v$database d
, v$system_parameter p
where p.name = 'db_block_size'
AND ss.instance_number = s.instance_number
AND ss.dbid = s.dbid
AND ss.snap_id = s.snap_id
AND ss.dbid = d.dbid
AND s.end_interval_time > SYSDATE - &&days
AND ss.sql_id LIKE CASE ss.force_matching_signature
WHEN 0 THEN '&&sql_id'
ELSE '%'
END
AND ss.force_matching_signature LIKE '&&force_matching_signature'
--AND ss.executions_delta > 0
&&whereclause
GROUP BY ss.dbid
, TRUNC(s.end_interval_time,'DD')
, ss.force_matching_signature
--, ss.plan_hash_value
ORDER BY TRUNC(s.end_interval_time,'DD')
, ss.force_matching_signature
--, ss.plan_hash_value
;
UNDEFINE sql_id
UNDEFINE plan_hash_value
UNDEFINE days
UNDEFINE force_matching_signature
UNDEFINE whereclause
@@footer

201
vg/awr_sqlstats_delta.sql Normal file
View File

@@ -0,0 +1,201 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display SQLStats from AWR
* Version : 10.1 and above
* Parameters : 1 - SQL_ID (Use % as wildcard)
* 2 - PLAN_HASH_VALUE (Use % as wildcard)
* 3 - Number of Days (Default 7 days)
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 08-Mar-12 Vishal Gupta Intial version
* 20-Mar-12 Vishal Gupta Added PLAN_HASH_VALUE in output
* 23-Apr-12 Vishal Gupta Added PLAN_HASH_VALUE as the input variable
* 09-Oct-12 Vishal Gupta Removed the instance_number from output and
* aggregated stats for all instances in output.
*
*/
/************************************
* INPUT PARAMETERS
************************************/
DEFINE sql_id="&&1"
DEFINE plan_hash_value="&&2"
DEFINE days="&&3"
DEFINE whereclause="&&4"
DEFINE force_matching_signature=""
COLUMN _plan_hash_value NEW_VALUE plan_hash_value NOPRINT
COLUMN _days NEW_VALUE days NOPRINT
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
set term off
SELECT DECODE('&&plan_hash_value','','%','&&plan_hash_value') "_plan_hash_value"
, DECODE('&&days','','7','&&days') "_days"
, DECODE('&&sql_id','%','%','') "_force_matching_signature"
FROM DUAL;
set term on
/************************************
* CONFIGURATION PARAMETERS
************************************/
DEFINE COUNT_SMALL_FORMAT=99,999
DEFINE COUNT_SMALL_DIVIDER="1"
DEFINE COUNT_SMALL_HEADING="#"
--DEFINE COUNT_SMALL_DIVIDER="1000"
--DEFINE COUNT_SMALL_HEADING="#1000"
--DEFINE COUNT_SMALL_DIVIDER="1000000"
--DEFINE COUNT_SMALL_HEADING="#mill"
DEFINE COUNT_FORMAT=999,999
DEFINE COUNT_DIVIDER="1"
DEFINE COUNT_HEADING="#"
--DEFINE COUNT_DIVIDER="1000"
--DEFINE COUNT_HEADING="#1000"
--DEFINE COUNT_HEADING="#1000"
--DEFINE COUNT_DIVIDER="1000000"
--DEFINE COUNT_HEADING="million"
DEFINE BYTES_FORMAT=999,999
--DEFINE BYTES_DIVIDER="1024"
--DEFINE BYTES_HEADING="KB"
--DEFINE BYTES_DIVIDER="1024/1024"
--DEFINE BYTES_HEADING="MB"
DEFINE BYTES_DIVIDER="1024/1024/1024"
DEFINE BYTES_HEADING="GB"
DEFINE TIME_FORMAT=9,999
--DEFINE TIME_DIVIDER="1"
--DEFINE TIME_HEADING="sec"
DEFINE TIME_DIVIDER="60"
DEFINE TIME_HEADING="min"
/************************************/
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
set term off
select to_char(ss2.force_matching_signature) "_force_matching_signature"
from dba_hist_sqlstat ss2
where ss2.sql_id = '&&sql_id' and rownum = 1;
set term on
/************************************/
Prompt
Prompt ***************************************************************************************************
Prompt * AWR SQL Executions Statistics (Delta)
Prompt * (Force Matching Signature = '&&force_matching_signature')
PROMPT *
PROMPT * Input Parameters
PROMPT * - SQL Id = '&&sql_id'
PROMPT * - Plan Hash Value = '&&plan_hash_value'
PROMPT * - Days = '&&days'
PROMPT * - WhereClause = '&&whereclause'
Prompt ***************************************************************************************************
COLUMN seperator HEADING "!|!|!|!" FORMAT a1
COLUMN end_interval_time HEADING "Snap Time" FORMAT a15
COLUMN instance_number HEADING "I#" FORMAT 99
COLUMN SQL_ID HEADING "SQLId" FORMAT a13
COLUMN plan_hash_value HEADING "Plan|Hash|Value" FORMAT 999999999999
COLUMN invalidations_delta HEADING "Invalid|Delta|(&&COUNT_HEADING)" FORMAT 9,999
COLUMN iowait_delta HEADING "IO|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN apwait_delta HEADING "Appl|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN ccwait_delta HEADING "Conc|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN clwait_delta HEADING "Cluster|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN plsexec_time_delta HEADING "PLsexec|Time|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN cpu_time_delta HEADING "CPU|Time|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN elapsed_time_delta HEADING "Elapsed|Time|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN executions_delta HEADING "Exec|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN px_servers_execs_delta HEADING "Par'l|Serv|Exec|Delta" FORMAT 999
COLUMN rows_processed_delta HEADING "Rows|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN sorts_delta HEADING "Sorts|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN buffer_gets_bytes_delta HEADING "Logical|Read|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN buffer_gets_delta HEADING "Buffer|Gets|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN direct_writes_delta HEADING "Direct|Write|Delta|(&&BYTES_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN io_interconnect_bytes_delta HEADING "IO|Inter|Connect|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN physical_read_bytes_delta HEADING "Phy|Read|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN physical_write_bytes_delta HEADING "Phy|Write|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN optimized_physical_reads_delta HEADING "Optimized|Phy|ReadReq|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN io_offload_elig_bytes_delta HEADING "IO|Offload|Elig|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN io_offload_return_bytes_delta HEADING "IO|Offload|Return|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN sql_profile HEADING "sql_profile" FORMAT a30
SELECT TO_CHAR(MAX(s.end_interval_time),'DD-MON-YY HH24:MI') end_interval_time
, ss.sql_id
, ss.plan_hash_value
, ROUND(SUM(ss.iowait_delta)/1000000/&&TIME_DIVIDER) iowait_delta
, ROUND(SUM(ss.apwait_delta)/1000000/&&TIME_DIVIDER) apwait_delta
, ROUND(SUM(ss.ccwait_delta)/1000000/&&TIME_DIVIDER) ccwait_delta
, ROUND(SUM(ss.clwait_delta)/1000000/&&TIME_DIVIDER) clwait_delta
, ROUND(SUM(ss.plsexec_time_delta)/1000000/&&TIME_DIVIDER) plsexec_time_delta
, ROUND(SUM(ss.cpu_time_delta)/1000000/&&TIME_DIVIDER) cpu_time_delta
, ROUND(SUM(ss.elapsed_time_delta)/1000000/&&TIME_DIVIDER) elapsed_time_delta
, '|' seperator
, SUM(ss.executions_delta)/&&COUNT_DIVIDER executions_delta
&&_IF_ORA_10gR2_OR_HIGHER , SUM(ss.px_servers_execs_delta) px_servers_execs_delta
-- , SUM(ss.invalidations_delta)/&&COUNT_DIVIDER invalidations_delta
, SUM(ss.rows_processed_delta)/&&COUNT_DIVIDER rows_processed_delta
, SUM(ss.sorts_delta)/&&COUNT_DIVIDER sorts_delta
, SUM(ss.buffer_gets_delta)/&&COUNT_DIVIDER buffer_gets_delta
, SUM(ss.buffer_gets_delta* p.value)/&&BYTES_DIVIDER buffer_gets_bytes_delta
, ROUND(SUM(ss.direct_writes_delta)/&&COUNT_DIVIDER) direct_writes_delta
, '|' seperator
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_interconnect_bytes_delta)/&&BYTES_DIVIDER io_interconnect_bytes_delta
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.physical_read_bytes_delta)/&&BYTES_DIVIDER physical_read_bytes_delta
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.physical_write_bytes_delta)/&&BYTES_DIVIDER physical_write_bytes_delta
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.optimized_physical_reads_delta)/&&COUNT_DIVIDER optimized_physical_reads_delta
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_offload_elig_bytes_delta)/&&BYTES_DIVIDER io_offload_elig_bytes_delta
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_offload_return_bytes_delta)/&&BYTES_DIVIDER io_offload_return_bytes_delta
, '|' seperator
, ss.sql_profile
from dba_hist_sqlstat ss
, dba_hist_snapshot s
, v$database d
, v$system_parameter p
where p.name = 'db_block_size'
AND ss.instance_number = s.instance_number
AND ss.dbid = s.dbid
AND ss.snap_id = s.snap_id
AND ss.dbid = d.dbid
AND s.end_interval_time > SYSDATE - &&days
AND ss.sql_id LIKE CASE ss.force_matching_signature
WHEN 0 THEN '&&sql_id'
ELSE '%'
END
AND ss.force_matching_signature LIKE '&&force_matching_signature'
AND ss.plan_hash_value LIKE '&&plan_hash_value'
--AND ss.executions_delta > 0
&&whereclause
GROUP BY ss.dbid
, ss.snap_id
, ss.sql_id
, ss.plan_hash_value
, ss.sql_profile
ORDER BY TO_CHAR(MAX(s.end_interval_time),'YYYY-MM-DD HH24:MI')
, ss.sql_id
, ss.plan_hash_value
, ss.sql_profile
;
UNDEFINE sql_id
UNDEFINE plan_hash_value
UNDEFINE days
UNDEFINE force_matching_signature
UNDEFINE whereclause
@@footer

View File

@@ -0,0 +1,201 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display SQLStats per execution from AWR
* Version : 10.1 and above
* Parameters : 1 - SQL_ID
* 2 - PLAN_HASH_VALUE (Use % as wildcard)
* 3 - Number of Days (Default 7 days)
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 08-Mar-12 Vishal Gupta Intial version
* 20-Mar-12 Vishal Gupta Added PLAN_HASH_VALUE in output
*
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE sql_id
UNDEFINE plan_hash_value
UNDEFINE days
UNDEFINE force_matching_signature
UNDEFINE whereclause
DEFINE sql_id="&&1"
DEFINE plan_hash_value="&&2"
DEFINE days="&&3"
DEFINE whereclause="&&4"
DEFINE force_matching_signature=""
COLUMN _plan_hash_value NEW_VALUE plan_hash_value NOPRINT
COLUMN _days NEW_VALUE days NOPRINT
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
set term on
SELECT DECODE('&&plan_hash_value','','%','&&plan_hash_value') "_plan_hash_value"
, DECODE('&&days','','7','&&days') "_days"
, DECODE('&&sql_id','%','%','') "_force_matching_signature"
FROM DUAL;
set term off
/************************************
* CONFIGURATION PARAMETERS
************************************/
DEFINE COUNT_SMALL_FORMAT=9,999
DEFINE COUNT_SMALL_DIVIDER="1"
DEFINE COUNT_SMALL_HEADING="#"
--DEFINE COUNT_DIVIDER="1000"
--DEFINE COUNT_HEADING="#1000"
DEFINE COUNT_FORMAT=999,999,999
DEFINE COUNT_DIVIDER="1"
DEFINE COUNT_HEADING="#"
--DEFINE COUNT_DIVIDER="1000"
--DEFINE COUNT_HEADING="#1000"
DEFINE BYTES_FORMAT="999,999"
--DEFINE BYTES_DIVIDER="1024"
--DEFINE BYTES_HEADING="KB"
DEFINE BYTES_DIVIDER="1024/1024"
DEFINE BYTES_HEADING="MB"
--DEFINE BYTES_DIVIDER="1024/1024/1024"
--DEFINE BYTES_HEADING="GB"
DEFINE TIME_FORMAT=9,999
--DEFINE TIME_DIVIDER="0.001"
--DEFINE TIME_HEADING="msec"
DEFINE TIME_DIVIDER="1"
DEFINE TIME_HEADING="sec"
--DEFINE TIME_DIVIDER="60"
--DEFINE TIME_HEADING="min"
/************************************/
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
set term off
select to_char(ss2.force_matching_signature) "_force_matching_signature"
from dba_hist_sqlstat ss2
where ss2.sql_id = '&&sql_id' and rownum = 1;
set term on
/************************************/
Prompt
Prompt ******************************************************************
Prompt * AWR SQL Executions Statistics (All Figures Delta are per execution)
Prompt * (Force Matching Signature = '&&force_matching_signature')
Prompt *
PROMPT * Input Parameters
PROMPT * - SQL Id = '&&sql_id'
PROMPT * - Plan Hash Value = '&&plan_hash_value'
PROMPT * - Days = '&&days'
PROMPT * - WhereClause = '&&whereclause'
Prompt ******************************************************************
COLUMN seperator HEADING "!|!|!|!" FORMAT a1
COLUMN end_interval_time HEADING "Snap Time" FORMAT a15
COLUMN instance_number HEADING "I#" FORMAT 99
COLUMN SQL_ID HEADING "SQLId" FORMAT a13
COLUMN plan_hash_value HEADING "Plan|Hash|Value" FORMAT 999999999999
COLUMN invalidations_delta HEADING "Invalid|(&&COUNT_HEADING)|Per|Exec" FORMAT 9,999
COLUMN iowait_delta HEADING "IO|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT
COLUMN apwait_delta HEADING "Appl|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT
COLUMN ccwait_delta HEADING "Conc|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT
COLUMN clwait_delta HEADING "Cluster|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT
COLUMN plsexec_time_delta HEADING "PLsexec|Time|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT
COLUMN cpu_time_delta HEADING "CPU|Time|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT
COLUMN elapsed_time_delta HEADING "Elapsed|Time|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT
COLUMN executions_delta HEADING "Delta|Exec|(&&COUNT_HEADING)" FORMAT 9,999
COLUMN executions_total HEADING "Total|Exec|(&&COUNT_HEADING)" FORMAT 9,999
COLUMN px_servers_execs_delta HEADING "Par'l|Serv|Exec|Delta|(&COUNT_SMALL_HEADING)|Per|Exec" FORMAT 999
--COLUMN px_servers_execs_delta HEADING "Par'l|Serv|Exec|Delta|(&COUNT_SMALL_HEADING)|Per|Exec" FORMAT &&COUNT_SMALL_FORMAT
COLUMN rows_processed_delta HEADING "Rows|(&&COUNT_HEADING)|Per|Exec" FORMAT &&COUNT_FORMAT
COLUMN sorts_delta HEADING "Sorts|(&&COUNT_SMALL_HEADING)|Per|Exec" FORMAT &&COUNT_SMALL_FORMAT
COLUMN buffer_gets_delta HEADING "Buffer|Gets|(&&COUNT_HEADING)|Per|Exec" FORMAT &&COUNT_FORMAT
COLUMN direct_writes_delta HEADING "Direct|WriteReq|(&&COUNT_HEADING)|Per|Exec" FORMAT &&COUNT_FORMAT
COLUMN io_interconnect_bytes_delta HEADING "IO|Inter|Connect|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT
COLUMN physical_read_bytes_delta HEADING "Phy|Read|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT
COLUMN physical_write_bytes_delta HEADING "Phy|Write|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT
COLUMN optimized_physical_reads_delta HEADING "Optimized|Phy|ReadReq|(&&COUNT_HEADING)|Per|Exec" FORMAT &&COUNT_FORMAT
COLUMN io_offload_elig_bytes_delta HEADING "IO|Offload|Elig|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT
COLUMN io_offload_return_bytes_delta HEADING "IO|Offload|Return|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT
COLUMN sql_profile HEADING "sql_profile" FORMAT a30
SELECT TO_CHAR(MAX(s.end_interval_time),'DD-MON-YY HH24:MI') end_interval_time
--, ss.instance_number
, ss.sql_id
, ss.plan_hash_value
, '|' seperator
, ROUND(SUM(ss.iowait_delta)/1000000/SUM(GREATEST(ss.executions_delta,1))/&&TIME_DIVIDER) iowait_delta
, ROUND(SUM(ss.apwait_delta)/1000000/SUM(GREATEST(ss.executions_delta,1))/&&TIME_DIVIDER) apwait_delta
, ROUND(SUM(ss.ccwait_delta)/1000000/SUM(GREATEST(ss.executions_delta,1))/&&TIME_DIVIDER) ccwait_delta
, ROUND(SUM(ss.clwait_delta)/1000000/SUM(GREATEST(ss.executions_delta,1))/&&TIME_DIVIDER) clwait_delta
, ROUND(SUM(ss.plsexec_time_delta)/1000000/SUM(GREATEST(ss.executions_delta,1))/&&TIME_DIVIDER) plsexec_time_delta
, ROUND(SUM(ss.cpu_time_delta)/1000000/SUM(GREATEST(ss.executions_delta,1))/&&TIME_DIVIDER) cpu_time_delta
, ROUND(SUM(ss.elapsed_time_delta)/1000000/SUM(GREATEST(ss.executions_delta,1))/&&TIME_DIVIDER) elapsed_time_delta
, '|' seperator
, SUM(GREATEST(ss.executions_total,1))/&&COUNT_DIVIDER executions_total
&&_IF_ORA_10gR2_OR_HIGHER , SUM(ss.px_servers_execs_delta)/SUM(GREATEST(ss.executions_delta,1))/&&COUNT_DIVIDER px_servers_execs_delta
-- , ss.invalidations_delta/GREATEST(ss.executions_delta,1)/&&COUNT_DIVIDER invalidations_delta
, SUM(ss.rows_processed_delta)/SUM(GREATEST(ss.executions_delta,1))/&&COUNT_DIVIDER rows_processed_delta
, SUM(ss.sorts_delta)/SUM(GREATEST(ss.executions_delta,1))/&&COUNT_SMALL_DIVIDER sorts_delta
, SUM(ss.buffer_gets_delta)/SUM(GREATEST(ss.executions_delta,1))/&&COUNT_DIVIDER buffer_gets_delta
, ROUND(SUM(ss.direct_writes_delta)/SUM(GREATEST(ss.executions_delta,1))/&&COUNT_DIVIDER) direct_writes_delta
, '|' seperator
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_interconnect_bytes_delta)/SUM(GREATEST(ss.executions_delta,1))/&&BYTES_DIVIDER io_interconnect_bytes_delta
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.physical_read_bytes_delta)/SUM(GREATEST(ss.executions_delta,1))/&&BYTES_DIVIDER physical_read_bytes_delta
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.physical_write_bytes_delta)/SUM(GREATEST(ss.executions_delta,1))/&&BYTES_DIVIDER physical_write_bytes_delta
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.optimized_physical_reads_delta)/SUM(GREATEST(ss.executions_delta,1))/&&COUNT_DIVIDER optimized_physical_reads_delta
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_offload_elig_bytes_delta)/SUM(GREATEST(ss.executions_delta,1))/&&BYTES_DIVIDER io_offload_elig_bytes_delta
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_offload_return_bytes_delta)/SUM(GREATEST(ss.executions_delta,1))/&&BYTES_DIVIDER io_offload_return_bytes_delta
, '|' seperator
, ss.sql_profile
from dba_hist_sqlstat ss
, dba_hist_snapshot s
, v$database d
where ss.instance_number = s.instance_number
AND ss.dbid = s.dbid
AND ss.snap_id = s.snap_id
AND ss.dbid = d.dbid
AND s.end_interval_time > SYSDATE - &&days
AND ss.sql_id LIKE CASE ss.force_matching_signature
WHEN 0 THEN '&&sql_id'
ELSE '%'
END
AND ss.force_matching_signature LIKE '&&force_matching_signature'
AND ss.plan_hash_value LIKE '&&plan_hash_value'
--AND ss.executions_delta > 0
&&whereclause
GROUP BY ss.dbid
, ss.snap_id
, ss.sql_id
, ss.plan_hash_value
, ss.sql_profile
ORDER BY TO_CHAR(MAX(s.end_interval_time),'YYYY-MM-DD HH24:MI')
, ss.sql_id
, ss.plan_hash_value
, ss.sql_profile
;
@@footer

View File

@@ -0,0 +1,201 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display SQLStats per execution from AWR
* Version : 10.1 and above
* Parameters : 1 - SQL_ID (Use % as wildcard)
* 2 - PLAN_HASH_VALUE (Use % as wildcard)
* 3 - Number of Days (Default 7 days)
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 08-Mar-12 Vishal Gupta Intial version
* 20-Mar-12 Vishal Gupta Added PLAN_HASH_VALUE in output
*
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE sql_id
UNDEFINE plan_hash_value
UNDEFINE days
UNDEFINE force_matching_signature
UNDEFINE whereclause
DEFINE sql_id="&&1"
DEFINE plan_hash_value="&&2"
DEFINE days="&&3"
DEFINE whereclause="&&4"
DEFINE force_matching_signature=""
COLUMN _plan_hash_value NEW_VALUE plan_hash_value NOPRINT
COLUMN _days NEW_VALUE days NOPRINT
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
set term off
SELECT DECODE('&&plan_hash_value','','%','&&plan_hash_value') "_plan_hash_value"
, DECODE('&&days','','7','&&days') "_days"
, DECODE('&&sql_id','%','%','') "_force_matching_signature"
FROM DUAL;
set term on
/************************************
* CONFIGURATION PARAMETERS
************************************/
DEFINE COUNT_SMALL_FORMAT=9,999
DEFINE COUNT_SMALL_DIVIDER="1"
DEFINE COUNT_SMALL_HEADING="#"
--DEFINE COUNT_DIVIDER="1000"
--DEFINE COUNT_HEADING="#1000"
DEFINE COUNT_FORMAT=999,999
DEFINE COUNT_DIVIDER="1"
DEFINE COUNT_HEADING="#"
--DEFINE COUNT_DIVIDER="100"
--DEFINE COUNT_HEADING="#100"
--DEFINE COUNT_DIVIDER="1000"
--DEFINE COUNT_HEADING="#1000"
DEFINE BYTES_FORMAT="999,999"
--DEFINE BYTES_DIVIDER="1024"
--DEFINE BYTES_HEADING="KB"
DEFINE BYTES_DIVIDER="1024/1024"
DEFINE BYTES_HEADING="MB"
--DEFINE BYTES_DIVIDER="1024/1024/1024"
--DEFINE BYTES_HEADING="GB"
DEFINE TIME_FORMAT=9999
--DEFINE TIME_DIVIDER="0.001"
--DEFINE TIME_HEADING="msec"
DEFINE TIME_DIVIDER="1"
DEFINE TIME_HEADING="sec"
--DEFINE TIME_DIVIDER="60"
--DEFINE TIME_HEADING="min"
/************************************/
set term off
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
select to_char(ss2.force_matching_signature) "_force_matching_signature"
from dba_hist_sqlstat ss2
where ss2.sql_id = '&&sql_id' and rownum = 1;
set term on
/************************************/
Prompt
Prompt ******************************************************************
Prompt * AWR SQL Executions Statistics (All Figures are per execution)
Prompt * (Force Matching Signature = '&&force_matching_signature')
Prompt *
PROMPT * Input Parameters
PROMPT * - SQL Id = '&&sql_id'
PROMPT * - Plan Hash Value = '&&plan_hash_value'
PROMPT * - Days = '&&days'
PROMPT * - WhereClause = '&&whereclause'
Prompt ******************************************************************
COLUMN seperator HEADING "!|!|!|!" FORMAT a1
COLUMN end_interval_time HEADING "Snap Time" FORMAT a15
COLUMN instance_number HEADING "I#" FORMAT 99
COLUMN SQL_ID HEADING "SQLId" FORMAT a13
COLUMN plan_hash_value HEADING "Plan|Hash|Value" FORMAT 999999999999
COLUMN invalidations_total HEADING "Invalid|(&&COUNT_HEADING)|Per|Exec" FORMAT 9,999
COLUMN iowait_total HEADING "IO|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT
COLUMN apwait_total HEADING "Appl|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT
COLUMN ccwait_total HEADING "Conc|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT
COLUMN clwait_total HEADING "Cluster|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT
COLUMN plsexec_time_total HEADING "PLsexec|Time|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT
COLUMN cpu_time_total HEADING "CPU|Time|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT
COLUMN elapsed_time_total HEADING "Elapsed|Time|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT
COLUMN executions_delta HEADING "Delta|Exec|(&&COUNT_HEADING)" FORMAT 999,999
COLUMN executions_total HEADING "Total|Exec|(&&COUNT_HEADING)" FORMAT 999,999
COLUMN px_servers_execs_total HEADING "Par'l|Serv|Exec|(&COUNT_SMALL_HEADING)|Per|Exec" FORMAT 999
--COLUMN px_servers_execs_total HEADING "Par'l|Server|Exec|(&COUNT_SMALL_HEADING)|Per|Exec" FORMAT &COUNT_SMALL_FORMAT
COLUMN rows_processed_total HEADING "Rows|(&&COUNT_HEADING)|Per|Exec" FORMAT &&COUNT_FORMAT
COLUMN sorts_total HEADING "Sorts|(&&COUNT_SMALL_HEADING)|Per|Exec" FORMAT &&COUNT_SMALL_FORMAT
COLUMN buffer_gets_total HEADING "Buffer|Gets|(&&COUNT_HEADING)|Per|Exec" FORMAT 9,999,999
COLUMN direct_writes_total HEADING "Direct|WriteReq|(&&COUNT_HEADING)|Per|Exec" FORMAT &&COUNT_FORMAT
COLUMN io_interconnect_bytes_total HEADING "IO|Inter|Connect|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT
COLUMN physical_read_bytes_total HEADING "Phy|Read|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT
COLUMN physical_write_bytes_total HEADING "Phy|Write|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT
COLUMN optimized_physical_reads_total HEADING "Optimized|Phy|ReadReq|(&&COUNT_HEADING)|Per|Exec" FORMAT &&COUNT_FORMAT
COLUMN io_offload_elig_bytes_total HEADING "IO|Offload|Elig|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT
COLUMN io_offload_return_bytes_total HEADING "IO|Offload|Return|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT
COLUMN sql_profile HEADING "sql_profile" FORMAT a30
SELECT TO_CHAR(ss.end_interval_time,'DD-MON-YY HH24:MI') end_interval_time
, ss.instance_number
, ss.sql_id
, ss.plan_hash_value
, '|' seperator
, ROUND(ss.iowait_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) iowait_total
, ROUND(ss.apwait_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) apwait_total
, ROUND(ss.ccwait_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) ccwait_total
, ROUND(ss.clwait_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) clwait_total
, ROUND(ss.plsexec_time_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) plsexec_time_total
, ROUND(ss.cpu_time_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) cpu_time_total
, ROUND(ss.elapsed_time_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) elapsed_time_total
, '|' seperator
, ss.executions_delta/&&COUNT_DIVIDER executions_delta
, ss.executions_total/&&COUNT_DIVIDER executions_total
&&_IF_ORA_10gR2_OR_HIGHER , ss.px_servers_execs_total/GREATEST(ss.executions_total,1)/&&COUNT_DIVIDER px_servers_execs_total
-- , ss.invalidations_total/GREATEST(ss.executions_total,1)/&&COUNT_DIVIDER invalidations_total
, ss.rows_processed_total/GREATEST(ss.executions_total,1)/&&COUNT_DIVIDER rows_processed_total
, ss.sorts_total/GREATEST(ss.executions_total,1)/&&COUNT_SMALL_DIVIDER sorts_total
, ss.buffer_gets_total/GREATEST(ss.executions_total,1)/&&COUNT_DIVIDER buffer_gets_total
, ROUND(ss.direct_writes_total/GREATEST(ss.executions_total,1)/&&COUNT_DIVIDER) direct_writes_total
, '|' seperator
&&_IF_ORA_11gR2_OR_HIGHER , ss.io_interconnect_bytes_total/GREATEST(ss.executions_total,1)/&&BYTES_DIVIDER io_interconnect_bytes_total
&&_IF_ORA_11gR2_OR_HIGHER , ss.physical_read_bytes_total/GREATEST(ss.executions_total,1)/&&BYTES_DIVIDER physical_read_bytes_total
&&_IF_ORA_11gR2_OR_HIGHER , ss.physical_write_bytes_total/GREATEST(ss.executions_total,1)/&&BYTES_DIVIDER physical_write_bytes_total
&&_IF_ORA_11gR2_OR_HIGHER , ss.optimized_physical_reads_total/GREATEST(ss.executions_total,1)/&&COUNT_DIVIDER optimized_physical_reads_total
&&_IF_ORA_11gR2_OR_HIGHER , ss.io_offload_elig_bytes_total/GREATEST(ss.executions_total,1)/&&BYTES_DIVIDER io_offload_elig_bytes_total
&&_IF_ORA_11gR2_OR_HIGHER , ss.io_offload_return_bytes_total/GREATEST(ss.executions_total,1)/&&BYTES_DIVIDER io_offload_return_bytes_total
, '|' seperator
, ss.sql_profile
FROM
(
SELECT s.end_interval_time
, ss.*
, LEAD (ss.snap_id) OVER (ORDER BY ss.dbid, ss.instance_number, ss.snap_id) next_snap_id
from dba_hist_sqlstat ss
, dba_hist_snapshot s
, v$database d
where ss.instance_number = s.instance_number
AND ss.dbid = s.dbid
AND ss.snap_id = s.snap_id
AND ss.dbid = d.dbid
AND s.end_interval_time > SYSDATE - &&days
AND ss.sql_id LIKE CASE ss.force_matching_signature
WHEN 0 THEN '&&sql_id'
ELSE '%'
END
AND ss.force_matching_signature LIKE '&&force_matching_signature'
AND ss.plan_hash_value LIKE '&&plan_hash_value'
&&whereclause
) ss
WHERE (ss.executions_delta > 0 OR ss.snap_id + 1 <> ss.next_snap_id)
ORDER BY TO_CHAR(ss.end_interval_time,'YYYY-MM-DD HH24:MI')
, ss.instance_number
;
@@footer

View File

@@ -0,0 +1,201 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display SQLStats per execution from AWR
* Version : 10.1 and above
* Parameters : 1 - SQL_ID (Use % as wildcard)
* 2 - PLAN_HASH_VALUE (Use % as wildcard)
* 3 - Number of Days (Default 7 days)
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 08-Mar-12 Vishal Gupta Intial version
* 20-Mar-12 Vishal Gupta Added PLAN_HASH_VALUE in output
*
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE sql_id
UNDEFINE plan_hash_value
UNDEFINE days
UNDEFINE force_matching_signature
UNDEFINE whereclause
DEFINE sql_id="&&1"
DEFINE plan_hash_value="&&2"
DEFINE days="&&3"
DEFINE whereclause="&&4"
DEFINE force_matching_signature=""
COLUMN _plan_hash_value NEW_VALUE plan_hash_value NOPRINT
COLUMN _days NEW_VALUE days NOPRINT
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
set term off
SELECT DECODE('&&plan_hash_value','','%','&&plan_hash_value') "_plan_hash_value"
, DECODE('&&days','','7','&&days') "_days"
, DECODE('&&sql_id','%','%','') "_force_matching_signature"
FROM DUAL;
set term on
/************************************
* CONFIGURATION PARAMETERS
************************************/
DEFINE COUNT_SMALL_FORMAT=9,999
DEFINE COUNT_SMALL_DIVIDER="1"
DEFINE COUNT_SMALL_HEADING="#"
--DEFINE COUNT_DIVIDER="1000"
--DEFINE COUNT_HEADING="#1000"
DEFINE COUNT_FORMAT=999,999,999
DEFINE COUNT_DIVIDER="1"
DEFINE COUNT_HEADING="#"
--DEFINE COUNT_DIVIDER="100"
--DEFINE COUNT_HEADING="#100"
--DEFINE COUNT_DIVIDER="1000"
--DEFINE COUNT_HEADING="#1000"
DEFINE BYTES_FORMAT="999,999"
--DEFINE BYTES_DIVIDER="1024"
--DEFINE BYTES_HEADING="KB"
DEFINE BYTES_DIVIDER="1024/1024"
DEFINE BYTES_HEADING="MB"
--DEFINE BYTES_DIVIDER="1024/1024/1024"
--DEFINE BYTES_HEADING="GB"
DEFINE TIME_FORMAT=9999
--DEFINE TIME_DIVIDER="0.001"
--DEFINE TIME_HEADING="msec"
DEFINE TIME_DIVIDER="1"
DEFINE TIME_HEADING="sec"
--DEFINE TIME_DIVIDER="60"
--DEFINE TIME_HEADING="min"
/************************************/
set term off
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
select to_char(ss2.force_matching_signature) "_force_matching_signature"
from dba_hist_sqlstat ss2
where ss2.sql_id = '&&sql_id' and rownum = 1;
set term on
/************************************/
Prompt
Prompt ******************************************************************
Prompt * AWR SQL Executions Statistics (All Figures are per execution)
Prompt * (Force Matching Signature = '&&force_matching_signature')
Prompt *
PROMPT * Input Parameters
PROMPT * - SQL Id = '&&sql_id'
PROMPT * - Plan Hash Value = '&&plan_hash_value'
PROMPT * - Days = '&&days'
PROMPT * - WhereClause = '&&whereclause'
Prompt ******************************************************************
COLUMN seperator HEADING "!|!|!|!" FORMAT a1
COLUMN end_interval_time HEADING "Snap Time" FORMAT a15
COLUMN instance_number HEADING "I#" FORMAT 99
COLUMN SQL_ID HEADING "SQLId" FORMAT a13
COLUMN plan_hash_value HEADING "Plan|Hash|Value" FORMAT 999999999999
COLUMN invalidations_total HEADING "Invalid|(&&COUNT_HEADING)|Per|Exec" FORMAT 9,999
COLUMN iowait_total HEADING "IO|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT
COLUMN apwait_total HEADING "Appl|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT
COLUMN ccwait_total HEADING "Conc|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT
COLUMN clwait_total HEADING "Cluster|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT
COLUMN plsexec_time_total HEADING "PLsexec|Time|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT
COLUMN cpu_time_total HEADING "CPU|Time|(&&TIME_HEADING)|Per|Exec" FORMAT 9999999
COLUMN elapsed_time_total HEADING "Elapsed|Time|(&&TIME_HEADING)|Per|Exec" FORMAT 99999999
COLUMN executions_delta HEADING "Delta|Exec|(&&COUNT_HEADING)" FORMAT 9,999,999,999
COLUMN executions_total HEADING "Total|Exec|(&&COUNT_HEADING)" FORMAT 9,999,999,999
COLUMN px_servers_execs_total HEADING "Par'l|Serv|Exec|(&COUNT_SMALL_HEADING)|Per|Exec" FORMAT 999
--COLUMN px_servers_execs_total HEADING "Par'l|Server|Exec|(&COUNT_SMALL_HEADING)|Per|Exec" FORMAT &COUNT_SMALL_FORMAT
COLUMN rows_processed_total HEADING "Rows|(&&COUNT_HEADING)|Per|Exec" 9999999999
COLUMN sorts_total HEADING "Sorts|(&&COUNT_SMALL_HEADING)|Per|Exec" FORMAT &&COUNT_SMALL_FORMAT
COLUMN buffer_gets_total HEADING "Buffer|Gets|(&&COUNT_HEADING)|Per|Exec" FORMAT 9,999,999
COLUMN direct_writes_total HEADING "Direct|WriteReq|(&&COUNT_HEADING)|Per|Exec" FORMAT &&COUNT_FORMAT
COLUMN io_interconnect_bytes_total HEADING "IO|Inter|Connect|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT
COLUMN physical_read_bytes_total HEADING "Phy|Read|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT
COLUMN physical_write_bytes_total HEADING "Phy|Write|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT
COLUMN optimized_physical_reads_total HEADING "Optimized|Phy|ReadReq|(&&COUNT_HEADING)|Per|Exec" FORMAT &&COUNT_FORMAT
COLUMN io_offload_elig_bytes_total HEADING "IO|Offload|Elig|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT
COLUMN io_offload_return_bytes_total HEADING "IO|Offload|Return|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT
COLUMN sql_profile HEADING "sql_profile" FORMAT a30
SELECT TO_CHAR(ss.end_interval_time,'DD-MON-YY HH24:MI') end_interval_time
, ss.instance_number
, ss.sql_id
, ss.plan_hash_value
, '|' seperator
, ROUND(ss.iowait_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) iowait_total
, ROUND(ss.apwait_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) apwait_total
, ROUND(ss.ccwait_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) ccwait_total
, ROUND(ss.clwait_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) clwait_total
, ROUND(ss.plsexec_time_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) plsexec_time_total
, ROUND(ss.cpu_time_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) cpu_time_total
, ROUND(ss.elapsed_time_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) elapsed_time_total
, '|' seperator
, ss.executions_delta/&&COUNT_DIVIDER executions_delta
, ss.executions_total/&&COUNT_DIVIDER executions_total
&&_IF_ORA_10gR2_OR_HIGHER , ss.px_servers_execs_total/GREATEST(ss.executions_total,1)/&&COUNT_DIVIDER px_servers_execs_total
-- , ss.invalidations_total/GREATEST(ss.executions_total,1)/&&COUNT_DIVIDER invalidations_total
, ss.rows_processed_total/GREATEST(ss.executions_total,1)/&&COUNT_DIVIDER rows_processed_total
, ss.sorts_total/GREATEST(ss.executions_total,1)/&&COUNT_SMALL_DIVIDER sorts_total
, ss.buffer_gets_total/GREATEST(ss.executions_total,1)/&&COUNT_DIVIDER buffer_gets_total
, ROUND(ss.direct_writes_total/GREATEST(ss.executions_total,1)/&&COUNT_DIVIDER) direct_writes_total
, '|' seperator
&&_IF_ORA_11gR2_OR_HIGHER , ss.io_interconnect_bytes_total/GREATEST(ss.executions_total,1)/&&BYTES_DIVIDER io_interconnect_bytes_total
&&_IF_ORA_11gR2_OR_HIGHER , ss.physical_read_bytes_total/GREATEST(ss.executions_total,1)/&&BYTES_DIVIDER physical_read_bytes_total
&&_IF_ORA_11gR2_OR_HIGHER , ss.physical_write_bytes_total/GREATEST(ss.executions_total,1)/&&BYTES_DIVIDER physical_write_bytes_total
&&_IF_ORA_11gR2_OR_HIGHER , ss.optimized_physical_reads_total/GREATEST(ss.executions_total,1)/&&COUNT_DIVIDER optimized_physical_reads_total
&&_IF_ORA_11gR2_OR_HIGHER , ss.io_offload_elig_bytes_total/GREATEST(ss.executions_total,1)/&&BYTES_DIVIDER io_offload_elig_bytes_total
&&_IF_ORA_11gR2_OR_HIGHER , ss.io_offload_return_bytes_total/GREATEST(ss.executions_total,1)/&&BYTES_DIVIDER io_offload_return_bytes_total
, '|' seperator
, ss.sql_profile
FROM
(
SELECT s.end_interval_time
, ss.*
, LEAD (ss.snap_id) OVER (ORDER BY ss.dbid, ss.instance_number, ss.snap_id) next_snap_id
from dba_hist_sqlstat ss
, dba_hist_snapshot s
, v$database d
where ss.instance_number = s.instance_number
AND ss.dbid = s.dbid
AND ss.snap_id = s.snap_id
AND ss.dbid = d.dbid
AND s.end_interval_time > SYSDATE - &&days
AND ss.sql_id LIKE CASE ss.force_matching_signature
WHEN 0 THEN '&&sql_id'
ELSE '%'
END
AND ss.force_matching_signature LIKE '&&force_matching_signature'
AND ss.plan_hash_value LIKE '&&plan_hash_value'
&&whereclause
) ss
WHERE (ss.executions_delta > 0 OR ss.snap_id + 1 <> ss.next_snap_id)
ORDER BY TO_CHAR(ss.end_interval_time,'YYYY-MM-DD HH24:MI')
, ss.instance_number
;
@@footer

View File

@@ -0,0 +1,155 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display SQLStats per execution from AWR
* Version : 10.1 and above
* Parameters : 1 - SQL_ID
* 2 - PLAN_HASH_VALUE (Use % as wildcard)
* 3 - Number of Days (Default 7 days)
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 08-Mar-12 Vishal Gupta Intial version
* 20-Mar-12 Vishal Gupta Added PLAN_HASH_VALUE in output
*
*
*/
DEFINE sqlid="&&1"
DEFINE plan_hash_value="&&2"
DEFINE days="&&3"
DEFINE COUNT_FORMAT=9,999,999,999
DEFINE COUNT_DIVIDER="1"
DEFINE COUNT_HEADING="#"
--DEFINE COUNT_DIVIDER="1000"
--DEFINE COUNT_HEADING="#1000"
DEFINE BYTES_FORMAT="999,999"
--DEFINE BYTES_DIVIDER="1024"
--DEFINE BYTES_HEADING="KB"
DEFINE BYTES_DIVIDER="1024/1024"
DEFINE BYTES_HEADING="MB"
--DEFINE BYTES_DIVIDER="1024/1024/1024"
--DEFINE BYTES_HEADING="GB"
DEFINE TIME_FORMAT=9,999
--DEFINE TIME_DIVIDER="0.001"
--DEFINE TIME_HEADING="msec"
--DEFINE TIME_DIVIDER="1"
--DEFINE TIME_HEADING="sec"
DEFINE TIME_DIVIDER="60"
DEFINE TIME_HEADING="min"
COLUMN seperator HEADING "!|!|!|!" FORMAT a1
COLUMN end_interval_time HEADING "Snap Time" FORMAT a18
COLUMN instance_number HEADING "I#" FORMAT 99
COLUMN SQL_ID HEADING "SQLId" FORMAT a13
COLUMN plan_hash_value HEADING "Plan|Hash|Value" FORMAT 999999999999
COLUMN invalidations_delta HEADING "Invalid|(&COUNT_HEADING)|PerExec" FORMAT 9,999
COLUMN iowait_delta HEADING "IO|Wait|(&TIME_HEADING)|PerExec" FORMAT &TIME_FORMAT
COLUMN apwait_delta HEADING "Appl|Wait|(&TIME_HEADING)|PerExec" FORMAT &TIME_FORMAT
COLUMN ccwait_delta HEADING "Conc|Wait|(&TIME_HEADING)|PerExec" FORMAT &TIME_FORMAT
COLUMN clwait_delta HEADING "Cluster|Wait|(&TIME_HEADING)|PerExec" FORMAT &TIME_FORMAT
COLUMN plsexec_time_delta HEADING "PLsexec|Time|(&TIME_HEADING)|PerExec" FORMAT &TIME_FORMAT
COLUMN cpu_time_delta HEADING "CPU|Time|(&TIME_HEADING)|PerExec" FORMAT &TIME_FORMAT
COLUMN elapsed_time_delta HEADING "Elapsed|Time|(&TIME_HEADING)|PerExec" FORMAT &TIME_FORMAT
COLUMN executions_delta HEADING "Exec|(&COUNT_HEADING)" FORMAT 9,999
COLUMN px_servers_execs_total HEADING "Par'l|Serv|Exec|(&COUNT_SMALL_HEADING)|PerExec" FORMAT 999
--COLUMN px_servers_execs_total HEADING "Par'l|Server|Exec|(&COUNT_SMALL_HEADING)|PerExec" FORMAT &COUNT_SMALL_FORMAT
COLUMN rows_processed_delta HEADING "Rows|(&COUNT_HEADING)|PerExec" FORMAT &COUNT_FORMAT
COLUMN sorts_delta HEADING "Sorts|(&COUNT_HEADING)|PerExec" FORMAT &COUNT_FORMAT
COLUMN buffer_gets_delta HEADING "Buffer|Gets|(&COUNT_HEADING)|PerExec" FORMAT &COUNT_FORMAT
COLUMN direct_writes_delta HEADING "Direct|Write|(&BYTES_HEADING)|PerExec" FORMAT &BYTES_FORMAT
COLUMN io_interconnect_bytes_delta HEADING "IO|Inter|Connect|(&BYTES_HEADING)|PerExec" FORMAT &BYTES_FORMAT
COLUMN physical_read_bytes_delta HEADING "Phy|Read|(&BYTES_HEADING)|PerExec" FORMAT &BYTES_FORMAT
COLUMN physical_write_bytes_delta HEADING "Phy|Write|(&BYTES_HEADING)|PerExec" FORMAT &BYTES_FORMAT
COLUMN io_offload_elig_bytes_delta HEADING "IO|Offload|Elig|(&BYTES_HEADING)|PerExec" FORMAT &BYTES_FORMAT
COLUMN io_offload_return_bytes_delta HEADING "IO|Offload|Return|(&BYTES_HEADING)|PerExec" FORMAT &BYTES_FORMAT
COLUMN sql_profile HEADING "sql_profile" FORMAT a30
Prompt
Prompt ***************************************************************************************************
Prompt * AWR SQL Executions Statistics (All Figures are per execution)
Prompt * SQLID = &&sqlid , plan_hash_value = &plan_hash_value over last &days days
Prompt ***************************************************************************************************
WITH snaps AS
(
SELECT ss.dbid
, ss.instance_number
, ss.snap_id
, LAG(ss.snap_id) OVER (PARTITION BY s.dbid, s.instance_number, ss.sql_id, ss.plan_hash_value ORDER BY ss.dbid, ss.instance_number, ss.snap_id , ss.sql_id, ss.plan_hash_value) prev_snap_id
, ss.sql_id
, ss.plan_hash_value
, s.end_interval_time
from dba_hist_sqlstat ss
, dba_hist_snapshot s
, v$database d
where ss.instance_number = s.instance_number
AND ss.dbid = s.dbid
AND ss.snap_id = s.snap_id
AND ss.dbid = d.dbid
AND s.end_interval_time > SYSDATE - &&days
AND ss.sql_id = '&&sqlid'
AND ss.plan_hash_value LIKE '&&plan_hash_value'
AND ss.executions_delta > 0
)
SELECT TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI:SS') end_interval_time
, ss.instance_number
, ss.sql_id
, ss.plan_hash_value
, '|' seperator
, ROUND((ss.iowait_total-ss_prev.iowait_total)/1000000/ss.executions_delta/&TIME_DIVIDER) iowait_delta
, ROUND((ss.apwait_total-ss_prev.apwait_total)/1000000/ss.executions_delta/&TIME_DIVIDER) apwait_delta
, ROUND((ss.ccwait_total-ss_prev.ccwait_total)/1000000/ss.executions_delta/&TIME_DIVIDER) ccwait_delta
, ROUND((ss.clwait_total-ss_prev.clwait_total)/1000000/ss.executions_delta/&TIME_DIVIDER) clwait_delta
, ROUND((ss.plsexec_time_total-ss_prev.plsexec_time_total)/1000000/ss.executions_delta/&TIME_DIVIDER) plsexec_time_delta
, ROUND((ss.cpu_time_total-ss_prev.cpu_time_total)/1000000/ss.executions_delta/&TIME_DIVIDER) cpu_time_delta
, ROUND((ss.elapsed_time_total-ss_prev.elapsed_time_total)/1000000/ss.executions_delta/&TIME_DIVIDER) elapsed_time_delta
, '|' seperator
, ss.executions_delta/&COUNT_DIVIDER executions_delta
&&_IF_ORA_10gR2_OR_HIGHER , (ss.px_servers_execs_total-ss_prev.px_servers_execs_total)/ss.executions_total/&COUNT_DIVIDER px_servers_execs_delta
-- , (ss.invalidations_total-ss_prev.invalidations_total)/ss.executions_total/&COUNT_DIVIDER invalidations_delta
, (ss.rows_processed_total-ss_prev.rows_processed_total)/ss.executions_delta/&COUNT_DIVIDER rows_processed_delta
, (ss.buffer_gets_total-ss_prev.buffer_gets_total)/ss.executions_delta/&COUNT_DIVIDER buffer_gets_delta
, ROUND((ss.direct_writes_total-ss_prev.direct_writes_total)/ss.executions_delta/&BYTES_DIVIDER) direct_writes_delta
, '|' seperator
&&_IF_ORA_11gR2_OR_HIGHER , (ss.io_interconnect_bytes_total-ss_prev.io_interconnect_bytes_total)/ss.executions_delta/&BYTES_DIVIDER io_interconnect_bytes_delta
&&_IF_ORA_11gR2_OR_HIGHER , (ss.physical_read_bytes_total-ss_prev.physical_read_bytes_total)/ss.executions_delta/&BYTES_DIVIDER physical_read_bytes_delta
&&_IF_ORA_11gR2_OR_HIGHER , (ss.physical_write_bytes_total-ss_prev.physical_write_bytes_total)/ss.executions_delta/&BYTES_DIVIDER physical_write_bytes_delta
&&_IF_ORA_11gR2_OR_HIGHER , (ss.io_offload_elig_bytes_total-ss_prev.io_offload_elig_bytes_total)/ss.executions_delta/&BYTES_DIVIDER io_offload_elig_bytes_delta
&&_IF_ORA_11gR2_OR_HIGHER , (ss.io_offload_return_bytes_total-ss_prev.io_offload_return_bytes_total)/ss.executions_delta/&BYTES_DIVIDER io_offload_return_bytes_delta
, ss.sql_profile
from dba_hist_sqlstat ss
, dba_hist_sqlstat ss_prev
, snaps s
where ss.dbid = s.dbid
AND ss.instance_number = s.instance_number
AND ss.snap_id = s.snap_id
AND ss.sql_id = s.sql_id
AND ss.plan_hash_value = s.plan_hash_value
AND ss_prev.dbid (+) = s.dbid
AND ss_prev.instance_number (+) = s.instance_number
AND ss_prev.snap_id (+) = s.prev_snap_id
AND ss_prev.sql_id (+) = s.sql_id
AND ss_prev.plan_hash_value (+) = s.plan_hash_value
order by s.end_interval_time , s.instance_number
;
UNDEFINE sqlid
UNDEFINE days
@@footer

198
vg/awr_sqlstats_weekly.sql Normal file
View File

@@ -0,0 +1,198 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display SQLStats from AWR
* Version : 10.1 and above
* Parameters : 1 - SQL_ID
* 2 - Number of Days (Default 30 days)
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 08-Mar-12 Vishal Gupta Intial version
* 20-Mar-12 Vishal Gupta Added PLAN_HASH_VALUE in output
* 23-Apr-12 Vishal Gupta Added PLAN_HASH_VALUE as the input variable
* 09-Oct-12 Vishal Gupta Removed the instance_number from output and
* aggregated stats for all instances in output.
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE sql_id
UNDEFINE days
UNDEFINE whereclause
UNDEFINE force_matching_signature
DEFINE sql_id="&&1"
DEFINE days="&&2"
DEFINE whereclause="&&4"
DEFINE force_matching_signature=""
COLUMN _days NEW_VALUE days NOPRINT
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
set term off
SELECT DECODE('&&days','','30','&&days') "_days"
, DECODE('&&sql_id','%','%','') "_force_matching_signature"
FROM DUAL;
set term on
/************************************
* CONFIGURATION PARAMETERS
************************************/
DEFINE COUNT_SMALL_FORMAT=999,999
--DEFINE COUNT_SMALL_DIVIDER="1"
--DEFINE COUNT_SMALL_HEADING="#"
DEFINE COUNT_SMALL_DIVIDER="1000"
DEFINE COUNT_SMALL_HEADING="#1000"
--DEFINE COUNT_SMALL_DIVIDER="1000000"
--DEFINE COUNT_SMALL_HEADING="#mill"
DEFINE COUNT_FORMAT=99,999,999
--DEFINE COUNT_DIVIDER="1"
--DEFINE COUNT_HEADING="#"
DEFINE COUNT_DIVIDER="1000"
DEFINE COUNT_HEADING="#1000"
--DEFINE COUNT_DIVIDER="1000000"
--DEFINE COUNT_HEADING="million"
DEFINE BYTES_FORMAT="999,999"
--DEFINE BYTES_DIVIDER="1024"
--DEFINE BYTES_HEADING="KB"
--DEFINE BYTES_DIVIDER="1024/1024"
--DEFINE BYTES_HEADING="MB"
DEFINE BYTES_DIVIDER="1024/1024/1024"
DEFINE BYTES_HEADING="GB"
DEFINE TIME_FORMAT=999,999
--DEFINE TIME_DIVIDER="1"
--DEFINE TIME_HEADING="sec"
DEFINE TIME_DIVIDER="60"
DEFINE TIME_HEADING="min"
/************************************/
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
set term off
select to_char(ss2.force_matching_signature) "_force_matching_signature"
from v$database d
JOIN sys.WRH$_SQLSTAT ss2 on ss2.dbid = d.dbid
where ss2.sql_id = '&&sql_id' and rownum = 1;
set term on
/************************************/
Prompt
Prompt ***************************************************************************************************
Prompt * AWR SQL Executions Statistics (Delta)
Prompt * (Force Matching Signature = '&&force_matching_signature')
PROMPT *
PROMPT * Input Parameters
PROMPT * - SQL Id = '&&sql_id'
PROMPT * - Days = '&&days'
PROMPT * - WhereClause = '&&whereclause'
Prompt ***************************************************************************************************
COLUMN seperator HEADING "!|!|!|!" FORMAT a1
COLUMN end_interval_time HEADING "Week|Starting" FORMAT a9
COLUMN instance_number HEADING "I#" FORMAT 99
COLUMN SQL_ID HEADING "SQLId" FORMAT a13
COLUMN force_matching_signature HEADING "Force Matching Signature" FORMAT 999999999999999999999
COLUMN plan_hash_value HEADING "Plan|Hash|Value" FORMAT 999999999999
COLUMN invalidations_delta HEADING "Invalid|Delta|(&&COUNT_HEADING)" FORMAT 9,999
COLUMN iowait_delta HEADING "IO|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN apwait_delta HEADING "Appl|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN ccwait_delta HEADING "Conc|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN clwait_delta HEADING "Cluster|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN plsexec_time_delta HEADING "PLsexec|Time|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN cpu_time_delta HEADING "CPU|Time|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN elapsed_time_delta HEADING "Elapsed|Time|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
COLUMN executions_delta HEADING "Exec|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN px_servers_execs_delta HEADING "Par'l|Serv|Exec|Delta|(&&COUNT_HEADING)" FORMAT 999
COLUMN rows_processed_delta HEADING "Rows|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN sorts_delta HEADING "Sorts|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN buffer_gets_bytes_delta HEADING "Logical|Read|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN buffer_gets_delta HEADING "Buffer|Gets|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN direct_writes_delta HEADING "Direct|Write|Delta|(&&BYTES_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN io_interconnect_bytes_delta HEADING "IO|Inter|Connect|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN physical_read_bytes_delta HEADING "Phy|Read|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN physical_write_bytes_delta HEADING "Phy|Write|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN optimized_physical_reads_delta HEADING "Optimized|Phy|ReadReq|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN io_offload_elig_bytes_delta HEADING "IO|Offload|Elig|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN io_offload_return_bytes_delta HEADING "IO|Offload|Return|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
COLUMN sql_profile HEADING "sql_profile" FORMAT a30
SELECT TO_CHAR(TRUNC(s.end_interval_time,'IW'),'DD-MON-YY') end_interval_time
, ss.force_matching_signature
, max(ss.sql_id) sql_id
--, ss.plan_hash_value
, ROUND(SUM(ss.iowait_delta)/1000000/&&TIME_DIVIDER) iowait_delta
, ROUND(SUM(ss.apwait_delta)/1000000/&&TIME_DIVIDER) apwait_delta
, ROUND(SUM(ss.ccwait_delta)/1000000/&&TIME_DIVIDER) ccwait_delta
, ROUND(SUM(ss.clwait_delta)/1000000/&&TIME_DIVIDER) clwait_delta
, ROUND(SUM(ss.plsexec_time_delta)/1000000/&&TIME_DIVIDER) plsexec_time_delta
, ROUND(SUM(ss.cpu_time_delta)/1000000/&&TIME_DIVIDER) cpu_time_delta
, ROUND(SUM(ss.elapsed_time_delta)/1000000/&&TIME_DIVIDER) elapsed_time_delta
, '|' seperator
, SUM(ss.executions_delta)/&&COUNT_DIVIDER executions_delta
--&&_IF_ORA_10gR2_OR_HIGHER , SUM(ss.px_servers_execs_delta)/&&COUNT_DIVIDER px_servers_execs_delta
-- , SUM(ss.invalidations_delta)/&&COUNT_DIVIDER invalidations_delta
, SUM(ss.rows_processed_delta)/&&COUNT_DIVIDER rows_processed_delta
, SUM(ss.sorts_delta)/&&COUNT_DIVIDER sorts_delta
, SUM(ss.buffer_gets_delta)/&&COUNT_DIVIDER buffer_gets_delta
, SUM(ss.buffer_gets_delta* p.value)/&&BYTES_DIVIDER buffer_gets_bytes_delta
, ROUND(SUM(ss.direct_writes_delta)/&&COUNT_DIVIDER) direct_writes_delta
, '|' seperator
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_interconnect_bytes_delta)/&&BYTES_DIVIDER io_interconnect_bytes_delta
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.physical_read_bytes_delta)/&&BYTES_DIVIDER physical_read_bytes_delta
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.physical_write_bytes_delta)/&&BYTES_DIVIDER physical_write_bytes_delta
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.optimized_physical_reads_delta)/&&COUNT_DIVIDER optimized_physical_reads_delta
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_offload_elig_bytes_delta)/&&BYTES_DIVIDER io_offload_elig_bytes_delta
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_offload_return_bytes_delta)/&&BYTES_DIVIDER io_offload_return_bytes_delta
, '|' seperator
from dba_hist_sqlstat ss
, dba_hist_snapshot s
, v$database d
, v$system_parameter p
where p.name = 'db_block_size'
AND ss.instance_number = s.instance_number
AND ss.dbid = s.dbid
AND ss.snap_id = s.snap_id
AND ss.dbid = d.dbid
AND s.end_interval_time > SYSDATE - &&days
AND ss.sql_id LIKE CASE ss.force_matching_signature
WHEN 0 THEN '&&sql_id'
ELSE '%'
END
AND ss.force_matching_signature LIKE '&&force_matching_signature'
--AND ss.executions_delta > 0
&&whereclause
GROUP BY ss.dbid
, TRUNC(s.end_interval_time,'IW')
, ss.force_matching_signature
--, ss.plan_hash_value
ORDER BY TRUNC(s.end_interval_time,'IW')
, ss.force_matching_signature
--, ss.plan_hash_value
;
UNDEFINE sql_id
UNDEFINE plan_hash_value
UNDEFINE days
UNDEFINE force_matching_signature
UNDEFINE whereclause
@@footer

60
vg/awr_sqltext.sql Normal file
View File

@@ -0,0 +1,60 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display SQL Text from AWR repository
* Parameters : 1 - SQL_ID
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 22-Oct-15 Vishal Gupta Added FORCE_MATCHING_SIGNATURE in the output heading
* 08-Mar-12 Vishal Gupta Initial version
*
*
*/
UNDEFINE sqlid
UNDEFINE force_matching_signature
DEFINE sqlid="&&1"
DEFINE force_matching_signature=""
SET long 4000000
SET longchunksize 400000
SET pages 0
set lines 300
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
select to_char(ss2.force_matching_signature) "_force_matching_signature"
from v$database d
, dba_hist_sqlstat ss2
where d.dbid = ss2.dbid
AND ss2.sql_id = '&&sqlid'
and rownum = 1
;
Prompt ********************************************************
Prompt * SQL Text for SQLID = &&sqlid
Prompt * Force Matching Signature = &&force_matching_signature
Prompt ********************************************************
COLUMN sql_text HEADING "SQLText" FORMAT a150 WRAP
SELECT s.sql_text
FROM dba_hist_sqltext s
, v$database d
WHERE d.dbid = s.dbid
AND s.sql_id = '&&sqlid'
;
@@footer

53
vg/awr_sqltext_expand.sql Normal file
View File

@@ -0,0 +1,53 @@
@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display Expanded SQL Text from AWR repository
* Parameters : 1 - SQL_ID
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 29-Jul-15 Vishal Gupta Created
*
*
*/
DEFINE sqlid="&&1"
SET long 4000000
SET longchunksize 400000
SET pages 0
set lines 300
COLUMN sql_text HEADING "SQLText" FORMAT a150 WRAP
Prompt ***********************************************
Prompt * Expanded SQL Text for SQLID = &&sqlid
Prompt ***********************************************
VARIABLE EXPANDED_SQLTEXT CLOB;
DECLARE
L_SQLTEXT CLOB;
BEGIN
SELECT s.sql_text
INTO L_SQLTEXT
FROM dba_hist_sqltext s
, v$database d
WHERE d.dbid = s.dbid
AND s.sql_id = '&&sqlid'
;
sys.dbms_sql2.expand_sql_text(L_SQLTEXT,:EXPANDED_SQLTEXT);
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
END;
/
print :EXPANDED_SQLTEXT
@@footer

Some files were not shown because too many files have changed in this diff Show More