Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.server -> Re: Row in USER_INDEXES table not deleted when constraint is dropped
DA Morgan wrote:
> Can you create a demo we can try?
>
Unfortunately no because the error is not reproducible. But I have a
test user schema with about 100 tables in which the error is
manifesting itself and I'd be happy to test anything you may suggest
(see initial tests below).
> My guess is because the index existed before the constraint was > created but I'd like to try to duplicate what you are seeing. >
This first example is for the new schema "BUGTEST" created today. Notice STEP 5 where the index is gone as expected:
SQL> show user
USER is "BUGTEST"
SQL> select sysdate from dual;
SYSDATE
SQL> -- STEP 1: Look at constraints BEFORE SQL> -- SQL> select constraint_name, table_name
CONSTRAINT_NAME TABLE_NAME
------------------------------ ------------------------------
FK_SM_SUB_SC_ID_CUST_ID SM_SUBSCRIBER FK_SM_SUB_SL_CUSTOMER_ID SM_SUBSCRIBER FK_SM_SUB_SL_ID SM_SUBSCRIBER FK_SM_SUB_SL_SC_ID SM_SUBSCRIBER PK_SM_SUBSCRIBER SM_SUBSCRIBER UK_SM_SUB_CUST_ID_SL_ID_SUB_ID SM_SUBSCRIBER UK_SM_SUB_USER_NAME SM_SUBSCRIBER
7 rows selected.
SQL> -- STEP 2: Look at indexes BEFORE SQL> -- SQL> select index_name, table_name
INDEX_NAME TABLE_NAME
------------------------------ ------------------------------
PK_SM_SUBSCRIBER SM_SUBSCRIBER UK_SM_SUB_CUST_ID_SL_ID_SUB_ID SM_SUBSCRIBER UK_SM_SUB_USER_NAME SM_SUBSCRIBER SQL> -- STEP 3: Drop constraint
Table altered.
SQL> -- STEP 4: Look at constraints AFTER SQL> -- SQL> select constraint_name, table_name
CONSTRAINT_NAME TABLE_NAMEUK_SM_SUB_CUST_ID_SL_ID_SUB_ID SM_SUBSCRIBER 6 rows selected.
------------------------------ ------------------------------
FK_SM_SUB_SC_ID_CUST_ID SM_SUBSCRIBER FK_SM_SUB_SL_CUSTOMER_ID SM_SUBSCRIBER FK_SM_SUB_SL_ID SM_SUBSCRIBER FK_SM_SUB_SL_SC_ID SM_SUBSCRIBER PK_SM_SUBSCRIBER SM_SUBSCRIBER
SQL> SQL> -- STEP 5: Look at indexes AFTER SQL> -- SQL> select index_name, table_name
INDEX_NAME TABLE_NAMEUK_SM_SUB_CUST_ID_SL_ID_SUB_ID SM_SUBSCRIBER SQL> END: BUGTEST sqlplus session
------------------------------ ------------------------------
PK_SM_SUBSCRIBER SM_SUBSCRIBER
The example above shows the behavior I would expect: namely the index is deleted after the constraint is dropped.
The second example cut and pasted below is for user CORETST23. I was able to export the original user CORE23 and import into a new user CORETST23 and the bug still manifests itself. Notice STEP 5 where the index is left behind and is _NOT_ deleted after we drop the constraint! Compare to STEP 5 above where the index is gone as expected.
SQL> show user
USER is "CORETST23"
SQL> select sysdate from dual;
SYSDATE
SQL> -- STEP 1: Look at constraints BEFORE SQL> -- SQL> select constraint_name, table_name
CONSTRAINT_NAME TABLE_NAME
------------------------------ ------------------------------
FK_SM_SUB_SC_ID_CUST_ID SM_SUBSCRIBER FK_SM_SUB_SL_CUSTOMER_ID SM_SUBSCRIBER FK_SM_SUB_SL_ID SM_SUBSCRIBER FK_SM_SUB_SL_SC_ID SM_SUBSCRIBER PK_SM_SUBSCRIBER SM_SUBSCRIBER UK_SM_SUB_CUST_ID_SL_ID_SUB_ID SM_SUBSCRIBER UK_SM_SUB_USER_NAME SM_SUBSCRIBER
7 rows selected.
SQL> -- STEP 2: Look at indexes BEFORE SQL> -- SQL> select index_name, table_name
INDEX_NAME TABLE_NAME
------------------------------ ------------------------------
PK_SM_SUBSCRIBER SM_SUBSCRIBER UK_SM_SUB_CUST_ID_SL_ID_SUB_ID SM_SUBSCRIBER UK_SM_SUB_USER_NAME SM_SUBSCRIBER SQL> -- STEP 3: Drop constraint
Table altered.
SQL> -- STEP 4: Look at constraints AFTER SQL> -- SQL> select constraint_name, table_name
CONSTRAINT_NAME TABLE_NAMEUK_SM_SUB_CUST_ID_SL_ID_SUB_ID SM_SUBSCRIBER 6 rows selected.
------------------------------ ------------------------------
FK_SM_SUB_SC_ID_CUST_ID SM_SUBSCRIBER FK_SM_SUB_SL_CUSTOMER_ID SM_SUBSCRIBER FK_SM_SUB_SL_ID SM_SUBSCRIBER FK_SM_SUB_SL_SC_ID SM_SUBSCRIBER PK_SM_SUBSCRIBER SM_SUBSCRIBER
SQL> -- STEP 5: Look at indexes AFTER SQL> -- SQL> select index_name, table_name
INDEX_NAME TABLE_NAME
------------------------------ ------------------------------
PK_SM_SUBSCRIBER SM_SUBSCRIBER UK_SM_SUB_CUST_ID_SL_ID_SUB_ID SM_SUBSCRIBER UK_SM_SUB_USER_NAME SM_SUBSCRIBER
SQL> END: CORETST23 sqlplus session
Notice in the example above that the UK_SM_SUB_USER_NAME index still exists even after we dropped the constraint! Can anybody help me figure out why the index was not dropped?
Thanks! Received on Wed Oct 11 2006 - 15:23:17 CDT