ایندکسهای از نوع auto index را نمی توان با دستور drop index حذف کرد:
SQL> select index_name,auto from dba_indexes where AUTO=’YES’;
INDEX_NAME AUTO
———————- ——–
SYS_AI_9qxxvpz1p5359 YES
SQL> drop index “SYS_AI_9qxxvpz1p5359”;
ORA-65532: cannot alter or drop automatically created indexes
همچنین امکان قرار دادن این نوع از ایندکسها در حالت unusable و invisible هم وجود ندارد(به صورت متعارف):
SQL> alter index “SYS_AI_9qxxvpz1p5359” unusable;
ORA-65532: cannot alter or drop automatically created indexes
SQL> alter index “SYS_AI_9qxxvpz1p5359” invisible ;
ORA-65532: cannot alter or drop automatically created indexes
به صورت کلی در نسخه 19cR3 برای حذف این دسته از ایندکسها، راهکاری در داکیومنتهای اوراکل ارائه نشده و برای حذف این نوع از ایندکسها به ناچار باید آنها را به tablespace مجزایی منتقل نمود و در نهایت tablespace را حذف کرد:
SQL> select parameter_value from dba_auto_index_config p where p.parameter_name=’AUTO_INDEX_DEFAULT_TABLESPACE‘;
PARAMETER_VALUE
—————-
AUOTOINDEXTBS
SQL> create tablespace tbsindxAUTO;
Tablespace created
SQL> alter index usef.”SYS_AI_9qxxvpz1p5359″ rebuild tablespace tbsindxAUTO online;
Index altered
SQL> select tablespace_name from user_segments p where p.segment_name= ‘SYS_AI_9qxxvpz1p5359’;
TABLESPACE_NAME
——————————
TBSINDXAUTO
SQL> drop tablespace TBSINDXAUTO including contents and datafiles;
Tablespace dropped
SQL> select owner,index_name,table_name,index_type,auto from dba_indexes where AUTO=’YES’;
no rows selected
در نسخه 19cR5، پروسیجری به نام DROP_AUTO_INDEXES به بسته DBMS_AUTO_INDEX اضافه شد که حذف این دسته از ایندکسها را بسیار ساده تر کرده است:
SQL> select BANNER_FULL from v$version;
BANNER_FULL
—————————-
Version 19.8.0.0.0
SQL> exec DBMS_AUTO_INDEX.DROP_AUTO_INDEXES(owner=>’USEF’, index_name=>'”SYS_AI_9qxxvpz1p5359″‘, allow_recreate=>true);
PL/SQL procedure successfully completed
*مقدار پیش فرض پارامتر allow_recreate برابر false می باشد.