ORA-39083 ORA-01403 On INDEX_STATISTICS
DataPump Import (IMPDP) Failed With Errors ORA-39083 ORA-1403 On INDEX_STATISTICS (Doc ID 755253.1)
Quando si effettua un import usando il parametero REMAP_SCHEMA può verificarsi l'errrore
ORA-39083: Object type INDEX_STATISTICS failed to create with error:
ORA-01403: no data found
ORA-01403: no data found
L'errore si verifica perchè alcuni indici sono stati creati senza nome cioè in automatico dal sistema e quindi vengono persi in fase di import.
Ad esempio un indice
select object_name, object_type from user_objects;OBJECT_NAME OBJECT_TYPE
------------------------------ -------------------
TEST0 TABLE
SYS_C009845 INDEX <-- Index associated with PK constraint.
TEST0INDEX INDEX
L'indice SYS_C009845 INDEX non verrà importato se si usa il REMAP_SCHEMA e quando l'import tenta di importare le statistiche per l'indice generato dal sistema in un secondo momento, non riesce perché manca l'indice generato dal sistema.
SOLUZIONE
1. Ignora ORA-39083 (Object type INDEX_STATISTICS failed to create with error) e ORA-01403 (no data found).
oppure
2. Crea indici con nome per le PK constraints neldatbase sorgente.
-- Invece di:
ALTER TABLE TEST ADD (PRIMARY KEY (COL1, COL2) USING INDEX TABLESPACE USERS);
-- Usare questo:
ALTER TABLE TEST ADD CONSTRAINT MY_PK PRIMARY KEY (COL1, COL2) USING INDEX TABLESPACE USERS);
ALTER TABLE TEST ADD (PRIMARY KEY (COL1, COL2) USING INDEX TABLESPACE USERS);
-- Usare questo:
ALTER TABLE TEST ADD CONSTRAINT MY_PK PRIMARY KEY (COL1, COL2) USING INDEX TABLESPACE USERS);
oppure
3. Escludere gli indici nel DataPump import e successivamente importare gli indici.
In questo modo garantiamo che l'indice associato ai vincoli di chiave primaria verrà creato per primo.
$ impdp system/password remap_schema=test0:test1 exclude=index dumpfile=test0.dmp
$ impdp system/password remap_schema=test0:test1 include=index dumpfile=test0.dmp
$ impdp system/password remap_schema=test0:test1 include=index dumpfile=test0.dmp
Con la seguente query verificare se l'import è avvenuto con successo.
#> sqlplus test1/password
col object_name for a30
SELECT OBJECT_NAME, OBJECT_TYPE FROM USER_OBJECTS;
OBJECT_NAME OBJECT_TYPE
------------------------------ -------------------
TEST0 TABLE
SYS_C009868 INDEX
TEST0INDEX INDEX
col object_name for a30
SELECT OBJECT_NAME, OBJECT_TYPE FROM USER_OBJECTS;
OBJECT_NAME OBJECT_TYPE
------------------------------ -------------------
TEST0 TABLE
SYS_C009868 INDEX
TEST0INDEX INDEX
oppure
4. Non è raccomandato ma si può usare il classico imp ed exp.