modified on 4 February 2010 at 07:39 ••• 311 views

Get partitioning and subpartitioning info

From Oramosswiki

Jump to: navigation, search
--
-- Purpose:
--  Shows partitioning and subpartitioning information for all tables.
--
-- Change History
--
-- Date         Author             Description
-- ===========  =================  ================================================
-- 04-FEB-2010  Jeff Moss          Created
--
WITH partition_columns AS
(
SELECT dpt.owner
,      dpt.table_name
,      dpt.partitioning_type
,      MAX(CASE WHEN dpkc.column_position = 1 THEN dpkc.column_name END) ptn_col1
,      MAX(CASE WHEN dpkc.column_position = 2 THEN dpkc.column_name END) ptn_col2
,      MAX(CASE WHEN dpkc.column_position = 3 THEN dpkc.column_name END) ptn_col3
,      MAX(CASE WHEN dpkc.column_position = 4 THEN dpkc.column_name END) ptn_col4
,      MAX(CASE WHEN dpkc.column_position = 5 THEN dpkc.column_name END) ptn_col5
,      MAX(CASE WHEN dpkc.column_position = 6 THEN dpkc.column_name END) ptn_col6
,      MAX(CASE WHEN dpkc.column_position = 7 THEN dpkc.column_name END) ptn_col7
,      MAX(CASE WHEN dpkc.column_position = 8 THEN dpkc.column_name END) ptn_col8
FROM   dba_part_key_columns dpkc
,      dba_part_tables dpt
WHERE  dpkc.owner = dpt.owner
AND    dpkc.name = dpt.table_name
GROUP BY dpt.owner, dpt.table_name, dpt.partitioning_type
)
, subpartition_columns AS
(
SELECT dpt.owner
,      dpt.table_name
,      dpt.subpartitioning_type
,      MAX(CASE WHEN dskc.column_position = 1 THEN dskc.column_name END) sub_ptn_col1
,      MAX(CASE WHEN dskc.column_position = 2 THEN dskc.column_name END) sub_ptn_col2
,      MAX(CASE WHEN dskc.column_position = 3 THEN dskc.column_name END) sub_ptn_col3
,      MAX(CASE WHEN dskc.column_position = 4 THEN dskc.column_name END) sub_ptn_col4
,      MAX(CASE WHEN dskc.column_position = 5 THEN dskc.column_name END) sub_ptn_col5
,      MAX(CASE WHEN dskc.column_position = 6 THEN dskc.column_name END) sub_ptn_col6
,      MAX(CASE WHEN dskc.column_position = 7 THEN dskc.column_name END) sub_ptn_col7
,      MAX(CASE WHEN dskc.column_position = 8 THEN dskc.column_name END) sub_ptn_col8
FROM   dba_subpart_key_columns dskc
,      dba_part_tables dpt
WHERE  dskc.owner = dpt.owner
AND    dskc.name = dpt.table_name
GROUP BY dpt.owner, dpt.table_name, dpt.subpartitioning_type
)
SELECT tab.owner
,      tab.table_name
,      pc.partitioning_type
,      REGEXP_REPLACE(REPLACE(pc.ptn_col1||','||pc.ptn_col2||','||pc.ptn_col3||','||pc.ptn_col4||','||pc.ptn_col5||','||pc.ptn_col6||','||pc.ptn_col7||','||pc.ptn_col8
                             ,',,')
                     ,',$') ptn_column_list
,      sc.subpartitioning_type
,      REGEXP_REPLACE(REPLACE(sc.sub_ptn_col1||','||sc.sub_ptn_col2||','||sc.sub_ptn_col3||','||sc.sub_ptn_col4||','||sc.sub_ptn_col5||','||sc.sub_ptn_col6||','||sc.sub_ptn_col7||','||sc.sub_ptn_col8
                             ,',,')
                     ,',$') sub_ptn_column_list
FROM   dba_tables tab
,      partition_columns pc
,      subpartition_columns sc
WHERE  tab.owner = pc.owner(+)
AND    tab.table_name = pc.table_name(+)
AND    pc.owner = sc.owner(+)
AND    pc.table_name = sc.table_name(+)
ORDER BY 1,2
/

Which gives output similar to:

FRED                TABLE1               RANGE    COL1    HASH    COL1,COL2
WILMA                TABLE2               LIST    COL1