Oracle篇—分区表的管理(第二篇,总共五篇)

☘️博主介绍☘️

✨又是一天没白过,我是奈斯,DBA一名✨

✌️擅长Oracle、MySQL、SQLserver、Linux,也在积极的扩展IT方向的其他知识面✌️

❣️❣️❣️大佬们都喜欢静静的看文章,并且也会默默的点赞收藏加关注❣️❣️❣️

    在上一篇文章中,我为大家介绍了分区表和分区索引的概念、分类等方面的知识。相信大家对分区表有了初步的了解。然而对于分区表的管理,才是后续工作中最为关键的部分。分区表的增加、拆分、删除、截断、收缩、合并以及修改等操作都是日常维护中必不可少的技能。只有熟练掌握这些技能,我们才能更好地应对分区表的各种问题,确保数据库的高效运行。今天,我将深入探讨分区表的管理,带领大家进一步了解如何进行分区的增加、拆分、删除、截断、收缩、合并以及修改等操作。

    因为分区技术需要介绍的太多,那么我将分成五篇来进行介绍,以便大家因为篇幅过长而感到阅读疲惫。五篇的内容分别如下:

第一篇:分区表和分区索引的介绍和分类

第二篇:分区表的管理(当前篇)

第三篇:分区索引的重建和管理

第四篇:分区表和分区索引常用的检查语句

第五篇:普通表迁移到分区表


点关注不迷路,开启缘分第一步!

目录

1、分区表的管理

1.1 增加表分区(add partition)

案例一:range/list分区添加2个新分区(分区无maxvalue/default值。不加update indexes,本地分区索引、全局分区索引、普通索引都有效) 

案例二:range/list分区添加一个新分区(分区有maxvalue/default值。不加update indexes,本地分区索引、全局分区索引、普通索引都有效)

案例三:hash分区添加2个新分区(不加update indexes,本地分区索引、全局分区索引、普通索引都将失效,所以要加update indexes) 

案例四:复合分区增加2个分区(range—hash / list—hash。不加update indexes,本地分区索引、全局分区索引、普通索引都有效)

1.2 拆分表分区(split partition,支持范围、列表、间隔分区;不支持hash等。具体参考官方手册。并且一个分区一次只能拆分为2个分区,不能一条alter...split partition拆分2个以上分区会报错)

案例一:范围分区拆分at,将一个分区拆分为2个分区(不加update indexes,本地分区索引、全局分区索引、普通索引都有效)

案例二:列表分区拆分values,将一个分区拆分为2个分区(不加update indexes,本地分区索引、全局分区索引、普通索引都有效)

1.3 删除表分区(drop partition,支持范围、间隔、列表分区;不支持hash、引用分区等)

一、删除分区语法(不加update indexes全局分区索引、普通索引都将失效,本地分区索引自动维护,所以要加update indexes):

二、删除子分区语法(不加update indexes全局分区索引、普通索引都将失效,本地分区索引自动维护,所以要加update indexes):

1.4 截断表分区(truncate partition,支持范围、间隔、列表分区;不支持hash、引用分区等)

一、截断分区语法(不加update indexes仅全局分区索引失效,普通索引、本地分区索引自动维护,所以要加update indexes):

二、截断子分区语法(不加update indexes仅全局分区索引失效,普通索引、本地分区索引自动维护,所以要加update indexes):

1.5 收缩表分区(coalesce partition,只对hash分区有效,收缩分区的数据分配到其他分区不会丢失数据)

案例一:收缩hash表分区,将6个分区收缩为5个(不加update indexes,本地分区索引、全局分区索引、普通索引都将失效,所以要加update indexes)

案例二:收缩range/list--hash表分区(不加update indexes,本地分区索引、全局分区索引、普通索引都将失效,所以要加update indexes)

1.6 合并表分区(Merge Partitions,支持范围、间隔、列表分区;不支持hash、引用分区等。只能合并两个相邻的分区)

案例一:合并范围分区(不加update indexes,本地分区索引、全局分区索引、普通索引都有效)

案例二:合并复合分区list--hash(不加update indexes,本地分区索引、全局分区索引、普通索引都将失效,所以要加update indexes)

1.7 修改表分区(包括add/drop partition,只对list分区有效)

案例一:修改添加(modify....add)list分区一个分区的值(添加的值如在别的分区存在那么会报错,只能添加任何分区都没有的值;不加update indexes,本地分区索引、全局分区索引、普通索引都有效)

1.8 修改表分区默认表空间属性(Modify Default Attributes)

一、修改表分区的默认表空间(现有分区的默认表空间不变更,后续增加的会变更)

二、修改表分区某一个分区的默认表空间(修改一个现有分区的默认表空间)

1.9 重命名表分区(rename partition)

一、重命名分区语法(不加update indexes,本地分区索引、全局分区索引、普通索引都有效)

二、重命名子分区语法(不加update indexes,本地分区索引、全局分区索引、普通索引都有效)


1、分区表的管理

      

1.1 增加表分区(add partition)

语法:

SQL> alter table table_name add

partition partition_name values less than (to_date('2014-01-01','yyyy-mm-dd')),  ---添加range分区

partition prartition_name values('男') ,    ---添加list分区

partition partition_max values less than (maxvalue/default),   --添加range、list的边界值分区

partition prartition_name tablespace tablespace_name   ---添加hash分区

[update indexes];   ---针对hash分区在添加分区时,表中有全局和本地索引时新加入的分区会失效,加上uodate indexes不会导致分区失效

总结:与hash相关的表分区,如果有分区索引,不管是本地还是全局新加入的分区会失效,需要重建新的索引分区,加上update indexes不需要重建

    

案例一:range/list分区添加2个新分区(分区无maxvalue/default值。不加update indexes,本地分区索引、全局分区索引、普通索引都有效) 

(1)查看表的分区类型

SQL> select * from user_part_tables where table_name='TABLE_R1';

(2)查看表的分区是否定义了最大值,也可以通过PL/SQL右键表查看 

SQL> select * from user_tab_partitions where table_name='TABLE_R1';

 (3)查看索引状态

SQL> select INDEX_NAME,LOCALITY,INTERVAL from dba_part_indexes where table_name='TABLE_R1';
SQL> select index_name,partition_name,status from dba_ind_partitions where index_name='TABLE_R1_NAME';

 (4)增加2分区时根据上一个分区的范围来定义

SQL> alter table table_r1 add partition P2018 values less than (to_date('2018-01-01','yyyy-mm-dd')) [update indexes];
SQL> alter table table_r1 add partition P2019 values less than (to_date('2019-01-01','yyyy-mm-dd')) [update indexes];SQL> select * from user_tab_partitions where table_name='TABLE_R1';

(5)查看索引是否有效(上步增加2个分区时没有加update indexes,普通索引和本地索引都有效)

SQL> select INDEX_NAME,LOCALITY,INTERVAL from dba_part_indexes where table_name='TABLE_R1';
SQL> select index_name,partition_name,status from dba_ind_partitions where index_name='TABLE_R1_NAME';     ---Local索引进行add/drop/split/truncate表的分区时,会自动维护其索引分区不失效

    

案例二:range/list分区添加一个新分区(分区有maxvalue/default值。不加update indexes,本地分区索引、全局分区索引、普通索引都有效)

(1)查看表的分区类型

SQL> select * from user_part_tables where table_name='TABLE_R1';

(2)查看表的分区是否定义了最大值,也可以通过PL/SQL右键表查看

SQL> select * from user_tab_partitions where table_name='TABLE_R1';

(3)查看索引状态 

SQL> select INDEX_NAME,LOCALITY,INTERVAL from dba_part_indexes where table_name='TABLE_R1';  
SQL> select index_name,partition_name,status from dba_ind_partitions where index_name='TABLE_R1_NAME';

(4)增加1分区时根据上一个分区的范围来定义

错误增加分区的写法: 

SQL> alter table table_r1 add partition P2020 values less than (to_date('2019-01-01','yyyy-mm-dd')) [update indexes];

因为有范围分区中有maxvalue分区,所以在添加一个分区时表ora-14074错误,添加的分区的值一定要大于最后一个分区,所以只能拆分p_max分区或者删除后添加

正确增加分区的写法:拆分p_max分区

SQL> alter table table_r1 split partition p_max at (to_date('2020-01-01','YYYY-MM-DD')) into (partition p2020,partition p_max);    ---一个分区一次只能拆分为2个分区,不能一条alter...split partition拆分2个以上分区会报错SQL> select * from user_tab_partitions where table_name='TABLE_R1';

(5)查看索引是否有效(上步对分区进行拆分没有加update indexes,普通索引和本地索引都有效)

SQL> select INDEX_NAME,LOCALITY,INTERVAL from dba_part_indexes where table_name='TABLE_R1';
SQL> select index_name,partition_name,status from dba_ind_partitions where index_name='TABLE_R1_NAME';   ---Local索引进行add/drop/split/truncate表的分区时,会自动维护其索引分区不失效

     

案例三:hash分区添加2个新分区(不加update indexes,本地分区索引、全局分区索引、普通索引都将失效,所以要加update indexes) 

(1)查看表的分区类型

SQL> select * from user_part_tables where table_name='TABLE_H1';

SQL> select * from user_tab_partitions where table_name='TABLE_H1';

 (2)查看索引状态

SQL> select INDEX_NAME,LOCALITY,INTERVAL from dba_part_indexes where table_name='TABLE_H1'; 
SQL> select index_name,partition_name,status from dba_ind_partitions where index_name='TABLE_H1_NAME';

(3)增加2分区

系统自动命名分区名添加:
SQL> alter table table_h1 add partition;        ---内部命名的分区名为SYS_P378
自定义分区名添加:
SQL> alter table table_h1 add partition p6 update indexes;     ---注:添加hash分区时只能一个一个分区添加,不能一条alter...add添加2个分区会报错SQL> select * from user_tab_partitions where table_name='TABLE_H1';

(4)查看索引是否有效(上步系统自动命名的分区没有加update indexes,导致普通索引和创建的分区索引失效)

SQL> select INDEX_NAME,LOCALITY,INTERVAL from dba_part_indexes where table_name='TABLE_H1';  
SQL> select index_name,partition_name,status from dba_ind_partitions where index_name='TABLE_H1_NAME';    ---系统自动命名的分区没有加上update indexes,导致分区SYS_P378失效,也导致了p1失效。添加p6分区加上了update indexes索引分区p6可用

(5)对索引进行重建

SQL> alter index I_TABLE_H1_CARDID rebuild partition p1 online;
SQL> alter index I_TABLE_H1_CARDID rebuild partition SYS_P378 online;SQL> select * from user_ind_partitions where index_name='I_TABLE_H1_CARDID';

     

案例四:复合分区增加2个分区(range—hash / list—hash。不加update indexes,本地分区索引、全局分区索引、普通索引都有效)

(1)查看表的分区类型

SQL> select * from user_part_tables where table_name='TABLE_RH1';

SQL> select * from user_tab_partitions where table_name='TABLE_RH1';

SQL> select * from user_tab_subpartitions where table_name='TABLE_RH1';

 (2)查看索引状态

SQL> select INDEX_NAME,LOCALITY,INTERVAL from dba_part_indexes where table_name='TABLE_RH1';  
SQL> select index_name,partition_name,status from dba_ind_partitions where index_name='TABLE_RH1_NAME';
SQL> select index_name,partition_name,status from dba_ind_subpartitions where index_name='TABLE_RH1_NAME';

 (3)增加2分区

为复合分区增加分区之前,查看下最后一个分区建表语句,用于增加分区的参考

SQL> alter table table_rh1 add partition P2017 values less than (TO_DATE(' 2018-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) subpartitions 2 [update indexes];
SQL> alter table table_rh1 add partition P2018 values less than (TO_DATE(' 2019-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) subpartitions 1 [update indexes];select * from user_tab_subpartitions where table_name='TABLE_RH1';

(4)查看索引是否有效(上步对分区进行添加没有加update indexes,普通索引和本地索引都有效)

SQL> select INDEX_NAME,LOCALITY,INTERVAL from dba_part_indexes where table_name='TABLE_RH1';  
SQL> select index_name,partition_name,status from dba_ind_partitions where index_name='TABLE_RH1_NAME';    ---拥有子分区的索引需要用user_ind_subpartitions查看索引的状态
SQL> select index_name,partition_name,status from dba_ind_subpartitions where index_name='TABLE_RH1_NAME';    ---Local索引进行add/drop/split/truncate表的分区时,会自动维护其索引分区不失效

     

   

1.2 拆分表分区(split partition,支持范围、列表、间隔分区;不支持hash等。具体参考官方手册。并且一个分区一次只能拆分为2个分区,不能一条alter...split partition拆分2个以上分区会报错

    

案例一:范围分区拆分at,将一个分区拆分为2个分区(不加update indexes,本地分区索引、全局分区索引、普通索引都有效)

(1)查看表的分区类型

SQL> select * from user_part_tables where table_name='TABLE_R1';

(2)查看表的分区是否定义了最大值,也可以通过PL/SQL右键表查看

select * from user_tab_partitions where table_name='TABLE_R1';

(3)查看索引状态

SQL> select INDEX_NAME,LOCALITY,INTERVAL from dba_part_indexes where table_name='TABLE_R1';  
SQL> select index_name,partition_name,status from dba_ind_partitions where index_name='TABLE_R1_NAME';

(4)将p_max拆分成2分区时根据边界分区的范围来定义

SQL> alter table table_r1 split partition p_max at (to_date('2020-01-01','YYYY-MM-DD')) into (partition p2020,partition p_max) [update indexes];               ---将表table_r1 p_max分区拆分,范围分区at为拆分的值,拆分成p2020、p_max二个分区SQL> select * from user_tab_partitions where table_name='TABLE_R1';    ---将p_max拆分为2个分区

(5)查看索引是否有效(上步对分区进行添加没有加update indexes,普通索引和本地索引都有效)

SQL> select INDEX_NAME,LOCALITY,INTERVAL from dba_part_indexes where table_name='TABLE_R1';  
SQL> select index_name,partition_name,status from dba_ind_partitions where index_name='TABLE_R1_NAME';         ---Local索引进行add/drop/split/truncate表的分区时,会自动维护其索引分区不失效

     

案例二:列表分区拆分values,将一个分区拆分为2个分区(不加update indexes,本地分区索引、全局分区索引、普通索引都有效)

(1)查看表的分区类型

SQL> select * from user_part_tables where table_name='TABLE_L1';

(2)查看表的分区是否定义了最大值,也可以通过PL/SQL右键表查看

SQL> select * from user_tab_partitions where table_name='TABLE_L1';

(3)查看索引状态

SQL> select INDEX_NAME,LOCALITY,INTERVAL from dba_part_indexes where table_name='TABLE_L1';  
SQL> select index_name,partition_name,status from dba_ind_partitions where index_name='TABLE_L1_NAME';

(4)拆分2分区时根据边界分区的值来定义

SQL> alter table table_l1 split partition p_max values ('中性') into 
(partition par_03,partition p_max) [update indexes];   ---将表table_r1 p_max分区拆分,列表分区values为拆分的值,拆分成par_03、p_max二个分区SQL> select * from user_tab_partitions where table_name='TABLE_L1';       ---将p_max拆分为2个分区

 (5)查看索引是否有效(上步对分区进行添加没有加update indexes,普通索引和本地索引都有效)

SQL> select INDEX_NAME,LOCALITY,INTERVAL from dba_part_indexes where table_name='TABLE_L1';  
SQL> select index_name,partition_name,status from dba_ind_partitions where index_name='TABLE_L1_NAME';    ---Local索引进行add/drop/split/truncate表的分区时,会自动维护其索引分区不失效

  

   

1.3 删除表分区(drop partition,支持范围、间隔、列表分区;不支持hash、引用分区等)

一、删除分区语法(不加update indexes全局分区索引、普通索引都将失效,本地分区索引自动维护,所以要加update indexes):

SQL> alter table table_name drop partition partition_name [update indexes];

二、删除子分区语法(不加update indexes全局分区索引、普通索引都将失效,本地分区索引自动维护,所以要加update indexes):

SQL> alter table table_name drop subpartition partition_name [update indexes];

  

   

1.4 截断表分区(truncate partition,支持范围、间隔、列表分区;不支持hash、引用分区等)

   

一、截断分区语法(不加update indexes仅全局分区索引失效,普通索引、本地分区索引自动维护,所以要加update indexes):

SQL> alter table table_name truncate partition partition_name [drop storage] [update indexes];

drop storage:truncate partiton不是物理删除,行所占用的空间不能重新分配;加上drop storage物理空间被重新分配其他对象可以使用

   

二、截断子分区语法(不加update indexes仅全局分区索引失效,普通索引、本地分区索引自动维护,所以要加update indexes):

SQL> alter table table_name truncate subpartition partition_name [drop storage] [update indexes];

drop storage:truncate partiton不是物理删除,行所占用的空间不能重新分配;加上drop storage物理空间被重新分配其他对象可以使用

1.5 收缩表分区(coalesce partition,只对hash分区有效,收缩分区的数据分配到其他分区不会丢失数据)

    

案例一:收缩hash表分区,将6个分区收缩为5个(不加update indexes,本地分区索引、全局分区索引、普通索引都将失效,所以要加update indexes)

(1)查看表的分区类型

SQL> select * from user_part_tables where table_name='TABLE_H1';

(2)查看表的分区是否定义了最大值,也可以通过PL/SQL右键表查看

SQL> select * from user_tab_partitions where table_name='TABLE_H1';

(3)查看索引状态

SQL> select INDEX_NAME,LOCALITY,INTERVAL from dba_part_indexes where table_name='TABLE_H1';  
SQL> select index_name,partition_name,status from dba_ind_partitions where index_name='TABLE_H1_NAME';

(4)收缩hash表分区

SQL> alter table table_h1 coalesce partition [update indexes];       ---执行一次收缩一次,以此类推SQL> select * from user_tab_partitions where table_name='TABLE_H1'; 

(5)查看索引是否有效(上步收缩p6分区没有加update indexes,导致普通索引和创建的分区索引失效)

SQL> select INDEX_NAME,LOCALITY,INTERVAL from dba_part_indexes where table_name='TABLE_H1';  
SQL> select index_name,partition_name,status from dba_ind_partitions where index_name='TABLE_H1_NAME';     ---收缩p6分区没有加上update indexes,导致了p2效。Local索引进行add/drop/split/truncate表的分区时,会自动维护其索引分区不失效

(5)对索引进行重建

SQL> alter index TABLE_H1_NAME rebuild partition p2 online;       ---分区索引必须对每个分区重建,不能作为整体重建。如果将分区索引作为整体重建会报:ORA-14086: a partitioned index may not be rebuilt as a wholeSQL> select INDEX_NAME,LOCALITY,INTERVAL from dba_part_indexes where table_name='TABLE_H1';  
SQL> select index_name,partition_name,status from dba_ind_partitions where index_name='TABLE_H1_NAME';

   

案例二:收缩range/list--hash表分区(不加update indexes,本地分区索引、全局分区索引、普通索引都将失效,所以要加update indexes)

(1)查看表的分区类型

SQL> select * from user_part_tables where table_name='TABLE_RH1';

(2)查看表的分区是否定义了最大值,也可以通过PL/SQL右键表查看

SQL> select * from user_tab_subpartitions where table_name='TABLE_RH1';

(3)查看索引状态

SQL> select INDEX_NAME,LOCALITY,INTERVAL from dba_part_indexes where table_name='TABLE_RH1';  
SQL> select index_name,partition_name,status from dba_ind_partitions where index_name='TABLE_RH1_NAME';
SQL> select index_name,partition_name,status from dba_ind_subpartitions where index_name='TABLE_RH1_NAME';

 (4)收缩表分区

SQL> alter table table_rh1 modify partition p2017 coalesce subpartition [update indexes]; ---对表的range---hash分区p2017进行hash收缩1次。执行一次收缩一次,以此类推SQL> select * from user_tab_partitions where table_name='TABLE_RH1';

(4)查看索引是否有效(上步收缩复合p2017分区没加update indexes,导致普通索引和创建的分区索引失效)

SQL> select INDEX_NAME,LOCALITY,INTERVAL from dba_part_indexes where table_name='TABLE_RH1';  
SQL> select index_name,partition_name,status from dba_ind_partitions where index_name='TABLE_RH1_NAME';
SQL> select index_name,partition_name,status,SUBPARTITION_NAME from dba_ind_subpartitions where index_name='TABLE_RH1_NAME';     ---收缩p6分区没有加上update indexes,导致了p2效。Local索引进行add/drop/split/truncate表的分区时,会自动维护其索引分区不失效

(5)对索引进行重建

SQL> alter index TABLE_RH1_NAME rebuild subpartition SYS_SUBP387 online;
SQL> alter index TABLE_RH1_NAME rebuild subpartition SYS_SUBP389 online;    ---分区索引必须对每个分区重建,不能作为整体重建。如果将分区索引作为整体重建会报:ORA-14086: a partitioned index may not be rebuilt as a wholeSQL> select INDEX_NAME,LOCALITY,INTERVAL from dba_part_indexes where table_name='TABLE_RH1';  
SQL> select index_name,partition_name,status from dba_ind_partitions where index_name='TABLE_RH1_NAME';
SQL> select index_name,partition_name,status,SUBPARTITION_NAME from dba_ind_subpartitions where index_name='TABLE_RH1_NAME';     ---收缩p6分区没有加上update indexes,导致了p2效。Local索引进行add/drop/split/truncate表的分区时,会自动维护其索引分区不失效

   

      

1.6 合并表分区(Merge Partitions,支持范围、间隔、列表分区;不支持hash、引用分区等。只能合并两个相邻的分区)

   

案例一:合并范围分区(不加update indexes,本地分区索引、全局分区索引、普通索引都有效)

(1)查看表的分区类型

SQL> select * from user_part_tables where table_name='TABLE_R1';

(2)查看表的分区是否定义了最大值,也可以通过PL/SQL右键表查看

SQL> select * from user_tab_partitions where table_name='TABLE_R1';

(3)查看索引状态

SQL> select INDEX_NAME,LOCALITY,INTERVAL from dba_part_indexes where table_name='TABLE_R1';  
SQL> select index_name,partition_name,status from dba_ind_partitions where index_name='TABLE_R1_NAME';

(3)合并2分区时根据上一个分区的范围来定义

SQL> alter table TABLE_r1 merge partitions p2016,p2017 into partition p2017 [update indexes];         ---在合并分区时,into partition的分区名要为下界分区(如:合并p2016,p2017,下界分区名为p2017),不然报:ORA-14275: 不能将下界分区作为结果分区重用SQL> select * from user_tab_partitions where table_name='TABLE_R1';

(5)查看索引是否有效(上步对分区进合并加没有加update indexes,普通索引和本地索引都有效)

SQL> select INDEX_NAME,LOCALITY,INTERVAL from dba_part_indexes where table_name='TABLE_R1';  
SQL> select index_name,partition_name,status from dba_ind_partitions where index_name='TABLE_R1_NAME';         ---Local索引进行add/drop/split/truncate表的分区时,被合并的分区的索引失效,除非加上update indexes

    

案例二:合并复合分区list--hash(不加update indexes,本地分区索引、全局分区索引、普通索引都将失效,所以要加update indexes)

(1)查看表的分区类型

SQL> select * from user_part_tables where table_name='TABLE_LH1';

(2)查看表的分区是否定义了最大值,也可以通过PL/SQL右键表查看

SQL> select * from user_tab_subpartitions where table_name='TABLE_LH1';

(3)查看索引状态

SQL> select INDEX_NAME,LOCALITY,INTERVAL from dba_part_indexes where table_name='TABLE_LH1';  
SQL> select index_name,partition_name,status from dba_ind_partitions where index_name='TABLE_LH1_NAME';
SQL> select index_name,partition_name,status from dba_ind_subpartitions where index_name='TABLE_LH1_NAME';

(4)合并2分区

为复合分区合并分区之前,查看分区建表语句,用于合并分区的参考

合并主分区:
SQL> alter table table_lh1 merge partitions p_M,p_W into partition p_W_M [subpartitions number] [update indexes];   
subpartitions number:默认不加的话,会继承子分区的模板(如:2个分区都有2个子分区,合并主分区后,1主分区保持2个子分区)      ---在合并分区时,into partition的分区名要为下界分区(如:合并p2016,p2017,下界分区名为p2017),不然报:ORA-14275: 不能将下界分区作为结果分区重用合并子分区:
SQL> alter table table_lh1 merge subpartitions SYS_SUBP95,SYS_SUBP96 into subpartition SYS_SUBP [subpartitions number] [update indexes];     ---不支持与hash相关的表分区。报:ORA-14206-表没有按列表或范围方法进行子分区SQL> select * from user_tab_subpartitions where table_name='TABLE_LH1';

(5)查看索引是否有效(上步合并复合分区没加update indexes,导致普通索引和创建的分区索引失效)

SQL> select INDEX_NAME,LOCALITY,INTERVAL from dba_part_indexes where table_name='TABLE_LH1';  
SQL> select index_name,partition_name,status from dba_ind_partitions where index_name='TABLE_LH1_NAME';
SQL> select index_name,partition_name,SUBPARTITION_NAME,status from dba_ind_subpartitions where index_name='TABLE_LH1_NAME';

(6)对索引进行重建

SQL> alter index TABLE_LH1_NAME rebuild subpartition SYS_SUBP468 online;
SQL> alter index TABLE_LH1_NAME rebuild subpartition SYS_SUBP469 online;    ---分区索引必须对每个分区重建,不能作为整体重建。如果将分区索引作为整体重建会报:ORA-14086: a partitioned index may not be rebuilt as a wholeSQL> select INDEX_NAME,LOCALITY,INTERVAL from dba_part_indexes where table_name='TABLE_LH1';  
SQL> select index_name,partition_name,status from dba_ind_partitions where index_name='TABLE_LH1_NAME';
SQL> select index_name,partition_name,SUBPARTITION_NAME,status from dba_ind_subpartitions where index_name='TABLE_LH1_NAME';

  

  

1.7 修改表分区(包括add/drop partition,只对list分区有效)

修改删除list分区值的语法(只对list分区):

SQL> alter table table_name modify partition partiton_name drop values (‘list分区的值’) [update indexes];

修改添加list分区值的语法(只对list分区):

SQL> alter table table_name modify partiton partition_name add values (‘添加list分区的值’) [update indexes];

    

案例一:修改添加(modify....add)list分区一个分区的值(添加的值如在别的分区存在那么会报错,只能添加任何分区都没有的值;不加update indexes,本地分区索引、全局分区索引、普通索引都有效)

(1)查看表的分区类型

SQL> select * from user_part_tables where table_name='TABLE_L1';
SQL> select * from user_tab_partitions where table_name='TABLE_L1';

(2)查看索引状态

SQL> select INDEX_NAME,LOCALITY,INTERVAL from dba_part_indexes where table_name='TABLE_L1';  
SQL> select index_name,partition_name,status from dba_ind_partitions where index_name='TABLE_L1_NAME';

(3)添加par_01分区的值

添加分区内的值之前,查看分区建表语句,用于分区添加的参考

添加的值在default分区中:
SQL> alter table table_l1 modify partition par_01 add values ('山西省');      ---在对list分区的值进行add时,如果该值存在其他分区那么会报ORA-14324: 所要添加的值已存在于 DEFAULT 分区之中(不建议添加list分区中有数据的某个的值,建议新建表,将列的值加到分区中后进行迁移)
注:因为山西省在P_MAX分区(分区值为default)所以不能add,只能通过案例“拆分表分区”进行拆分添加值为新不在任何分区中:
SQL> alter table table_l1 modify partition par_01 add values ('马来西亚'); SQL> select * from user_tab_partitions where table_name='TABLE_L1';    ---par_01分区的“马来西亚”值添加 

(4)查看索引是否有效(上步对分区进行add没有加update indexes,普通索引和本地索引都有效)

SQL> select INDEX_NAME,LOCALITY,INTERVAL from dba_part_indexes where table_name='TABLE_L1';  
SQL> select index_name,partition_name,status from dba_ind_partitions where index_name='TABLE_L1_NAME';     ---Local索引进行add/drop/split/truncate表的分区时,被修改的分区的索引有效

1.8 修改表分区默认表空间属性(Modify Default Attributes)

一、修改表分区的默认表空间(现有分区的默认表空间不变更,后续增加的会变更)

SQL> alter table table_name modify default attributes tablespace tablespace_name;

二、修改表分区某一个分区的默认表空间(修改一个现有分区的默认表空间)

修改复合分区的默认表空间(只对复合分区有效,亲测范围、hash、列表分区报ORA-14253: 表未按组合分区方法分区):

SQL> alter table table_name modify default attributes for partition partition_name tablespace tablespace_name [update indexes];  

修改表分区某一个分区的默认表空间:

SQL> alter table table_name move partition partiton_name tablespace tablespace_name [update indexes];

SQL> alter table table_name move subpartition subpartition_name tablespace tablespace_name[update indexes];

  

  

1.9 重命名表分区(rename partition)

一、重命名分区语法(不加update indexes,本地分区索引、全局分区索引、普通索引都有效)

SQL> alter table table_name rename partition partition_name to partition_newname [update indexes];

二、重命名子分区语法(不加update indexes,本地分区索引、全局分区索引、普通索引都有效)

SQL> alter table table_name rename subpartition subpartition_name to subpartition_newname [update indexes];

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/246982.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go语言安装及开发环境配置

目录 官网 国内 Linux(CentOS & Ubuntu)安装 环境变量设置 命令行下开发 开发模式执行 编译 IDE下开发 插件安装 安装依赖工具 运行 常见问题 1、dial tcp 172.217.160.113:443: i/o timeout 2、VS Code不能完美显示zsh问题 官网 访问Golang官网的下载链接&a…

Unity3d C#实现三维场景中图标根据相机距离动态缩放功能

前言 如题的需求,其实可以通过使用UI替代场景中的图标来实现,不过这样UI的处理稍微麻烦,而且需要在图标上添加粒子特效使用SpriteRender更方便快捷。这里就根据相机离图标的位置来计算图标的缩放大小即可。这样基本保持了图标的大小&#xf…

2024新版68套Axure RP大数据可视化大屏模板及通用组件+PSD源文件

Axure RP数据可视化大屏模板及通用组件库2024新版重新制作了这套新的数据可视化大屏模板及通用组件库V2版。新版本相比于V1版内容更加丰富和全面,但依然秉承“敏捷易用”的制作理念,这套作品也同样延续着我们对细节的完美追求,整个设计制作过…

《动手学深度学习(PyTorch版)》笔记3.1

Chapter3 Linear Neural Networks 3.1 Linear Regression 3.1.1 Basic Concepts 我们通常使用 n n n来表示数据集中的样本数。对索引为 i i i的样本,其输入表示为 x ( i ) [ x 1 ( i ) , x 2 ( i ) , . . . , x n ( i ) ] ⊤ \mathbf{x}^{(i)} [x_1^{(i)}, x_2…

k8s学习-DaemonSet和Job

1.1DaemonSet是什么 Deployment部署的副本Pod会分布在各个Node上,每个Node都可能运行好几个副本。DaemonSet的不同之处在于:每个Node上最多只能运行⼀个副本。DaemonSet的典型应用场景有: (1)在集群的每个节点上运⾏存…

可解释性人工智能(XAI)概述

文章目录 每日一句正能量前言可解释性人工智能(XAI)定义研究的作用应用领域XAI的目标后记 每日一句正能量 一个人若想拥有聪明才智,便需要不断地学习积累。 前言 人工智能(AI)的发展速度迅猛,并在许多领域…

HarmonyOS鸿蒙学习基础篇 - 通用事件

一、引言 HarmonyOS鸿蒙是华为推出的分布式操作系统,旨在为各种智能设备提供统一的操作系统。鸿蒙系统的一大特色是其强大的分布式能力,而通用事件则是实现这一能力的关键技术之一,本篇博客将介绍HarmonyOS鸿蒙中的通用事件。 二、 点击事件…

怎样自行搭建幻兽帕鲁游戏联机服务器?

幻兽帕鲁是一款深受玩家喜爱的多人在线游戏,为了获取更好的游戏体验,许多玩家希望能够自行搭建幻兽帕鲁游戏联机服务器,本文将指导大家如何自行搭建幻兽帕鲁游戏联机服务器。 自行搭建幻兽帕鲁游戏联机服务器,阿里云是一个不错的选…

Web 鼠标滑过有粒子掉落

最近在写接口&#xff0c;反正环境也有了&#xff0c;无聊写点代码 <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetUTF-8"><title>粒子效果</title><style>body {ma…

Linux——进程间通信(共享内存)

目录 system V共享内存 ​编辑 共享内存函数 共享内存的建立过程 shmget函数 shmctl函数 shmat函数 shmdt函数 实例代码 共享内存的特点 system V共享内存 共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间&#xff08;即内存通过某种映射关…

小电影网站上线之nginx配置不带www域名301重定向到www域名+接入腾讯云安全防护edgeone

背景 写了个电影网站&#xff08;纯粹搞着玩的&#xff09;&#xff0c;准备买个域名然后上线&#xff0c;但是看日志经常被一些恶意IP进行攻击&#xff0c;这里准备接入腾讯云的安全以及加速产品edgeone&#xff0c;记录下当时的步骤。 一、nginx配置重定向以及日志格式 ng…

webpack常用配置

1.webpack概念 ​ 本质上&#xff0c;webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具。当 webpack 处理应用程序时&#xff0c;它会在内部从一个或多个入口点构建一个 依赖图(dependency graph)&#xff0c;然后将你项目中所需的每一个模块组合成一个或多个 …

IDEA远程服务器开发

IDEA的远程开发是在本地去操远程服务器上的代码&#xff0c;可以直接将本地代码的编译,构建,调试,运行等工作都放在远程服务器上而本地运行一个客户端远程去操作服务器上的代码,就如同我们平常写代码一样。相比于云桌面成本更低,开发效率更高。 1.首先服务器配置jdk&#xff0…

win10通过ssh链接deepin23并开启x11转发

前提 主机环境&#xff1a;win10 lstc 虚拟机环境&#xff1a;deepin23beta2 终端&#xff1a;tabby x11服务器: vcxsrv 安装ssh sudo apt install ssh开启root登录(看你需求&#xff09; 首先你要给root账号设置密码 sudo passwd root修改配置文件 sudo vim /etc/ssh/ss…

gitee仓库使用中的警告

当 Git 执行 git pull 命令时&#xff0c;有时候会出现类似下面的警告信息&#xff1a; warning: ----------------- SECURITY WARNING ---------------- warning: | TLS certificate verification has been disabled! | warning: ------------------------------------------…

ASP.NET Core WebAPI从HTTPS调整为HTTP启动

使用VS2022创建WebAPI项目时&#xff0c;默认勾选“配置HTTPS(H)”&#xff0c;这样启动WebAPI时以https方式启动。   如果要从HTTPS调整为HTTP启动&#xff0c;需要修改项目中以下几处&#xff0c;首先是Program.cs中删除app.UseHttpsRedirection()语句&#xff0c;删除后…

数据结构与算法:复杂度

友友们大家好啊&#xff0c;今天开始正式学习数据结构与算法有关内容&#xff0c;后续不断更新数据结构有关知识内容&#xff0c;希望多多支持&#xff01; 数据结构&#xff1a; 数据结构是用于存储和组织数据的方式&#xff0c;以便可以有效地访问和修改数据。不同的数据结构…

E5071C 是德科技网络分析仪

181/2461/8938产品概述&#xff1a; E5071C ENA 矢量网络分析仪&#xff0c;9 kHz 至 20 GHz&#xff0c;配有增强型 TDR 测量选件。 E5071C 是大规模无源元器件测试的理想解决方案。 它具有出色的测量性能&#xff0c;有助于提高测试吞吐量&#xff0c;尤其是与 E5092A 多端…

REVIT二次开发万能刷

将这两个参数赋予其他参数 步骤2 将来做个可以调控的版本 using System; using System.Collections.Generic; using System.Lin

C动态内存那些事

为什么存在动态内存分配&#xff1f; 首先&#xff0c;动态内存分配是计算机中一种重要的内存管理方法&#xff0c;它主要解决了静态内存分配无法灵活应对变化需求的问题。以下是几个存在动态内存分配的原因&#xff1a; 灵活性&#xff1a;动态内存分配允许程序在运行时根据需…