分区表索引重建插入数据会造成所在分区的分区索引失效吗

用户名:bfc99
文章数:199
评论数:151
访问量:551941
注册日期:
阅读量:1297
阅读量:3317
阅读量:588030
阅读量:474621
51CTO推荐博文
以下转自:&作者:操作分区表对global和local索引的影响 (二)请参考&五、truncate partition1.分区含有数据,不加update indexesSQL& alter table part_test truncate partition p3;&Table truncated.&global索引失效不可用SQL&& select INDEX_NAME,TABLE_OWNER,STATUS from dba_indexes where index_name='IND_ID';&INDEX_NAME&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&& TABLE_OWNER&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&& STATUS------------------------------ ------------------------------ --------IND_ID&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&& DOWNLOAD &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&UNUSABLE&&local索引依然可用SQL& select INDEX_NAME,PARTITION_NAME,HIGH_VALUE,STATUS from dba_ind_partitions where INDEX_NAME='IND_NAME';&INDEX_NAME&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&& PARTITION_NAME&&&&&&&&&&&&&&&&&&&&&&&& &&&&& HIGH_VALUE&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&& STATUS------------------------------ ------------------------------ -------------------------------------------------------------------------------- --------IND_NAME&&&&&&&&&&&&&&&&&&&&&&& &&&&&& P1&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&& 5 &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&& &&&&&&&USABLEIND_NAME&&&&&&&&&&&&&&&&&&&&&&& &&&&&&P3&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&& 15&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&& &&&&&& USABLEIND_NAME&&&&&&&&&&&&&&&&&&&&&&& &&&&&& P4&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&& 20&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&& &&&&&& USABLE&&2.分区含有数据,加update indexesSQL& insert into part_test values(11,'lucy');& --落在p3分区&1 row created.&SQL&&Commit complete.&重建global索引SQL& alter index IND_ID&Index altered.&&SQL& alter table part_test truncate partition p3&Table truncated.&&加上update indexes后,global索引不再失效。SQL& select INDEX_NAME,TABLE_OWNER,STATUS from dba_indexes where index_name='IND_ID';&INDEX_NAME&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&& TABLE_OWNER&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&& STATUS------------------------------ ------------------------------ --------IND_ID&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&& DOWNLOAD &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&VALID&SQL&& select INDEX_NAME,PARTITION_NAME,HIGH_VALUE,STATUS from dba_ind_partitions where INDEX_NAME='IND_NAME';&INDEX_NAME&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&& PARTITION_NAME&&&&&&&&&&&&&&&&&&&&&&&& &&&&& HIGH_VALUE&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&& STATUS------------------------------ ------------------------------ -------------------------------------------------------------------------------- --------IND_NAME&&&&&&&&&&&&&&&&&&&&&&& &&&&&& P1&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&& &&5 &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&& &&&&&&&USABLEIND_NAME&&&&&&&&&&&&&&&&&&&&&&& &&&&&& P3&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&& 15&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&& &&&&&& USABLEIND_NAME&&&&&&&&&&&&&&&&&&&&&&& &&&&&& P4&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&& 20&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&& &&&&&& USABLE&小结:分区表中含有数据,truncate partition会造成global索引失效;truncate partition加上update indexes可用避免这种情况。&&六、SPLIT PARTITION(一个分区分裂为多个分区)准备实验分区&SQL& alter table part_test add partition max_part values less than(maxvalue);&Table altered.&SQL& insert into part_test values(21,'john');&1 row created.&SQL&& insert into part_test values(30,'dog');&1 row created.&SQL&&Commit complete.&&SQL&& select * from part_test partition(MAX_PART);&&&&&&&&&&&&&&&&&&&& ID NAME---------- ----------&&&&&&&&&&&&&&&&&&& 21 john&&&&&&&&&&&&&&&&&&& 30 dog&&1.不加update indexesSQL& alter table part_test split partition max_part at (25) into (partition p5,partition max_part );&Table altered.&global索引不可用SQL&& select INDEX_NAME,TABLE_OWNER,STATUS from dba_indexes where index_name='IND_ID';&INDEX_NAME&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&& TABLE_OWNER&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&& STATUS------------------------------ ------------------------------ --------IND_ID&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&& DOWNLOAD &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&UNUSABLE&&local索引,原分区和分裂出的新分区都不可用。SQL& select INDEX_NAME,PARTITION_NAME,HIGH_VALUE,STATUS from dba_ind_partitions where INDEX_NAME='IND_NAME';&INDEX_NAME&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&& PARTITION_NAME&&&&&&&&&&&&&&&&&&&&&&&& &&&&& HIGH_VALUE&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&& STATUS------------------------------ ------------------------------ -------------------------------------------------------------------------------- --------IND_NAME&&&&&&&&&&&&&&&&&&&&&&& &&&&&& P1&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&& 5 &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&& &&&&&&&USABLEIND_NAME&&&&&&&&&&&&&&&&&&&&&&& &&&&&& P3&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&& 15&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&& &&&&&& USABLEIND_NAME&&&&&&&&&&&&&&&&&&&&&&& &&&&&& P4&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&& 20&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&& &&&&&& USABLEIND_NAME&&&&&&&&&&&&&&&&&&&&&&& &&&&&& P5&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&& 25&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&& &&&&&& UNUSABLEIND_NAME&&&&&&&&&&&&&&&&&&&&&&& &&&&&& MAX_PART &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&MAXVALUE&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&& UNUSABLE&&2.加update indexes&SQL& select INDEX_NAME,PARTITION_NAME,HIGH_VALUE,STATUS from dba_ind_partitions where INDEX_NAME='IND_NAME';&INDEX_NAME&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&& PARTITION_NAME&&&&&&&&&&&&&&&&&&&&&&&& &&&&& HIGH_VALUE&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&& STATUS------------------------------ ------------------------------ -------------------------------------------------------------------------------- --------IND_NAME&&&&&&&&&&&&&&&&&&&&&&& &&&&&& P1&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&& 5 &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&& &&&&&&&USABLEIND_NAME&&&&&&&&&&&&&&&&&&&&&&& &&&&&& P3&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&& 15&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&& &&&&&& USABLEIND_NAME&&&&&&&&&&&&&&&&&&&&&&& &&&&&& P4&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&& 20&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&& &&&&&& USABLEIND_NAME&&&&&&&&&&&&&&&&&&&&&&& &&&&&& MAX_PART &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&MAXVALUE&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&& USABLE&SQL& alter table part_test split partition max_part at (25) into (partition p5,partition max_part )&Table altered.&加update indexes后,分裂不会造成索引失效。SQL& select INDEX_NAME,TABLE_OWNER,STATUS from dba_indexes where index_name='IND_ID';&INDEX_NAME&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&& TABLE_OWNER&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&& STATUS------------------------------ ------------------------------ --------IND_ID&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&& DOWNLOAD &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&VALID&SQL&& select INDEX_NAME,PARTITION_NAME,HIGH_VALUE,STATUS from dba_ind_partitions where INDEX_NAME='IND_NAME';&INDEX_NAME&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&& PARTITION_NAME&&&&&&&&&&&&&&&&&&&&&&&& &&&&& HIGH_VALUE&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&STATUS------------------------------ ------------------------------ -------------------------------------------------------------------------------- --------IND_NAME&&&&&&&&&&&&&&&&&&&&&&& &&&&&& P1&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&& 5 &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&& &&&&&&&USABLEIND_NAME&&&&&&&&&&&&&&&&&&&&&&& &&&&&& P3&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&& 15&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&& &&&&&& USABLEIND_NAME&&&&&&&&&&&&&&&&&&&&&&& &&&&&& P4&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&& 20&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&& &&&&&& USABLEIND_NAME&&&&&&&&&&&&&&&&&&&&&&& &&&&&& P5&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&& 25&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&& &&&&&& USABLEIND_NAME&&&&&&&&&&&&&&&&&&&&&&& &&&&&& MAX_PART &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&MAXVALUE&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&& USABLE&小结:split partition操作,会使global索引和local索引的原分区和分裂出的新分区都不可用。加上update indexes解决这个问题。&&&七、merge partition(合并分区)现有分区SQL&& select table_name,partition_name,HIGH_VALUE from dba_tab_partitions where table_name='PART_TEST' order by& PARTITION_NAME;&TABLE_NAME&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&& PARTITION_NAME&&&&&&&&&&&&&&&&&&&&&&&& &&&&& HIGH_VALUE------------------------------ ------------------------------ --------------------------------------------------------------------------------PART_TEST&&&&&&&&&&&&&&&&&&&&&&& &&&&&& MAX_PART &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&MAXVALUEPART_TEST&&&&&&&&&&&&&&&&&&&&&&& &&&&&& P1&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&& 5PART_TEST&&&&&&&&&&&&&&&&&&&&&&& &&&&&& P3&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&& 15PART_TEST&&&&&&&&&&&&&&&&&&&&&&& &&&&&& P4&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&& 20PART_TEST&&&&&&&&&&&&&&&&&&&&&&& &&&&&& P5&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&& 25&&&p4和p5分区都含有数据,把他们合并为p6分区&1.不加update indexesSQL&& alter table PART_TEST merge partitions p4,p5 into partition p6;&Table altered.&&global索引失效SQL& select INDEX_NAME,TABLE_OWNER,STATUS from dba_indexes where index_name='IND_ID';&INDEX_NAME&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&& TABLE_OWNER&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&& STATUS------------------------------ ------------------------------ --------IND_ID&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&& DOWNLOAD &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&UNUSABLE&新生成的分区的索引是失效的。SQL&& select INDEX_NAME,PARTITION_NAME,HIGH_VALUE,STATUS from dba_ind_partitions where INDEX_NAME='IND_NAME';&INDEX_NAME&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&& PARTITION_NAME&&&&&&&&&&&&&&&&&&&&&&&& &&&&& HIGH_VALUE&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&& STATUS------------------------------ ------------------------------ -------------------------------------------------------------------------------- --------IND_NAME&&&&&&&&&&&&&&&&&&&&&&& &&&&&& P1&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&& 5 &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&& &&&&&&&USABLEIND_NAME&&&&&&&&&&&&&&&&&&&&&&& &&&&&& P3&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&& 15&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&& &&&&&& USABLEIND_NAME&&&&&&&&&&&&&&&&&&&&&&& &&&&&& P6&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&& 25&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&& &&&&&& UNUSABLEIND_NAME&&&&&&&&&&&&&&&&&&&&&&& &&&& &&MAX_PART &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&MAXVALUE&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&& USABLE&&2.加update indexesSQL& alter table PART_TEST merge partitions p4,p5 into partition p6&&Table altered.&&global和local索引都正常。SQL& SQL&& select INDEX_NAME,TABLE_OWNER,STATUS from dba_indexes where index_name='IND_ID';&INDEX_NAME&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&& TABLE_OWNER&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&& STATUS------------------------------ ------------------------------ --------IND_ID&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&& DOWNLOAD &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&VALID&SQL&& select INDEX_NAME,PARTITION_NAME,HIGH_VALUE,STATUS from dba_ind_partitions where INDEX_NAME='IND_NAME';&INDEX_NAME&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&& PARTITION_NAME&&&&&&&&&&&&&&&&&&&&&&&& &&&&& HIGH_VALUE&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&& STATUS------------------------------ ------------------------------ -------------------------------------------------------------------------------- --------IND_NAME&&&&&&&&&&&&&&&&&&&&&&& &&&&&& P1&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&& 5 &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&& &&&&&&&USABLEIND_NAME&&&&&&&&&&&&&&&&&&&&&&& &&&&&& P3&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&& 15&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&& &&&&&& USABLEIND_NAME&&&&&&&&&&&&&&&&&&&&&&& &&&&&& P6&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&& 25&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&& &&&&&& USABLEIND_NAME&&&&&&&&&&&&&&&&&&&&&&& &&&&&& MAX_PART &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&MAXVALUE&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&& USABLE&&操作分区表对global和local索引的影响 (四)请参考&
了这篇文章
类别:┆阅读(0)┆评论(0)博客访问: 411014
博文数量: 62
博客积分: 877
博客等级: 准尉
技术积分: 1275
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Oracle
一:建立一个分区表,并插入数据:
SQL> create table part_tab (id1 number,id2 number)
2 partition by RANGE (id1)
4 partition p1 values less than (20),
5 partition p2 values less than (40),
6 partition p3 values less than (60),
7 partition p4 values less than (maxvalue)
Table created.
SQL> insert into part_tab select user_id,trunc(dbms_random.value(1,100)) from dba_
37 rows created.
Commit complete.
二:建立索引
&& 在分区表上建立索引可以分为全局索引和本地索引:全局索引是针对整张表建立的一个索引,可以在建立索引的时候根据索引键进行相应的分区;
SQL> create index global_index on part_tab(id1) global
2 partition by range(id1)
4 partition p1 values less than (50),
5 partition p2 values less than (maxvalue)
Index created.
SQL> create index global_index2 on part_tab(id2) global
2 partition by range(id2)
4 partition p1 values less than (50),
5 partition p2 values less than (maxvalue)
Index created.
以上就是对id1和id2字段建立了2个全局索引
建立全局索引的时候索引键必须是索引分区键的前缀,不然建立索引的时候会报错:
SQL> create index global_index2 on part_tab(id2) global
2 partition by range(id1)
4 partition p1 values less than (50),
5 partition p2 values less than (maxvalue)
partition by range(id1)
ERROR at line 2:
ORA-14038: GLOBAL partitioned index must be prefixed
SQL> create index global_index5 on part_tab(id2,id1) global
2 partition by range(id2)
4 partition p1 values less than (50),
5 partition p2 values less than (maxvalue)
Index created.
如果建立本地索引的时候,要建立的字段已经建立的全局索引,那建立这个索引的时候也要报错,反之亦然:
SQL> create index local_index1 on part_tab(id1)
create index local_index1 on part_tab(id1) local
ERROR at line 1:
ORA-01408: such column list already indexed
SQL> create index local_index1 on part_tab(id2)
create index local_index1 on part_tab(id2) local
ERROR at line 1:
ORA-01408: such column list already indexed
&删除其中之一就可以正确建立:
SQL> drop index global_index2;
Index dropped.
SQL> create index local_index1 on part_tab(id2)
Index created.
三:增加分区
&&& 增加分区的时候,本地索引会自动更新,会自动增加相应的分区索引;而全局索引则不会,如果增加分区的时候没加上update global indexes 字句的时候,全局索引就会失效:
在原先分区表的基础上增加一个分区
SQL> alter table part_tab add partition p5 values less than (80);
alter table part_tab add partition p5 values less than (80)
ERROR at line 1:
ORA-14074: partition bound must collate higher than that of the last partition
报错,意思就是说现在要建立的分区值必须大于最后一个的分区值
这里可以有2种方法:
&1:把大的那个分区删掉,再增加相应的分区,但这样会丢失数据
SQL> select * from part_tab where id1 > 60;
---------- ----------
---------- ----------
20 rows selected.
SQL> alter table part_tab drop partition p4 u
Table altered.
SQL> select * from part_tab where id1 > 60;
no rows selected
SQL> alter table part_tab add partition p4 values less than (maxvalue);
Table altered.
2:SPLIT PARTITION,分割那个分区,但对应分区上的本地索引会失效,分割完以后要重建这个本地索引
SQL> select count(*) from part_tab where id1 > 60;
----------
SQL> ALTER TABLE part_tab SPLIT PARTITION p4 AT (80) INTO (PARTITION P5, PARTITION P4) UPDATE GLOBAL INDEXES ;
Table altered.
SQL> select count(*) from part_tab where id1 > 60;
----------
SQL> select * from part_tab where id1 > 80;
---------- ----------
10 rows selected.
SQL> select index_name,partition_name,status from user_ind_
INDEX_NAME PARTITION_NAME STATUS
------------------------------ ------------------------------ --------
GLOBAL_INDEX P1 USABLE
GLOBAL_INDEX P2 USABLE
LOCAL_INDEX1 P2 USABLE
LOCAL_INDEX1 P1 USABLE
INDEX_NAME PARTITION_NAME STATUS
------------------------------ ------------------------------ --------
LOCAL_INDEX1 P3 USABLE
GLOBAL_INDEX5 P1 USABLE
GLOBAL_INDEX5 P2 USABLE
LOCAL_INDEX1 P5 UNUSABLE
LOCAL_INDEX1 P4 UNUSABLE
SQL> alter index local_index1 rebuild partition p4;
Index altered.
SQL> alter index local_index1 rebuild partition p5;
Index altered.
阅读(4076) | 评论(1) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。}

我要回帖

更多关于 分区表建索引 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信