问题描述
团队,
正在通读这份文件。
http://docs.oracle.com/database/122/SQLRF/CREATE-INDEX.htm#GUID-1F89BBC0-825F-4215-AF71-7588E31D8BFE__BABCHJDH
<报价>
当创建索引或索引的某些分区或子分区不可用时,不会为不可用对象分配任何段。不可用的索引或索引分区不消耗数据库中的空间。
报价如何仅适用于本地分区的索引,而不适用于全局分区的索引和非分区的索引。
您能否帮助我理解为什么在全局分区索引和非分区索引的情况下不会释放这些未使用的段?
正在通读这份文件。
http://docs.oracle.com/database/122/SQLRF/CREATE-INDEX.htm#GUID-1F89BBC0-825F-4215-AF71-7588E31D8BFE__BABCHJDH
<报价>
当创建索引或索引的某些分区或子分区不可用时,不会为不可用对象分配任何段。不可用的索引或索引分区不消耗数据库中的空间。
报价如何仅适用于本地分区的索引,而不适用于全局分区的索引和非分区的索引。
demo@ORA12C> create table t 2 partition by range( created_dt ) 3 ( partition p2013 values less than 4 ( to_date('01-jan-2014','dd-mon-yyyy') ) , 5 partition p2014 values less than 6 ( to_date('01-jan-2015','dd-mon-yyyy') ) , 7 partition pmax values less than (maxvalue) ) 8 as 9 select a.* , 10 to_date('01-Jan-2013','dd-mon-yyyy') + 11 mod(rownum,1825) created_dt 12 from all_objects a ; Table created. demo@ORA12C> create index t_nonpart_idx on t(object_id); Index created. demo@ORA12C> create index t_globalpart_idx on t(object_id,owner) 2 global partition by hash(object_id) ( 3 partition p1, 4 partition p2 ) ; Index created. demo@ORA12C> create index t_local_idx on t(object_name) local; Index created. demo@ORA12C> column index_name format a20 demo@ORA12C> column partition_name format a10 demo@ORA12C> column segment_name format a20 demo@ORA12C> demo@ORA12C> select index_name,status 2 from user_indexes 3 where index_name = 'T_NONPART_IDX'; INDEX_NAME STATUS -------------------- -------- T_NONPART_IDX VALID demo@ORA12C> demo@ORA12C> select index_name,partition_name,status 2 from user_ind_partitions 3 where index_name in ('T_GLOBALPART_IDX', 4 'T_LOCAL_IDX'); INDEX_NAME PARTITION_ STATUS -------------------- ---------- -------- T_GLOBALPART_IDX P1 USABLE T_GLOBALPART_IDX P2 USABLE T_LOCAL_IDX P2013 USABLE T_LOCAL_IDX P2014 USABLE T_LOCAL_IDX PMAX USABLE demo@ORA12C> demo@ORA12C> select segment_name,partition_name,extents 2 from user_segments 3 where segment_name in ( 'T_NONPART_IDX' , 4 'T_GLOBALPART_IDX' , 'T_LOCAL_IDX' ) 5 order by segment_name,partition_name nulls first; SEGMENT_NAME PARTITION_ EXTENTS -------------------- ---------- ---------- T_GLOBALPART_IDX P1 23 T_GLOBALPART_IDX P2 23 T_LOCAL_IDX P2013 20 T_LOCAL_IDX P2014 20 T_LOCAL_IDX PMAX 23 T_NONPART_IDX 17 6 rows selected. demo@ORA12C> alter table t 2 split partition pmax at 3 ( to_date('01-jan-2016','dd-mon-yyyy') ) 4 into ( partition p2016, partition pmax); Table altered. demo@ORA12C> select index_name,status 2 from user_indexes 3 where index_name = 'T_NONPART_IDX'; INDEX_NAME STATUS -------------------- -------- T_NONPART_IDX UNUSABLE demo@ORA12C> demo@ORA12C> select index_name,partition_name,status 2 from user_ind_partitions 3 where index_name in ('T_GLOBALPART_IDX', 4 'T_LOCAL_IDX'); INDEX_NAME PARTITION_ STATUS -------------------- ---------- -------- T_GLOBALPART_IDX P1 UNUSABLE T_GLOBALPART_IDX P2 UNUSABLE T_LOCAL_IDX P2013 USABLE T_LOCAL_IDX P2014 USABLE T_LOCAL_IDX P2016 UNUSABLE T_LOCAL_IDX PMAX UNUSABLE 6 rows selected. demo@ORA12C> select segment_name,partition_name,extents 2 from user_segments 3 where segment_name in ( 'T_NONPART_IDX' , 4 'T_GLOBALPART_IDX' , 'T_LOCAL_IDX' ) 5 order by segment_name,partition_name nulls first; SEGMENT_NAME PARTITION_ EXTENTS -------------------- ---------- ---------- T_GLOBALPART_IDX P1 23 T_GLOBALPART_IDX P2 23 T_LOCAL_IDX P2013 20 T_LOCAL_IDX P2014 20 T_NONPART_IDX 17 demo@ORA12C>复制
您能否帮助我理解为什么在全局分区索引和非分区索引的情况下不会释放这些未使用的段?
专家解答
这里的关键点是当你create它们需要不可用的索引。
脚本创建可用的索引。拆分分区不会重新创建全局索引。所以他们保持他们的范围。其中许多将与不受拆分影响的行有关。
如果在创建索引时添加不可用,则会看到数据库不会创建任何扩展:
索引是UNUSABLE,不是UNUSED。
PS-LiveSQL链接应该指向your script。Not its homepage!
脚本创建可用的索引。拆分分区不会重新创建全局索引。所以他们保持他们的范围。其中许多将与不受拆分影响的行有关。
如果在创建索引时添加不可用,则会看到数据库不会创建任何扩展:
create table t partition by range( created_dt ) ( partition p2013 values less than ( to_date('01-jan-2014','dd-mon-yyyy') ) , partition p2014 values less than ( to_date('01-jan-2015','dd-mon-yyyy') ) , partition pmax values less than (maxvalue) ) as select a.* , to_date('01-Jan-2013','dd-mon-yyyy') + mod(rownum,1825) created_dt from all_objects a ; create index t_nonpart_idx on t(object_id) unusable; create index t_globalpart_idx on t(object_id,owner) global partition by hash(object_id) ( partition p1, partition p2 ) unusable; create index t_local_idx on t(object_name) local unusable; select segment_name,partition_name,extents from user_segments where segment_name in ( 'T_NONPART_IDX' , 'T_GLOBALPART_IDX' , 'T_LOCAL_IDX' ) order by segment_name,partition_name nulls first; no rows selected alter table t split partition pmax at ( to_date('01-jan-2016','dd-mon-yyyy') ) into ( partition p2016, partition pmax); select segment_name,partition_name,extents from user_segments where segment_name in ( 'T_NONPART_IDX' , 'T_GLOBALPART_IDX' , 'T_LOCAL_IDX' ) order by segment_name,partition_name nulls first; no rows selected复制
索引是UNUSABLE,不是UNUSED。
PS-LiveSQL链接应该指向your script。Not its homepage!
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
592次阅读
2025-04-15 17:24:06
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
552次阅读
2025-04-18 14:18:38
Oracle SQL 执行计划分析与优化指南
Digital Observer
502次阅读
2025-04-01 11:08:44
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
476次阅读
2025-04-08 09:12:48
墨天轮个人数说知识点合集
JiekeXu
476次阅读
2025-04-01 15:56:03
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
468次阅读
2025-04-20 10:07:02
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
456次阅读
2025-04-22 00:20:37
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
429次阅读
2025-04-22 00:13:51
Oracle 19c RAC更换IP实战,运维必看!
szrsu
425次阅读
2025-04-08 23:57:08
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
411次阅读
2025-04-17 17:02:24