/* * * Author : Vishal Gupta * Purpose : Display table statistics history * Parameters : 1 - OWNER (% - wildchar, \ - escape char) * 2 - Object Name (% - wildchar, \ - escape char) * 3 - Partition Name (% - wildchar, \ - escape char) * 5 - Object Type (% - wildchar, \ - escape char) * * * Revision History: * =================== * Date Author Description * --------- ------------ ----------------------------------------- * 08-Jul-15 Vishal Gupta Removed savetime column from output * 19-JUN-14 Vishal Gupta Updated AvgRowLength heading * 28-FEB-14 Vishal Gupta Changed the ordering * 02-Jul-12 Vishal Gupta Added partition, sub-partition and objecttype as input * 30-Apr-12 Vishal Gupta Created * */ /************************************ * INPUT PARAMETERS ************************************/ UNDEFINE owner UNDEFINE object_name UNDEFINE subobject_name UNDEFINE object_type DEFINE owner="&&1" DEFINE object_name="&&2" DEFINE subobject_name="&&3" DEFINE object_type="&&4" 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 CASE WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),1,INSTR('&&owner','.')-1) ELSE DECODE(UPPER('&&owner'),'','%',UPPER('&&owner')) END "_owner" , CASE WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1) ELSE DECODE(UPPER('&&object_name'),'','%',UPPER('&&object_name')) END "_object_name" , DECODE('&&subobject_name','','%','&&subobject_name') "_subobject_name" , DECODE('&&object_type','','%','&&object_type') "_object_type" FROM DUAL ; set term on PROMPT PROMPT *********************************************************************** PROMPT * S T A T I S T I C S H I S T O R Y PROMPT * PROMPT * Input Parameters PROMPT * - Object Owner = '&&owner' PROMPT * - Object Name = '&&object_name' PROMPT * - SubObject Name = '&&subobject_name' PROMPT * - Object Type = '&&object_type' PROMPT *********************************************************************** COLUMN object_name HEADING "ObjectName" FORMAT a60 COLUMN subobject_name HEADING "SubObjectName" FORMAT a30 COLUMN object_type HEADING "Object|Type" FORMAT a18 COLUMN object_type_sort_order NOPRINT COLUMN savtime HEADING "SaveTime" FORMAT a18 COLUMN ANALYZETIME HEADING "AnalyzeTime" FORMAT a18 COLUMN samplesize HEADING "SampleSize" FORMAT 999,999,999,999 COLUMN rowcnt HEADING "RowCount" FORMAT 999,999,999,999 COLUMN blkcnt HEADING "BlockCount" FORMAT 999,999,999 COLUMN avgrln HEADING "Avg|Row|Length" FORMAT 999,999 COLUMN SizeMB HEADING "Size (MB)" FORMAT 9,999,999 select object_name , object_type , object_type_sort_order --, to_char(savtime,'DD-MON-YY HH24:MI:SS') savtime , to_char(ANALYZETIME,'DD-MON-YY HH24:MI:SS') ANALYZETIME , SizeMB , rowcnt , avgrln --, blkcnt , samplesize FROM ( select o.owner || '.' || o.object_name || NVL2(o.subobject_name,':' || o.subobject_name, '') object_name , o.object_type , DECODE (o.object_type , 'TABLE' ,1 , 'TABLE PARTITION' ,2 , 'TABLE SUBPARTITION' ,3 , 'INDEX' ,4 , 'INDEX PARTITION' ,5 , 'INDEX SUBPARTITION' ,6 ,9 ) object_type_sort_order , h.savtime , h.ANALYZETIME , h.samplesize , h.rowcnt , h.avgrln , (h.blkcnt * p.value) /1024/1024 SizeMB , h.blkcnt FROM sys.wri$_optstat_tab_history h , dba_objects o , v$system_parameter p WHERE h.obj# = o.object_id AND p.name = 'db_block_size' AND o.owner LIKE upper('&&owner') ESCAPE '\' AND o.object_name LIKE upper('&&object_name') ESCAPE '\' AND NVL(o.subobject_name,'%') LIKE upper('&&subobject_name') ESCAPE '\' AND NVL(DECODE(o.object_type ,'PARTITION','TABLE PARTITION' ,'SUBPARTITION','TABLE SUBPARTITION' ,o.object_type),'%') LIKE upper('&&object_type') ESCAPE '\' UNION select s.owner || '.' || s.table_name || NVL2(s.partition_name,':' || s.partition_name, '') object_name , DECODE(s.object_type ,'PARTITION','TABLE PARTITION' ,'SUBPARTITION','TABLE SUBPARTITION' ,s.object_type) object_type , DECODE (s.object_type , 'TABLE' ,1 , 'TABLE PARTITION' ,2 , 'TABLE SUBPARTITION' ,3 , 'INDEX' ,4 , 'INDEX PARTITION' ,5 , 'INDEX SUBPARTITION' ,6 ,9 ) object_type_sort_order , NULL savtime , last_analyzed ANALYZETIME , sample_size , num_rows , avg_row_len , (s.blocks * p.value) /1024/1024 SizeMB , s.blocks FROM dba_tab_statistics s , v$system_parameter p WHERE p.name = 'db_block_size' AND s.owner LIKE upper('&&owner') ESCAPE '\' AND s.table_name LIKE upper('&&object_name') ESCAPE '\' AND NVL(s.partition_name,'%') LIKE upper('&&subobject_name') ESCAPE '\' AND NVL(DECODE(s.object_type ,'PARTITION','TABLE PARTITION' ,'SUBPARTITION','TABLE SUBPARTITION' ,s.object_type),'%') LIKE upper('&&object_type') ESCAPE '\' ) a ORDER BY a.object_name , a.object_type_sort_order , a.savtime NULLS LAST --, a.ANALYZETIME / COLUMN table_name HEADING "IndexName" FORMAT a40 COLUMN object_name HEADING "IndexName" FORMAT a50 COLUMN distinct_keys HEADING "DistinctKeys" FORMAT 99,999,999,999 COLUMN blevel HEADING "BLevel" FORMAT 99999 COLUMN leaf_blocks HEADING "Leaf|Blocks" FORMAT 99,999,999 COLUMN clustering_factor HEADING "Clustering|Factor" FORMAT 99,999,999,999 COLUMN avg_leaf_blocks_per_key HEADING "Avg|LeafBlocks|PerKey" FORMAT 999,999,999 COLUMN avg_data_blocks_per_key HEADING "Avg|DataBlocks|PerKey" FORMAT 999,999,999 select object_name , object_type , object_type_sort_order --, to_char(savtime,'DD-MON-YY HH24:MI:SS') savtime , to_char(ANALYZETIME,'DD-MON-YY HH24:MI:SS') ANALYZETIME , SizeMB , rowcnt , samplesize , distinct_keys , blevel , clustering_factor , leaf_blocks , avg_leaf_blocks_per_key , avg_data_blocks_per_key FROM ( select o.owner || '.' || o.object_name || NVL2(o.subobject_name,':' || o.subobject_name, '') object_name , o.object_type , DECODE (o.object_type , 'TABLE' ,1 , 'TABLE PARTITION' ,2 , 'TABLE SUBPARTITION' ,3 , 'INDEX' ,4 , 'INDEX PARTITION' ,5 , 'INDEX SUBPARTITION' ,6 ,9 ) object_type_sort_order , h.savtime , h.ANALYZETIME , (h.leafcnt * p.value) /1024/1024 SizeMB , h.rowcnt , h.samplesize , h.distkey distinct_keys , h.blevel , h.clufac clustering_factor , h.leafcnt leaf_blocks , h.lblkkey avg_leaf_blocks_per_key , h.dblkkey avg_data_blocks_per_key --, h.avgrln FROM sys.wri$_optstat_ind_history h , dba_objects o , v$system_parameter p WHERE h.obj# = o.object_id AND p.name = 'db_block_size' AND o.owner LIKE upper('&&owner') ESCAPE '\' AND o.object_name LIKE upper('&&object_name') ESCAPE '\' AND NVL(o.subobject_name,'%') LIKE upper('&&subobject_name') ESCAPE '\' AND NVL(o.object_type,'%') LIKE upper('&&object_type') ESCAPE '\' UNION ALL select s.owner || '.' || s.index_name || NVL2(s.partition_name,':' || s.partition_name, '') object_name , DECODE(s.object_type ,'PARTITION','TABLE PARTITION' ,'SUBPARTITION','TABLE SUBPARTITION' ,s.object_type) object_type , DECODE (s.object_type , 'TABLE' ,1 , 'TABLE PARTITION' ,2 , 'TABLE SUBPARTITION' ,3 , 'INDEX' ,4 , 'INDEX PARTITION' ,5 , 'INDEX SUBPARTITION' ,6 ,9 ) object_type_sort_order , null savtime , s.last_analyzed ANALYZETIME , ROUND((s.leaf_blocks * p.value) /1024/1024 ) SizeMB , s.num_rows , s.sample_size , s.distinct_keys , s.blevel , s.clustering_factor , s.leaf_blocks , s.avg_leaf_blocks_per_key , s.avg_data_blocks_per_key FROM dba_ind_statistics s , v$system_parameter p WHERE p.name = 'db_block_size' AND s.owner LIKE upper('&&owner') ESCAPE '\' AND s.index_name LIKE upper('&&object_name') ESCAPE '\' AND NVL(s.partition_name,'%') LIKE upper('&&subobject_name') ESCAPE '\' AND NVL(DECODE(s.object_type ,'PARTITION','INDEX PARTITION' ,'SUBPARTITION','INDEX SUBPARTITION' ,s.object_type),'%') LIKE upper('&&object_type') ESCAPE '\' ) a ORDER BY a.object_name , a.object_type_sort_order , a.savtime NULLS LAST --, a.ANALYZETIME /