This is one of those “I knew it works this way, why do I keep falling for it?” so hopefully blogging about it will keep my memory fresh π
Starting 11gR2 when you mark an index or an index partition UNUSABLE the segment is dropped (unless you are on 12c and use ONLINE), this is the intended behavior.
SQL> create table t_unusable (n1 number, n2 number); SQL> create index t_unusable_idx on t_unusable(n1); SQL> insert into t_unusable values (1,2); -- this is just to materialize the segment SQL> select index_name, segment_created from user_indexes where index_name = 'T_UNUSABLE_IDX'; INDEX_NAME SEG ------------------------------ --- T_UNUSABLE_IDX YES SQL> alter index t_unusable_idx unusable; SQL> select index_name, segment_created from user_indexes where index_name = 'T_UNUSABLE_IDX'; INDEX_NAME SEG ------------------------------ --- T_UNUSABLE_IDX NO SQL> select object_id, data_object_id from user_objects where object_name = 'T_UNUSABLE_IDX'; OBJECT_ID DATA_OBJECT_ID ---------- -------------- 70989 (*)
This is a nice way to speed up large data loads since it will reduce REDO generated plus it’s faster to rebuild an index than to maintain it online.
What I keep forgetting is that if you truncate the table (or the partition) the segment is recreated, hence your data load process will end up maintaining the index online π¦
SQL> truncate table t_unusable; SQL> select index_name, segment_created from user_indexes where index_name = 'T_UNUSABLE_IDX'; INDEX_NAME SEG ------------------------------ --- T_UNUSABLE_IDX YES SQL> select object_id, data_object_id from user_objects where object_name = 'T_UNUSABLE_IDX'; OBJECT_ID DATA_OBJECT_ID ---------- -------------- 70989 70992 ----- begin tree dump leaf: 0x1024b7b 16927611 (0: nrow: 0 rrow: 0) ----- end tree dump
Conclusion (aka note to self): if you plan to use TRUNCATE + mark indexes UNUSABLE remember to TRUNCATE first and mark UNUSABLE after π
(*) there is no TREEDUMP here since the trace raised ORA-600 [25027]
Pingback: Top 50 Oracle SQL Blogs for 2016 - Complete IT Professional