2026-03-12 20:23:15
This commit is contained in:
205
vg/tab_parts.sql
Normal file
205
vg/tab_parts.sql
Normal file
@@ -0,0 +1,205 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display table partitions and subpartitions
|
||||
* Parameters : 1 - OWNER (% - wildchar, \ - escape char)
|
||||
* 2 - Table Name (% - wildchar, \ - escape char)
|
||||
* 3 - Partition Name (% - wildchar, \ - escape char)
|
||||
* 4 - Sub-Partition Name (% - wildchar, \ - escape char)
|
||||
* 5 - Object Type (% - wildchar, \ - escape char)
|
||||
* 6 - Partition HighValue (% - wildchar, \ - escape char)
|
||||
* 7 - Sub-Partition HighValue (% - wildchar, \ - escape char)
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 23-Dec-16 Vishal Gupta Increased column size of partition_type
|
||||
* 04-Jun-13 Vishal Gupta Created
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE owner
|
||||
UNDEFINE table_name
|
||||
UNDEFINE partition_name
|
||||
UNDEFINE subpartition_name
|
||||
UNDEFINE object_type
|
||||
UNDEFINE part_high_value
|
||||
UNDEFINE subpart_high_value
|
||||
|
||||
DEFINE owner="&&1"
|
||||
DEFINE table_name="&&2"
|
||||
DEFINE partition_name="&&3"
|
||||
DEFINE subpartition_name="&&4"
|
||||
DEFINE object_type="&&5"
|
||||
DEFINE part_high_value="&&6"
|
||||
DEFINE subpart_high_value="&&7"
|
||||
|
||||
COLUMN _owner NEW_VALUE owner NOPRINT
|
||||
COLUMN _table_name NEW_VALUE table_name NOPRINT
|
||||
COLUMN _partition_name NEW_VALUE partition_name NOPRINT
|
||||
COLUMN _subpartition_name NEW_VALUE subpartition_name NOPRINT
|
||||
COLUMN _object_type NEW_VALUE object_type NOPRINT
|
||||
COLUMN _part_high_value NEW_VALUE part_high_value NOPRINT
|
||||
COLUMN _subpart_high_value NEW_VALUE subpart_high_value 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('&&table_name'),'','%',UPPER('&&table_name'))
|
||||
END "_table_name"
|
||||
, DECODE('&&partition_name','','%','&&partition_name') "_partition_name"
|
||||
, DECODE('&&subpartition_name','','%','&&subpartition_name') "_subpartition_name"
|
||||
, DECODE('&&object_type','','%','&&object_type') "_object_type"
|
||||
, DECODE('&&part_high_value','','%','&&part_high_value') "_part_high_value"
|
||||
, DECODE('&&subpart_high_value','','%','&&subpart_high_value') "_subpart_high_value"
|
||||
FROM DUAL
|
||||
;
|
||||
|
||||
set term on
|
||||
|
||||
|
||||
/***********************************/
|
||||
|
||||
PROMPT *****************************************************
|
||||
PROMPT * Table Partitions/Sub-Partitions
|
||||
PROMPT *
|
||||
PROMPT * Input Parameters
|
||||
PROMPT * - Table Owner = '&&owner'
|
||||
PROMPT * - Table Name = '&&table_name'
|
||||
PROMPT * - Partition Name = '&&partition_name'
|
||||
PROMPT * - SubPartition Name = '&&subpartition_name'
|
||||
PROMPT * - Object Type = '&&object_type'
|
||||
PROMPT * - Part HighValue = '&&part_high_value'
|
||||
PROMPT * - SubPart HighValue = '&&subpart_high_value'
|
||||
PROMPT *****************************************************
|
||||
|
||||
COLUMN table_name HEADING "Table Name" FORMAT a40
|
||||
COLUMN partitioning_type HEADING "Part|Type" FORMAT a9
|
||||
COLUMN partitioning_key_count HEADING "Part|Key|Count" FORMAT 99999
|
||||
COLUMN interval HEADING "Interval" FORMAT a30
|
||||
COLUMN subpartitioning_type HEADING "SubPart|Type" FORMAT a10
|
||||
COLUMN subpartitioning_key_count HEADING "SubPart|Key|Count" FORMAT 99999
|
||||
COLUMN def_subpartition_count HEADING "Default|Subpart|Count|PerPart" FORMAT 999
|
||||
COLUMN status HEADING "Status" FORMAT a8
|
||||
COLUMN partition_count HEADING "Part|Count" FORMAT 999,999
|
||||
COLUMN subpartition_count HEADING "SubPart|Count" FORMAT 999,999
|
||||
COLUMN total_count HEADING "Total|Count" FORMAT 999,999
|
||||
|
||||
|
||||
|
||||
SELECT pt.owner || '.' || pt.table_name table_name
|
||||
, pt.status
|
||||
, pt.partitioning_type
|
||||
, pt.partitioning_key_count
|
||||
-- for interval RANGE partition, dba_part_tables.partition_count is always 1048575
|
||||
-- , so we need to take actual partition count from dba_tab_partitions
|
||||
, count(distinct p.partition_name) partition_count
|
||||
, pt.interval
|
||||
, pt.subpartitioning_type
|
||||
, pt.subpartitioning_key_count
|
||||
, pt.def_subpartition_count
|
||||
, count(s.subpartition_name) subpartition_count
|
||||
, GREATEST(count(distinct p.partition_name) , count(s.subpartition_name)) total_count
|
||||
FROM dba_part_tables pt
|
||||
JOIN dba_tab_partitions p ON p.table_owner = pt.owner AND p.table_name = pt.table_name
|
||||
LEFT OUTER JOIN dba_tab_subpartitions s ON s.table_owner = pt.owner AND s.table_name = pt.table_name AND p.partition_name = s.partition_name
|
||||
WHERE 1=1
|
||||
AND pt.owner LIKE '&&owner' ESCAPE '\'
|
||||
AND pt.table_name LIKE '&&table_name' ESCAPE '\'
|
||||
GROUP BY
|
||||
pt.owner
|
||||
, pt.table_name
|
||||
, pt.partitioning_type
|
||||
, pt.interval
|
||||
, pt.subpartitioning_type
|
||||
, pt.def_subpartition_count
|
||||
, pt.partitioning_key_count
|
||||
, pt.subpartitioning_key_count
|
||||
, pt.status
|
||||
--ORDER BY total_count desc
|
||||
ORDER BY pt.owner
|
||||
, pt.table_name
|
||||
;
|
||||
|
||||
COLUMN partition_name HEADING "Table Name" FORMAT a40
|
||||
COLUMN partition_name HEADING "Partition Name" FORMAT a20
|
||||
COLUMN part_high_value HEADING "Partition HighValue" FORMAT a85
|
||||
COLUMN subpartition_name HEADING "SubPartition Name" FORMAT a30
|
||||
COLUMN subpart_high_value HEADING "SubPartition HighValue" FORMAT a40
|
||||
COLUMN partition_position NOPRINT
|
||||
COLUMN subpartition_position NOPRINT
|
||||
|
||||
select DISTINCT
|
||||
table_owner
|
||||
|| '.' || table_name table_name
|
||||
, partition_name
|
||||
, partition_position
|
||||
, part_high_value
|
||||
, subpartition_count
|
||||
, CASE '&&object_type'
|
||||
WHEN '%' THEN subpartition_name
|
||||
WHEN 'TABLE SUBPARTITION' THEN subpartition_name
|
||||
ELSE ' '
|
||||
END subpartition_name
|
||||
, subpartition_position
|
||||
, CASE '&&object_type'
|
||||
WHEN '%' THEN subpart_high_value
|
||||
WHEN 'TABLE SUBPARTITION' THEN subpart_high_value
|
||||
ELSE ' '
|
||||
END subpart_high_value
|
||||
from
|
||||
xmltable( '/ROWSET/ROW'
|
||||
passing dbms_xmlgen.getXMLType('
|
||||
select p.table_owner
|
||||
, p.table_name
|
||||
, p.partition_name
|
||||
, p.partition_position
|
||||
, p.high_value part_high_value /* <---- Long Column type*/
|
||||
, p.subpartition_count
|
||||
, s.subpartition_name
|
||||
, s.subpartition_position
|
||||
, s.high_value subpart_high_value /* <---- Long Column type*/
|
||||
from dba_tab_partitions p
|
||||
LEFT OUTER JOIN dba_tab_subpartitions s
|
||||
ON s.table_owner = p.table_owner
|
||||
AND s.table_name = p.table_name
|
||||
AND s.partition_name = p.partition_name
|
||||
WHERE p.table_owner LIKE ''' || '&&owner' || ''' ESCAPE ''\''
|
||||
AND p.table_name LIKE ''' || '&&table_name' || ''' ESCAPE ''\''
|
||||
AND p.partition_name LIKE ''' || '&&partition_name' || ''' ESCAPE ''\''
|
||||
AND NVL(s.subpartition_name,''x'') LIKE ''' || '&&subpartition_name' || ''' ESCAPE ''\''
|
||||
'
|
||||
)
|
||||
columns
|
||||
table_owner VARCHAR2(30)
|
||||
, table_name VARCHAR2(30)
|
||||
, partition_name VARCHAR2(30)
|
||||
, partition_position NUMBER
|
||||
, part_high_value VARCHAR2(4000)
|
||||
, subpartition_count NUMBER
|
||||
, subpartition_name VARCHAR2(30)
|
||||
, subpartition_position NUMBER
|
||||
, subpart_high_value VARCHAR2(4000)
|
||||
)
|
||||
WHERE 1=1
|
||||
AND part_high_value LIKE '&&part_high_value' ESCAPE '\'
|
||||
--AND NVL(subpart_high_value,'x') LIKE '&&subpart_high_value' ESCAPE '\'
|
||||
ORDER BY table_name
|
||||
, partition_position
|
||||
, subpartition_position
|
||||
;
|
||||
|
||||
|
||||
@@footer
|
||||
Reference in New Issue
Block a user