Photo by Glenn Carstens-Peters on Unsplash
Importando una partición de una tabla en una tabla sin particionar
Tenemos un escenario donde queremos importar el contenido de una partición de Oracle en una tabla sin particionar debido a una pérdida puntual de datos.
Para ello nos valemos tanto de la funcionalidad REMAP_TABLE para asignarle un nuevo nombre y la opción PARTITION_OPTIONS. Es importante aclararlo porque la documentación no deja claro el procedimiento,
Detallamos el contenido el fichero de parámetros para la importación.
Importante entender los siguientes puntos:
Tenemos una tabla con una particion que queremos importar
La tabla destino no lo está, vamos a desparticionar.
Cambiamos el nombre de la partición para que resulte más cómodo identificar y tratar los datos importados.
[oracle@servidor01~]$ cat impdp_DEPARTITION.par
logfile=impdp_DEPARTITION.log
dumpfile=expdp_esquemacompleto_%U.dmp
tables=PROPIETARIO.TABLAORIG:PARTICIONORIG
REMAP_TABLE=PROPIETARIO.TABLA_ORIG:PARTICION_ORIG:TABLA_FINAL
PARTITION_OPTIONS=DEPARTITION
directory=DIR_EXPORTS
parallel=4
exclude=index
exclude=grant
exclude=statistics
exclude=constraint
Importante, si no especificamos las opciones de particionado (PARTITION_OPTIONS) obtendremos el siguiente error:
ORA-39004: estado no valido
ORA-39371: no se puede especificar la particion en remap_table sin anular la particion
Una vez hemos creado nuestro fichero con las opciones lanzamos la importación de datos:
[oracle@servidor01~]$ . oraenv <<< bddes
[oracle@servidor01~]$ impdp "'/ as sysdba'" parfile=impdp_DEPARTITION.par
Import: Release 19.0.0.0.0 - Production on Thu Apr 13 13:54:41 2023
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
Password:
Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
La tabla maestra "SYS"."SYS_IMPORT_TABLE_01" se ha cargado/descargado correctamente
Iniciando "SYS"."SYS_IMPORT_TABLE_01": "/******** AS SYSDBA" parfile=impdp_DEPARTITION.par
Procesando el tipo de objeto SCHEMA_EXPORT/TABLE/TABLE
Procesando el tipo de objeto SCHEMA_EXPORT/TABLE/TABLE_DATA
. . "PROPIETARIO"."TABLA_FINAL" 2.034 MB 305578 filas importadas
Procesando el tipo de objeto SCHEMA_EXPORT/TABLE/COMMENT
Procesando el tipo de objeto SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
El trabajo "SYS"."SYS_IMPORT_TABLE_01" ha terminado
Y tenemos nuestra particion importada como una tabla sin particionar.
SYS@bddes> select count(*) from PROPIETARIO.TABLA_FINAL;
COUNT(*)
----------
305578