SPATIAL Index avec Remap Tablespace

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');