Oracle datapump est un excellent outil offrant bien plus de flexibilité que l’ancien imp/exp, mais l’option « remap_tablespace » ne modifie pas les paramètres des tablespaces des index Spatial.
Par exemple :
La commande ci-dessous devrait logiquement importer la table et l’index spatial dans le tablespace DATASPATIAL.
Impdp easyspatial/******** directory=data_pump_dir dumpfile=expdat.dmp remap_tablespace=USERS:DATASPATIAL LOGFILE=SPATIALINDEX_REMAP.log
Mais ce n’est pas tout à fait le cas …
En fait, la requête étant terminée, la table GEOM_DATA est bien dans le tablespace correct, mais l’index Spatial GEOM_DATA_SHAPE_SPIX est toujours stocké dans le tablespace « USERS » :
SQL> select dbms_metadata.get_ddl('INDEX','GEOM_DATA_SHAPE_SPIX','EASYSPATIAL') from dual; ----------------------------------------------------------------------------------- CREATE INDEX "TESTSPAT"."GEOM_DATA_SHAPE_SPIX" ON "TESTSPAT"."GEOM_DATA" ("SHAPE") INDEXTYPE IS "MDSYS"."SPATIAL_INDEX" PARAMETERS ('sdo_indx_dims=2, tablespace=USERS, work_tablespace=USERS ')
Oracle datapump n’applique pas l’option rmap_tablespace aux paramètres des indexes Spatial, et en plus si le tablespace précédent n’existe pas, le spatial index est créé mais avec un statut « FAILED ».
Pour résoudre ces problèmes il faut reconstruire l’index avec le tablespace correct :
SQL> alter index GEOM_DATA_SHAPE_SPIX REBUILD PARAMETERS('sdo_indx_dims=2, tablespace=DATASPATIAL, work_tablespace=DATASPATIAL');