As we know the ‘update indexes’ clause is used to drop the local indexes and update the global index when we drop a partition. So the indexes will still be VALID”
The following example shows when we drop an empty partition, the ” Update Indexes” clause is not required.
1) Create partition table
SQL>CREATE TABLE TEST_TBL ( id number, name varchar2(80) ) PARTITION BY RANGE ( id ) ( PARTITION p1 VALUES LESS THAN (1000), PARTITION p2 VALUES LESS THAN (2000) ); Table created.
2) Insert records into partition
SQL>begin for i in 1..1800 loop insert into TEST_TBL values (i, 'TEST'||to_char(i) ); end loop; commit; end; PL/SQL procedure successfully completed.
3)Create global index:
SQL> create index id_idx on TEST_TBL (id) global; Index created. SQL> select index_name, index_type, status from all_indexes where index_name='ID_IDX'; INDEX_NAME INDEX_TYPE STATUS ------------- ----------- -------- ID_IDX NORMAL VALID
4) Empty partition p2 by deleting all records in p2 partition
SQL> select count(*) from TEST_TBL ; COUNT(*) ---------- 1800 SQL> select count(*) from TEST_TBL partition ( p1); COUNT(*) ---------- 999 SQL> select count(*) from TEST_TBL partition ( p2); COUNT(*) ---------- 801 SQL> delete from TEST_TBL where ID >= 1000; 801 rows deleted. SQL>commit; Commit complete
5) Drop the empty partition p2, and confirm the global index is still valid
SQL>alter table TEST_TBL drop partition p2;
Table altered.
SQL> select index_name, index_type, status
from all_indexes
where index_name='ID_IDX';
INDEX_NAME INDEX_TYPE STATUS
-------------------- --------------------------- --------
ID_IDX NORMAL VALID