关于Oracle 分区索引的正确 DROP 与TRUNCATE 方法
发布日期:2016-4-21 20:4:9
关于Oracle 分区索引的正确 DROP 与TRUNCATE 方法 --查看分区索引的大小 如下所示: SQL> select segment_name, trunc(sum(bytes) / 1024 / 1024 / 1024, 2) GB from user_segments where segment_name in ('IDX_ACCTFLOW_CUSTOMTRANSTYPE', 'IDX_ACCTFLOW_CUSTCODE', 'IDX_ACCTFLOW_MAPPING', 2 3 4 5 6 'IDX_ACCTFLOW_TYPECODEDATE', 'PK_CUSTOMACCOUNTFLOW') group by segment_name; 7 8 SEGMENT_NAME GB --------------------------------------------------------------------------------- ---------- IDX_ACCTFLOW_CUSTCODE 31.75 IDX_ACCTFLOW_TYPECODEDATE 24.53 IDX_ACCTFLOW_MAPPING 33.19 IDX_ACCTFLOW_CUSTOMTRANSTYPE 33.44 PK_CUSTOMACCOUNTFLOW 33.19 SQL> select index_name, index_type, status from user_indexes s where index_name in ('IDX_ACCTFLOW_CUSTOMTRANSTYPE', 'IDX_ACCTFLOW_CUSTCODE', 'IDX_ACCTFLOW_MAPPING', 'IDX_ACCTFLOW_TYPECODEDATE', 'PK_CUSTOMACCOUNTFLOW'); 2 3 4 5 6 7 INDEX_NAME INDEX_TYPE STATUS ------------------------------ --------------------------- -------- IDX_ACCTFLOW_CUSTCODE FUNCTION-BASED NORMAL N/A IDX_ACCTFLOW_CUSTOMTRANSTYPE NORMAL VALID IDX_ACCTFLOW_MAPPING NORMAL VALID IDX_ACCTFLOW_TYPECODEDATE NORMAL VALID PK_CUSTOMACCOUNTFLOW NORMAL VALID --备份出要进行操作的分区 如下所示: create table CUSTOMACCOUNTFLOW_bk as select * from ELMP_TRANS_CUSTOMACCOUNTFLOW partition(SYS_P623); insert into CUSTOMACCOUNTFLOW_bk select * from ELMP_TRANS_CUSTOMACCOUNTFLOW partition(SYS_P603); SQL> select count(*) from CUSTOMACCOUNTFLOW_bk; COUNT(*) ---------- 291862 Elapsed: 00:00:00.07 SQL> select segment_name, trunc(sum(bytes) / 1024 / 1024 / 1024, 4) GB from user_segments where segment_name in ('IDX_ACCTFLOW_CUSTOMTRANSTYPE', 'IDX_ACCTFLOW_CUSTCODE', 'IDX_ACCTFLOW_MAPPING', 2 3 4 5 6 'IDX_ACCTFLOW_TYPECODEDATE', 'PK_CUSTOMACCOUNTFLOW') group by segment_name; 7 8 SEGMENT_NAME GB --------------------------------------------------------------------------------- ---------- IDX_ACCTFLOW_CUSTCODE 31.7566 IDX_ACCTFLOW_TYPECODEDATE 24.5361 IDX_ACCTFLOW_MAPPING 33.1943 IDX_ACCTFLOW_CUSTOMTRANSTYPE 33.4472 PK_CUSTOMACCOUNTFLOW 33.1923 --DROP 掉一个分区 如下所示: Elapsed: 00:00:00.02 SQL> alter table ELMP_TRANS_CUSTOMACCOUNTFLOW drop partition SYS_P603 update indexes; Table altered. Elapsed: 00:00:20.92 SQL> select segment_name, trunc(sum(bytes) / 1024 / 1024 / 1024, 4) GB from user_segments where segment_name in ('IDX_ACCTFLOW_CUSTOMTRANSTYPE', 'IDX_ACCTFLOW_CUSTCODE', 'IDX_ACCTFLOW_MAPPING', 'IDX_ACCTFLOW_TYPECODEDATE', 'PK_CUSTOMACCOUNTFLOW') group by segment_name; 2 3 4 5 6 7 8 SEGMENT_NAME GB --------------------------------------------------------------------------------- ---------- IDX_ACCTFLOW_CUSTCODE 31.7381 IDX_ACCTFLOW_TYPECODEDATE 24.5361 IDX_ACCTFLOW_MAPPING 33.1943 IDX_ACCTFLOW_CUSTOMTRANSTYPE 33.4472 PK_CUSTOMACCOUNTFLOW 33.1923 Elapsed: 00:00:00.03 --TRUNCATE 掉一个分区 如下所示: SQL> set timing on SQL> alter table ELMP_TRANS_CUSTOMACCOUNTFLOW truncate partition SYS_P623 update indexes; Table truncated. Elapsed: 00:00:04.60 SQL> select segment_name, trunc(sum(bytes) / 1024 / 1024 / 1024, 4) GB from user_segments where segment_name in ('IDX_ACCTFLOW_CUSTOMTRANSTYPE', 'IDX_ACCTFLOW_CUSTCODE', 'IDX_ACCTFLOW_MAPPING', 2 3 4 5 6 'IDX_ACCTFLOW_TYPECODEDATE', 'PK_CUSTOMACCOUNTFLOW') group by segment_name; 7 8 SEGMENT_NAME GB --------------------------------------------------------------------------------- ---------- IDX_ACCTFLOW_CUSTCODE 31.7547 IDX_ACCTFLOW_TYPECODEDATE 24.5361 IDX_ACCTFLOW_MAPPING 33.1943 IDX_ACCTFLOW_CUSTOMTRANSTYPE 33.4472 PK_CUSTOMACCOUNTFLOW 33.1923 加上 UPDATE INDEXES 的优点是: 在对分区表进行操作的时候,索引仍是在线和可用的,这个操作不会影响到应用程序。 在对分区表进行操作后,全局分区索引不需要进行重建。
|