【DB笔试面试473】分区表常用数据字典视图有哪些?

  • 2019 年 10 月 11 日
  • 筆記

题目部分

分区表常用数据字典视图有哪些?

答案部分

Oracle分区表相关数据字典视图如下所示:

(1)显示数据库所有分区表的信息:DBA_PART_TABLES。

(2)显示表分区信息,显示数据库所有分区表的详细分区信息:DBA_TAB_PARTITIONS。

(3)显示子分区信息,显示数据库所有复合分区表的子分区信息:DBA_TAB_SUBPARTITIONS。

(4)显示分区列,显示数据库所有分区表的分区列信息:DBA_PART_KEY_COLUMNS。

(5)显示子分区列,显示数据库所有分区表的子分区列信息:DBA_SUBPART_KEY_COLUMNS。

关于分区表的一些数据字典,作者写了以下3个脚本:

所有的分区表:

SELECT d."TABLE_OWNER",         d."TABLE_NAME",         decode(dp.subpartitioning_type,                'NONE',                '',                dp.partitioning_type || '-' || dp.subpartitioning_type) all_partitioning_type,         dp.partitioning_type,         (SELECT to_char(wm_concat(dd.column_name))          FROM   DBA_PART_KEY_COLUMNS dd          WHERE  dd.name = d.table_name          AND    dd.object_type = 'TABLE'          AND    dd.owner = d.table_owner) PART_KEY_COLUMNS,         dp.partition_count,         dp.interval,         dp.partitioning_key_count,         dp.status,         d."PARTITION_NAME",         d.segment_created,         (SELECT nb.CREATED          FROM   dba_objects nb          WHERE  nb.OWNER = d.table_owner          AND    nb.SUBOBJECT_NAME = d.partition_name          AND    nb.OBJECT_NAME = d.table_name) partition_CREATED,         d. "PARTITION_POSITION",         d."TABLESPACE_NAME",         d."LAST_ANALYZED",         (SELECT nb.LAST_DDL_TIME          FROM   dba_objects nb          WHERE  nb.OWNER = d.table_owner          AND    nb.SUBOBJECT_NAME = d.partition_name          AND    nb.OBJECT_NAME = d.table_name) LAST_DDL_TIME,         d."NUM_ROWS",         d."BLOCKS",         dts.STALE_STATS, --统计信息是否变的陈旧         dtm.inserts,         dtm.updates,         dtm.deletes,         dtm.truncated,         dtm.drop_segments,         D.HIGH_VALUE,         d."BUFFER_POOL",         d."GLOBAL_STATS",         d."USER_STATS",         d."EMPTY_BLOCKS",         d."AVG_SPACE",         d."CHAIN_CNT",         d."SUBPARTITION_COUNT",         dp.def_subpartition_count,         dp.subpartitioning_type,         dp.subpartitioning_key_count,         dp.def_tablespace_name,         dp.def_pct_free,         dp.def_pct_used,         dp.def_ini_trans,         dp.def_max_trans,         dp.def_initial_extent,         dp.def_next_extent,         dp.def_min_extents,         dp.def_max_extents,         dp.def_pct_increase,         dp.def_freelists,         dp.def_freelist_groups,         dp.def_logging,         dp.def_compression,         dp.def_buffer_pool,         d."LOGGING",         d."PCT_FREE",         d."PCT_USED",         d."INI_TRANS",         d."MAX_TRANS",         d."INITIAL_EXTENT",         d."NEXT_EXTENT",         d."MIN_EXTENT",         d."MAX_EXTENT",         d."PCT_INCREASE",         d."FREELISTS",         d."FREELIST_GROUPS",         d."COMPRESSION",         d."AVG_ROW_LEN",         d."SAMPLE_SIZE"  FROM   DBA_TAB_PARTITIONS D  JOIN   Dba_Part_Tables dp  ON     (d.table_name = dp.table_name AND d.table_owner = dp.owner)  JOIN   dba_tab_statistics dts  ON     (d.table_name = dts.TABLE_NAME AND d.table_owner = dts.owner AND         dts.PARTITION_NAME = d.partition_name AND         dts.OBJECT_TYPE = 'PARTITION')  LEFT   OUTER JOIN (SELECT DO.OWNER,                            DO.OBJECT_NAME,                            DO.SUBOBJECT_NAME                     FROM   sys.tabpart$ t,                            dba_objects  do                     WHERE  t.obj# = do.OBJECT_ID) TT  ON     (D.TABLE_NAME = TT.OBJECT_NAME AND         D.PARTITION_NAME = TT.SUBOBJECT_NAME AND D.TABLE_OWNER = TT.OWNER)  LEFT   OUTER JOIN (SELECT dtm.table_owner,                            dtm.table_name,                            dtm.partition_name,                            SUM(dtm.updates) updates,                            SUM(dtm.inserts) inserts,                            SUM(dtm.deletes) deletes,                            SUM(dtm.drop_segments) drop_segments,                            MAX(dtm.truncated) truncated                     FROM   dba_tab_modifications dtm                     GROUP  BY dtm.table_owner,                               dtm.table_name,                               dtm.partition_name) dtm  ON     (d.table_owner = dtm.table_owner AND d.TABLE_NAME = dtm.table_name AND         dtm.partition_name = d.partition_name)  ORDER  BY d.table_name,            d.partition_position,            d.partition_name;  子分区的信息:  SELECT d."TABLE_OWNER",         d."TABLE_NAME",         dp.partitioning_type,         (SELECT to_char(wm_concat(dd.column_name))          FROM   DBA_PART_KEY_COLUMNS dd          WHERE  dd.name = d.table_name          AND    dd.object_type = 'TABLE'          AND    dd.owner = d.table_owner) PART_KEY_COLUMNS,         dp.partition_count,         dp.partitioning_key_count,         dp.status,         d."PARTITION_NAME",         d.subpartition_name,         wd.BYTES partition_size,         d.segment_created,         d.subpartition_position,         d."TABLESPACE_NAME",         d."LAST_ANALYZED",         d."NUM_ROWS",         d."BLOCKS",         dts.STALE_STATS,          dtm.inserts,         dtm.updates,         dtm.deletes,         dtm.truncated,         dtm.drop_segments,         d."BUFFER_POOL",         d."GLOBAL_STATS",         d."USER_STATS",         d."EMPTY_BLOCKS",         d."AVG_SPACE",         d."CHAIN_CNT",         dp.def_subpartition_count,         dp.subpartitioning_type,         (SELECT dd.column_name          FROM   dba_subpart_key_columns dd          WHERE  dd.name = d.table_name          AND    dd.owner = d.table_owner) subPART_KEY_COLUMNS,         dp.subpartitioning_key_count,         dp.def_tablespace_name,         dp.def_pct_free,         dp.def_pct_used,         dp.def_ini_trans,         dp.def_max_trans,         dp.def_initial_extent,         dp.def_next_extent,         dp.def_min_extents,         dp.def_max_extents,         dp.def_pct_increase,         dp.def_freelists,         dp.def_freelist_groups,         dp.def_logging,         dp.def_compression,         dp.def_buffer_pool,         d."LOGGING",         d."PCT_FREE",         d."PCT_USED",         d."INI_TRANS",         d."MAX_TRANS",         d."INITIAL_EXTENT",         d."NEXT_EXTENT",         d."MIN_EXTENT",         d."MAX_EXTENT",         d."PCT_INCREASE",         d."FREELISTS",         d."FREELIST_GROUPS",         d."COMPRESSION",         d."AVG_ROW_LEN",         d."SAMPLE_SIZE"  FROM   DBA_TAB_SUBPARTITIONS D  JOIN   Dba_Part_Tables dp  ON     (d.table_name = dp.table_name AND d.table_owner = dp.owner )  JOIN   dba_tab_statistics dts  ON     (dts.OWNER = d.table_owner AND dts.TABLE_NAME = d.table_name AND         d.partition_name = dts.PARTITION_NAME AND         d.subpartition_name = dts.SUBPARTITION_NAME         and dts.OBJECT_TYPE='SUBPARTITION')  LEFT   OUTER JOIN dba_segments wd  ON     (d.table_name = wd.segment_name AND         wd.partition_name = d.subpartition_name AND         wd.owner = d.table_owner AND wd.segment_type = 'TABLE SUBPARTITION')  LEFT   OUTER JOIN dba_tab_modifications dtm  ON     (d.table_owner = dtm.table_owner AND d.TABLE_NAME = dtm.table_name AND         dtm.partition_name = d.partition_name and dtm.subpartition_name=d.subpartition_name)  ORDER  BY d.table_name,            d.partition_name,            d.subpartition_name;  分区索引信息:  SELECT di.table_owner table_owner,         DP.table_name table_name,         d."INDEX_OWNER",         d."INDEX_NAME",         di.index_type index_type,         d."COMPOSITE",         d."PARTITION_NAME",         CASE             WHEN d.subpartition_count > 0 THEN              '含子分区索引'         END AS is_subpartition,         d.segment_created,         d."SUBPARTITION_COUNT",         d."HIGH_VALUE",         d."HIGH_VALUE_LENGTH",         d."PARTITION_POSITION",         d."STATUS",         d."TABLESPACE_NAME",         d."PCT_FREE",         d."INI_TRANS",         d."MAX_TRANS",         d."INITIAL_EXTENT",         d."NEXT_EXTENT",         d."MIN_EXTENT",         d."MAX_EXTENT",         d."PCT_INCREASE",         d."FREELISTS",         d."FREELIST_GROUPS",         d."LOGGING",         d."COMPRESSION",         d."BLEVEL",         d."LEAF_BLOCKS",         d."DISTINCT_KEYS",         d."AVG_LEAF_BLOCKS_PER_KEY",         d."AVG_DATA_BLOCKS_PER_KEY",         d."CLUSTERING_FACTOR",         d."NUM_ROWS",         DIS.STALE_STATS,         d."SAMPLE_SIZE",         d."LAST_ANALYZED",         d."BUFFER_POOL",         d."USER_STATS",         d."PCT_DIRECT_ACCESS",         d."GLOBAL_STATS",         d."DOMIDX_OPSTATUS",         d."PARAMETERS",         dp.interval  FROM   dba_ind_partitions d  JOIN   DBA_PART_INDEXES DP  ON     (D.INDEX_NAME = DP.index_name)  LEFT   OUTER JOIN DBA_INDEXES di  ON     (di.index_name = D.INDEX_NAME AND di.table_name = DP.table_name AND         DI.owner = D.INDEX_OWNER)  LEFT   OUTER JOIN dba_ind_statistics DIS  ON     (D.INDEX_OWNER = DIS.OWNER AND D.INDEX_NAME = DIS.INDEX_NAME AND         D.PARTITION_NAME = DIS.PARTITION_NAME AND         DIS.OBJECT_TYPE = 'PARTITION')  LEFT   OUTER JOIN (SELECT DO.OWNER,                            DO.OBJECT_NAME,                            DO.SUBOBJECT_NAME                     FROM   sys.indpartv$ t,                            dba_objects   do                     WHERE  t.obj# = do.OBJECT_ID                     AND    do.OBJECT_TYPE = 'INDEX PARTITION') TT  ON     (D.Index_Name = TT.OBJECT_NAME AND         D.PARTITION_NAME = TT.SUBOBJECT_NAME AND D.Index_Owner = TT.OWNER)  WHERE  d.index_owner NOT IN ('SYS', 'SYSTEM')  ORDER  BY dp.table_name,            d.index_name,            d.partition_position;  子分区索引:  SELECT DP.OWNER                    TABLE_OWNER,         DP.TABLE_NAME               TABLE_NAME,         d."INDEX_OWNER",         d."INDEX_NAME",         d."PARTITION_NAME",         D.SUBPARTITION_NAME,         D.SUBPARTITION_POSITION,         d."NUM_ROWS",         DIS.STALE_STATS,         d."SAMPLE_SIZE",         d."LAST_ANALYZED",         d."STATUS",         d."TABLESPACE_NAME",         D.SEGMENT_CREATED,         d."HIGH_VALUE",         d."HIGH_VALUE_LENGTH",         d."PCT_FREE",         d."INI_TRANS",         d."MAX_TRANS",         d."INITIAL_EXTENT",         d."NEXT_EXTENT",         d."MIN_EXTENT",         d."MAX_EXTENT",         d."PCT_INCREASE",         d."FREELISTS",         d."FREELIST_GROUPS",         d."LOGGING",         d."COMPRESSION",         d."BLEVEL",         d."LEAF_BLOCKS",         d."DISTINCT_KEYS",         d."AVG_LEAF_BLOCKS_PER_KEY",         d."AVG_DATA_BLOCKS_PER_KEY",         d."CLUSTERING_FACTOR",         d."BUFFER_POOL",         d."USER_STATS",         d."GLOBAL_STATS"    FROM DBA_IND_SUBPARTITIONS D    JOIN DBA_PART_INDEXES DP      ON (D.INDEX_NAME = DP.INDEX_NAME AND         D.INDEX_OWNER NOT IN ('SYS', 'SYSTEM'))    LEFT OUTER JOIN DBA_IND_STATISTICS DIS      ON (D.INDEX_OWNER = DIS.OWNER AND D.INDEX_NAME = DIS.INDEX_NAME AND         D.PARTITION_NAME = DIS.PARTITION_NAME AND         D.SUBPARTITION_NAME = DIS.SUBPARTITION_NAME AND         DIS.OBJECT_TYPE = 'INDEX SUBPARTITION')   ORDER BY D.INDEX_NAME, D.PARTITION_NAME;

本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。

About Me:小麦苗

● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/

● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步