Oracle-维护存在主键的分区表时的注意事项
文章目錄
- 概述
- 案例
- Step1.新建測試表,構造測試數據
- Step2. 查看索引狀態
- Step2.1 普通索引
- Step2.2 分區索引
- Step2.3 子分區索引
- Step3. 探究truncate/drop分區對global索引以及local索引的影響
- Step3.1 不指定update global indexes的場景
- Step3.2指定update global indexes的場景
- Step4. 探究exchange分區對global索引以及local索引的影響
- Step4.1 不指定update global indexes的場景
- Step4.2指定update global indexes的場景
- Step5 附加
概述
ORACLE關于維護分區表的官方指導文檔: Maintaining Partitions
我們知道,當將表中某個字段設置為主鍵的時候,oracle會自動的創建一個同名的唯一性索引。 分區表亦是如此。
案例
Step1.新建測試表,構造測試數據
我們這里建立一個list-hash的復合分區的測試表 ,同時為ARTISAN_ID這個字段創建了local索引,同時將test_primarykey_id 設置為主鍵。
-- Create table create table GLOBAL_INDEX_PRIMARYKEY (test_primarykey_id NUMBER(12) not null,artisan_id NUMBER(12) not null,created_date DATE not null,eff_date DATE not null,exp_date DATE,part_id NUMBER(6) default to_number(to_char(sysdate,'dd')) not null ) partition by list (PART_ID) subpartition by hash (TEST_PRIMARYKEY_ID) (partition P1 values (1)tablespace TAB_ARTISANpctfree 10initrans 1maxtrans 255(subpartition P1_1 tablespace TAB_ARTISAN,subpartition P2_1 tablespace TAB_ARTISAN,subpartition P3_1 tablespace TAB_ARTISAN,subpartition P4_1 tablespace TAB_ARTISAN,subpartition P5_1 tablespace TAB_ARTISAN,subpartition P6_1 tablespace TAB_ARTISAN,subpartition P7_1 tablespace TAB_ARTISAN,subpartition P8_1 tablespace TAB_ARTISAN),partition P2 values (2)tablespace TAB_ARTISANpctfree 10initrans 1maxtrans 255(subpartition P1_2 tablespace TAB_ARTISAN,subpartition P2_2 tablespace TAB_ARTISAN,subpartition P3_2 tablespace TAB_ARTISAN,subpartition P4_2 tablespace TAB_ARTISAN,subpartition P5_2 tablespace TAB_ARTISAN,subpartition P6_2 tablespace TAB_ARTISAN,subpartition P7_2 tablespace TAB_ARTISAN,subpartition P8_2 tablespace TAB_ARTISAN) ); -- Create/Recreate indexes create index IDX_ARTISAN_ID on GLOBAL_INDEX_PRIMARYKEY (ARTISAN_ID)local; -- Create/Recreate primary, unique and foreign key constraints alter table GLOBAL_INDEX_PRIMARYKEYadd constraint PK_GLOBAL_INDEX primary key (TEST_PRIMARYKEY_ID)using index tablespace TAB_ARTISANpctfree 10initrans 2maxtrans 255storage(initial 64Knext 1Mminextents 1maxextents unlimited);PLSQL中查看
然后構造部分數據
select count(1) from GLOBAL_INDEX_PRIMARYKEY partition(p1) a ; -- 140 select count(1) from GLOBAL_INDEX_PRIMARYKEY subpartition(p1_1) a ; --8 select count(1) from GLOBAL_INDEX_PRIMARYKEY subpartition(p2_1) a ; -- 19 select count(1) from GLOBAL_INDEX_PRIMARYKEY subpartition(p3_1) a ;-- 21 select count(1) from GLOBAL_INDEX_PRIMARYKEY subpartition(p4_1) a ;-- 13 select count(1) from GLOBAL_INDEX_PRIMARYKEY subpartition(p5_1) a ;-- 16 select count(1) from GLOBAL_INDEX_PRIMARYKEY subpartition(p6_1) a ;-- 25 select count(1) from GLOBAL_INDEX_PRIMARYKEY subpartition(p7_1) a ;-- 16 select count(1) from GLOBAL_INDEX_PRIMARYKEY subpartition(p8_1) a ;-- 22select count(1) from GLOBAL_INDEX_PRIMARYKEY partition(p2) a ; -- 90 select count(1) from GLOBAL_INDEX_PRIMARYKEY subpartition(p1_2) a ;--12 select count(1) from GLOBAL_INDEX_PRIMARYKEY subpartition(p2_2) a ;--13 select count(1) from GLOBAL_INDEX_PRIMARYKEY subpartition(p3_2) a ;--9 select count(1) from GLOBAL_INDEX_PRIMARYKEY subpartition(p4_2) a ;--6 select count(1) from GLOBAL_INDEX_PRIMARYKEY subpartition(p5_2) a ;--13 select count(1) from GLOBAL_INDEX_PRIMARYKEY subpartition(p6_2) a ;--10 select count(1) from GLOBAL_INDEX_PRIMARYKEY subpartition(p7_2) a ;--16 select count(1) from GLOBAL_INDEX_PRIMARYKEY subpartition(p8_2) a ;--11Step2. 查看索引狀態
Step2.1 普通索引
索引 如果是N/A 繼續查user_ind_partitions
SQL> select a.table_name ,a.index_name,a.status from user_indexes a where a.table_name = 'GLOBAL_INDEX_PRIMARYKEY';TABLE_NAME INDEX_NAME STATUS ------------------------------ ------------------------------ -------- GLOBAL_INDEX_PRIMARYKEY PK_GLOBAL_INDEX VALID GLOBAL_INDEX_PRIMARYKEY IDX_ARTISAN_ID N/ASQL>Step2.2 分區索引
分區索引 如果是N/A 繼續查 user_ind_subpartitions
SQL> select a.partition_name, a.index_name, a.status2 from user_ind_partitions a3 where a.index_name in (select a.index_name4 from user_indexes a5 where a.table_name = 'GLOBAL_INDEX_PRIMARYKEY');PARTITION_NAME INDEX_NAME STATUS ------------------------------ ------------------------------ -------- P1 IDX_ARTISAN_ID N/A P2 IDX_ARTISAN_ID N/ASQL>Step2.3 子分區索引
子分區, 因為該表復合分區 ,所以應該可以在 user_ind_subpartitions 查看到 索引的狀態 USABLE
SQL> select a.index_name, a.partition_name, a.subpartition_name, a.status2 from user_ind_subpartitions a3 where a.index_name in4 (select a.index_name5 from user_ind_partitions a6 where a.index_name in7 (select a.index_name8 from user_indexes a9 where a.table_name = 'GLOBAL_INDEX_PRIMARYKEY'));INDEX_NAME PARTITION_NAME SUBPARTITION_NAME STATUS ------------------------------ ------------------------------ ------------------------------ -------- IDX_ARTISAN_ID P1 P1_1 USABLE IDX_ARTISAN_ID P1 P2_1 USABLE IDX_ARTISAN_ID P1 P3_1 USABLE IDX_ARTISAN_ID P1 P4_1 USABLE IDX_ARTISAN_ID P1 P5_1 USABLE IDX_ARTISAN_ID P1 P6_1 USABLE IDX_ARTISAN_ID P1 P7_1 USABLE IDX_ARTISAN_ID P1 P8_1 USABLE IDX_ARTISAN_ID P2 P1_2 USABLE IDX_ARTISAN_ID P2 P2_2 USABLE IDX_ARTISAN_ID P2 P3_2 USABLE IDX_ARTISAN_ID P2 P4_2 USABLE IDX_ARTISAN_ID P2 P5_2 USABLE IDX_ARTISAN_ID P2 P6_2 USABLE IDX_ARTISAN_ID P2 P7_2 USABLE IDX_ARTISAN_ID P2 P8_2 USABLE16 rows selectedSQL>Step3. 探究truncate/drop分區對global索引以及local索引的影響
Step3.1 不指定update global indexes的場景
導致全局索引失效,向表中寫入數據失敗,拋出 ORA-01502: index "ARTISAN.PK_GLOBAL_INDEX" or partition of such index is in unusable state 。local索引正常。需要重建global 索引
--- 1.1 140條數據 select count(1) from GLOBAL_INDEX_PRIMARYKEY partition(P1) a ; -- 140 -- 1.2 truncate 分區 不指定update global indexes的情況即不維護全局索引。 alter table GLOBAL_INDEX_PRIMARYKEY truncate partition P1 ;-- 1.3 全局索引 ---------------- 失效 UNUSABLE狀態 select a.table_name ,a.index_name,a.status from user_indexes a where a.table_name = 'GLOBAL_INDEX_PRIMARYKEY';GLOBAL_INDEX_PRIMARYKEY PK_GLOBAL_INDEX UNUSABLE GLOBAL_INDEX_PRIMARYKEY IDX_ARTISAN_ID N/A--1.4 local索引 ------------- OK select a.partition_name, a.index_name, a.statusfrom user_ind_partitions awhere a.index_name in(select a.index_namefrom user_indexes awhere a.table_name = 'GLOBAL_INDEX_PRIMARYKEY');select a.index_name, a.partition_name, a.subpartition_name, a.statusfrom user_ind_subpartitions awhere a.index_name in(select a.index_namefrom user_ind_partitions awhere a.index_name in(select a.index_namefrom user_indexes awhere a.table_name = 'GLOBAL_INDEX_PRIMARYKEY'));IDX_ARTISAN_ID P1 P1_1 USABLE IDX_ARTISAN_ID P1 P2_1 USABLE IDX_ARTISAN_ID P1 P3_1 USABLE IDX_ARTISAN_ID P1 P4_1 USABLE IDX_ARTISAN_ID P1 P5_1 USABLE IDX_ARTISAN_ID P1 P6_1 USABLE IDX_ARTISAN_ID P1 P7_1 USABLE IDX_ARTISAN_ID P1 P8_1 USABLE IDX_ARTISAN_ID P2 P1_2 USABLE IDX_ARTISAN_ID P2 P2_2 USABLE IDX_ARTISAN_ID P2 P3_2 USABLE IDX_ARTISAN_ID P2 P4_2 USABLE IDX_ARTISAN_ID P2 P5_2 USABLE IDX_ARTISAN_ID P2 P6_2 USABLE IDX_ARTISAN_ID P2 P7_2 USABLE IDX_ARTISAN_ID P2 P8_2 USABLE--1.5 寫入數據 ,此時拋出ORA-01502 異常,會影響業務。insert into GLOBAL_INDEX_PRIMARYKEY (TEST_PRIMARYKEY_ID, ARTISAN_ID, CREATED_DATE, EFF_DATE, EXP_DATE, PART_ID) values (8888, 345, to_date('14-06-2018', 'dd-mm-yyyy'), to_date('14-06-2018', 'dd-mm-yyyy'), to_date('14-06-2018', 'dd-mm-yyyy'), 1);insert into GLOBAL_INDEX_PRIMARYKEY (TEST_PRIMARYKEY_ID, ARTISAN_ID, CREATED_DATE, EFF_DATE, EXP_DATE, PART_ID) values (9999, 345, to_date('14-06-2018', 'dd-mm-yyyy'), to_date('14-06-2018', 'dd-mm-yyyy'), to_date('14-06-2018', 'dd-mm-yyyy'), 2);ORA-01502: index "ARTISAN.PK_GLOBAL_INDEX" or partition of such index is in unusable state Cause: An attempt has been made to access an index or index partition that has been marked unusable by a direct load or by a DDL operation Action: DROP the specified index, or REBUILD the specified index, or REBUILD the unusable index partition-- 1.5 重建 全局索引 alter index PK_GLOBAL_INDEX rebuild online nologging;-- 1.6 重新查詢 ,全局索引valid狀態,OK select table_name,index_name,status from user_indexes a where a.table_name = 'GLOBAL_INDEX_PRIMARYKEY';GLOBAL_INDEX_PRIMARYKEY PK_GLOBAL_INDEX VALID GLOBAL_INDEX_PRIMARYKEY IDX_ARTISAN_ID N/A-- 重新寫入數據 insert into GLOBAL_INDEX_PRIMARYKEY (TEST_PRIMARYKEY_ID, ARTISAN_ID, CREATED_DATE, EFF_DATE, EXP_DATE, PART_ID) values (8888, 345, to_date('14-06-2018', 'dd-mm-yyyy'), to_date('14-06-2018', 'dd-mm-yyyy'), to_date('14-06-2018', 'dd-mm-yyyy'), 1);insert into GLOBAL_INDEX_PRIMARYKEY (TEST_PRIMARYKEY_ID, ARTISAN_ID, CREATED_DATE, EFF_DATE, EXP_DATE, PART_ID) values (9999, 345, to_date('14-06-2018', 'dd-mm-yyyy'), to_date('14-06-2018', 'dd-mm-yyyy'), to_date('14-06-2018', 'dd-mm-yyyy'), 2);-- OK的. 回滾吧,暫時不寫入表里.Step3.2指定update global indexes的場景
因為指定了update global indexes ,全局索引VALID ,local索引正常。 數據寫入正常,不會影響業務。
------ 為了驗證 維護全局索引的情況, P1被truncate掉了, 我們使用P2分區 --- 2.1 90 條數據 select count(1) from GLOBAL_INDEX_PRIMARYKEY partition(P2) a ; -- 90 --先查下全局索引的狀態 VALID select a.table_name ,a.index_name,a.status from user_indexes a where a.table_name = 'GLOBAL_INDEX_PRIMARYKEY'; GLOBAL_INDEX_PRIMARYKEY PK_GLOBAL_INDEX VALID GLOBAL_INDEX_PRIMARYKEY IDX_ARTISAN_ID N/A-- 2.2 truncate 分區 加 update global indexes的情況 alter table GLOBAL_INDEX_PRIMARYKEY truncate partition P2 update global indexes ; -- 2.3 全局索引 ---------------- 有效 VALID select a.table_name ,a.index_name,a.status from user_indexes a where a.table_name = 'GLOBAL_INDEX_PRIMARYKEY';GLOBAL_INDEX_PRIMARYKEY PK_GLOBAL_INDEX VALID GLOBAL_INDEX_PRIMARYKEY IDX_ARTISAN_ID N/A--2.4 local索引 ------------- OK select a.partition_name, a.index_name, a.statusfrom user_ind_partitions awhere a.index_name in(select a.index_namefrom user_indexes awhere a.table_name = 'GLOBAL_INDEX_PRIMARYKEY');select a.index_name, a.partition_name, a.subpartition_name, a.statusfrom user_ind_subpartitions awhere a.index_name in(select a.index_namefrom user_ind_partitions awhere a.index_name in(select a.index_namefrom user_indexes awhere a.table_name = 'GLOBAL_INDEX_PRIMARYKEY'));IDX_ARTISAN_ID P1 P1_1 USABLE IDX_ARTISAN_ID P1 P2_1 USABLE IDX_ARTISAN_ID P1 P3_1 USABLE IDX_ARTISAN_ID P1 P4_1 USABLE IDX_ARTISAN_ID P1 P5_1 USABLE IDX_ARTISAN_ID P1 P6_1 USABLE IDX_ARTISAN_ID P1 P7_1 USABLE IDX_ARTISAN_ID P1 P8_1 USABLE IDX_ARTISAN_ID P2 P1_2 USABLE IDX_ARTISAN_ID P2 P2_2 USABLE IDX_ARTISAN_ID P2 P3_2 USABLE IDX_ARTISAN_ID P2 P4_2 USABLE IDX_ARTISAN_ID P2 P5_2 USABLE IDX_ARTISAN_ID P2 P6_2 USABLE IDX_ARTISAN_ID P2 P7_2 USABLE IDX_ARTISAN_ID P2 P8_2 USABLE--1.5 寫入數據 OK insert into GLOBAL_INDEX_PRIMARYKEY (TEST_PRIMARYKEY_ID, ARTISAN_ID, CREATED_DATE, EFF_DATE, EXP_DATE, PART_ID) values (8888, 345, to_date('14-06-2018', 'dd-mm-yyyy'), to_date('14-06-2018', 'dd-mm-yyyy'), to_date('14-06-2018', 'dd-mm-yyyy'), 1);insert into GLOBAL_INDEX_PRIMARYKEY (TEST_PRIMARYKEY_ID, ARTISAN_ID, CREATED_DATE, EFF_DATE, EXP_DATE, PART_ID) values (9999, 345, to_date('14-06-2018', 'dd-mm-yyyy'), to_date('14-06-2018', 'dd-mm-yyyy'), to_date('14-06-2018', 'dd-mm-yyyy'), 2);commit;select * from GLOBAL_INDEX_PRIMARYKEY a where a.test_primarykey_id in (8888,9999);8888 345 2018-06-14 2018-06-14 2018-06-14 1 9999 345 2018-06-14 2018-06-14 2018-06-14 2Step4. 探究exchange分區對global索引以及local索引的影響
Step4.1 不指定update global indexes的場景
導致全局索引失效,分區索引失效,向表中寫入數據失敗,拋出 ORA-01502: index "ARTISAN.PK_GLOBAL_INDEX" or partition of such index is in unusable state ,需要重建全局索引和分區索引
select a.table_name ,a.index_name,a.status from user_indexes a where a.table_name = 'GLOBAL_INDEX_PRIMARYKEY'; GLOBAL_INDEX_PRIMARYKEY PK_GLOBAL_INDEX VALID GLOBAL_INDEX_PRIMARYKEY IDX_ARTISAN_ID N/Aselect a.index_name, a.partition_name, a.subpartition_name, a.statusfrom user_ind_subpartitions awhere a.index_name in(select a.index_namefrom user_ind_partitions awhere a.index_name in(select a.index_namefrom user_indexes awhere a.table_name = 'GLOBAL_INDEX_PRIMARYKEY')); -- USABLE --- 1.1 1 40條數據 select count(1) from GLOBAL_INDEX_PRIMARYKEY subpartition(P1_1) a ; -- 8 -- 1.2 創建臨時表,并 exchange 分區 不加 update global indexes的情況 create table TEMP_ARTISAN as select * from GLOBAL_INDEX_PRIMARYKEY where 1=2 ;alter table GLOBAL_INDEX_PRIMARYKEY exchange subpartition P1_1 with table TEMP_ARTISAN ; -- 如果想交換 P1 這個包含子分區的分區,就不能使用 non-partitioned table Message: ORA-14291: cannot EXCHANGE a composite partition with a non-partitioned tableCause: A composite partition can only be exchanged with a partitioned table.Action: Ensure that the table being exchanged is partitioned or that that the partition being exchanged is non-composite.-- 1.3 全局索引 ---------------- 失效 UNUSABLE狀態 select a.table_name ,a.index_name,a.status from user_indexes a where a.table_name = 'GLOBAL_INDEX_PRIMARYKEY';GLOBAL_INDEX_PRIMARYKEY PK_GLOBAL_INDEX UNUSABLE GLOBAL_INDEX_PRIMARYKEY IDX_ARTISAN_ID N/A--1.4 local索引 ------------- 失效 select a.index_name, a.partition_name, a.subpartition_name, a.statusfrom user_ind_subpartitions awhere a.index_name in(select a.index_namefrom user_ind_partitions awhere a.index_name in(select a.index_namefrom user_indexes awhere a.table_name = 'GLOBAL_INDEX_PRIMARYKEY'));1 IDX_ARTISAN_ID P1 P1_1 UNUSABLE--1.5 寫入數據 insert into GLOBAL_INDEX_PRIMARYKEY (TEST_PRIMARYKEY_ID, ARTISAN_ID, CREATED_DATE, EFF_DATE, EXP_DATE, PART_ID) values (8888, 345, to_date('14-06-2018', 'dd-mm-yyyy'), to_date('14-06-2018', 'dd-mm-yyyy'), to_date('14-06-2018', 'dd-mm-yyyy'), 1);ORA-01502: index "CC.PK_GLOBAL_INDEX" or partition of such index is in unusable state Cause: An attempt has been made to access an index or index partition that has been marked unusable by a direct load or by a DDL operation Action: DROP the specified index, or REBUILD the specified index, or REBUILD the unusable index partition-- 1.5 重建 全局索引 和 local 索引 alter index PK_GLOBAL_INDEX rebuild online nologging;insert into GLOBAL_INDEX_PRIMARYKEY (TEST_PRIMARYKEY_ID, ARTISAN_ID, CREATED_DATE, EFF_DATE, EXP_DATE, PART_ID) values (8888, 345, to_date('14-06-2018', 'dd-mm-yyyy'), to_date('14-06-2018', 'dd-mm-yyyy'), to_date('14-06-2018', 'dd-mm-yyyy'), 1);insert into GLOBAL_INDEX_PRIMARYKEY (TEST_PRIMARYKEY_ID, ARTISAN_ID, CREATED_DATE, EFF_DATE, EXP_DATE, PART_ID) values (9999, 345, to_date('14-06-2018', 'dd-mm-yyyy'), to_date('14-06-2018', 'dd-mm-yyyy'), to_date('14-06-2018', 'dd-mm-yyyy'), 2);--寫入OK --重建local索引 alter index IDX_ARTISAN_ID rebuild subpartition P1_1 online;-- 1.6 重新查詢 select table_name,index_name,status from user_indexes a where a.table_name = 'GLOBAL_INDEX_PRIMARYKEY';GLOBAL_INDEX_PRIMARYKEY PK_GLOBAL_INDEX VALID GLOBAL_INDEX_PRIMARYKEY IDX_ARTISAN_ID N/Aselect a.index_name, a.partition_name, a.subpartition_name, a.statusfrom user_ind_subpartitions awhere a.index_name in(select a.index_namefrom user_ind_partitions awhere a.index_name in(select a.index_namefrom user_indexes awhere a.table_name = 'GLOBAL_INDEX_PRIMARYKEY'))and a.subpartition_name = 'P1_1';IDX_ARTISAN_ID P1 P1_1 USABLE -- OKStep4.2指定update global indexes的場景
因為指定了update global indexes ,全局索引VALID ,但是分區索引失效了,需要重建local索引。
--- 2.1 select a.table_name ,a.index_name,a.status from user_indexes a where a.table_name = 'GLOBAL_INDEX_PRIMARYKEY'; GLOBAL_INDEX_PRIMARYKEY PK_GLOBAL_INDEX VALID GLOBAL_INDEX_PRIMARYKEY IDX_ARTISAN_ID N/Aselect a.index_name, a.partition_name, a.subpartition_name, a.statusfrom user_ind_subpartitions awhere a.index_name in(select a.index_namefrom user_ind_partitions awhere a.index_name in(select a.index_namefrom user_indexes awhere a.table_name = 'GLOBAL_INDEX_PRIMARYKEY')); -- USABLE --- 1.1 select count(1) from GLOBAL_INDEX_PRIMARYKEY subpartition(P1_2) a ; -- 12 -- 1.2 創建臨時表,并 exchange 分區 加 update global indexes的情況 create table TEMP_ARTISAN_2 as select * from GLOBAL_INDEX_PRIMARYKEY where 1=2 ;alter table GLOBAL_INDEX_PRIMARYKEY exchange subpartition P1_1 with table TEMP_ARTISAN_2 UPDATE GLOBAL INDEXES ; -- 1.3 全局索引 ---------------- VALID select a.table_name ,a.index_name,a.status from user_indexes a where a.table_name = 'GLOBAL_INDEX_PRIMARYKEY';GLOBAL_INDEX_PRIMARYKEY PK_GLOBAL_INDEX VALID GLOBAL_INDEX_PRIMARYKEY IDX_ARTISAN_ID N/A--1.4 local索引 ------------- USABLE OK select a.index_name, a.partition_name, a.subpartition_name, a.statusfrom user_ind_subpartitions awhere a.index_name in(select a.index_namefrom user_ind_partitions awhere a.index_name in(select a.index_namefrom user_indexes awhere a.table_name = 'GLOBAL_INDEX_PRIMARYKEY'));--1.5 寫入數據 OK insert into GLOBAL_INDEX_PRIMARYKEY (TEST_PRIMARYKEY_ID, ARTISAN_ID, CREATED_DATE, EFF_DATE, EXP_DATE, PART_ID) values (8888, 345, to_date('14-06-2018', 'dd-mm-yyyy'), to_date('14-06-2018', 'dd-mm-yyyy'), to_date('14-06-2018', 'dd-mm-yyyy'), 1);-- 1.6 重新查詢 select table_name,index_name,status from user_indexes a where a.table_name = 'GLOBAL_INDEX_PRIMARYKEY';GLOBAL_INDEX_PRIMARYKEY PK_GLOBAL_INDEX VALID GLOBAL_INDEX_PRIMARYKEY IDX_ARTISAN_ID N/Aselect a.index_name, a.partition_name, a.subpartition_name, a.statusfrom user_ind_subpartitions awhere a.index_name in(select a.index_namefrom user_ind_partitions awhere a.index_name in(select a.index_namefrom user_indexes awhere a.table_name = 'GLOBAL_INDEX_PRIMARYKEY'))and a.subpartition_name = 'P1_2';IDX_ARTISAN_ID P2 P1_2 USABLE-- OKStep5 附加
釋放回收空間:
alter table table_name truncate partition partition_name drop storage;維護全局索引:
alter table table_name truncate partition partition_name update global indexes;UPDATE GLOBAL INDEXES只維護全局索引
UPDATE INDEXES同時維護全局和本地索引, 經驗證,local索引也會失效。 11.2.0.4.0 的版本 。 慎重使用。
INCLUDING INDEXES : 交換分區的同時,也將索引包含進去。 需要新建索引名
ALTER TABLE table_name EXCHANGE PARTITION partition_name WITH TABLE table_name_new INCLUDING INDEXES UPDATE GLOBAL INDEXES總結
以上是生活随笔為你收集整理的Oracle-维护存在主键的分区表时的注意事项的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实战SSM_O2O商铺_24【商铺列表】
- 下一篇: 实战SSM_O2O商铺_25【商品类别】