Oracle Data Pump: export / import, migración, refresco de esquemas y transportable
OracleNivel: IntermedioDuración: 30–90 min (según el volumen de datos)Export e import de tablas, esquemas, tablespaces o base de datos completa con expdp/impdp, migración entre dos bases de datos (archivo dump + scp + checksum, o NETWORK_LINK) y extracción de DDL de un dump (SQLFILE). Incluye la preparación del directorio, del usuario y del parfile, consistencia, paralelismo, remapeo, supervisión y limpieza de jobs interrumpidos. En RAC: conexión mediante SCAN + servicio, CLUSTER=YES con un directorio compartido o CLUSTER=NO con disco local; opcionalmente, programación del export con un script basado en wallet y /etc/cron.d. Escenarios: refresco de esquema de producción a pruebas (DROP USER … CASCADE o TABLE_EXISTS_ACTION=REPLACE, conservando contraseña/perfil y privilegios), transportable tablespace (misma o distinta plataforma y endian, RMAN CONVERT), full transportable (11g/12c → PDB 19c), cifrado y compresión del dump, rendimiento en migraciones grandes y gestión de un job interrumpido con ATTACH/START_JOB/KILL_JOB.
Topología: 1 base de datos (instancia única, Oracle Restart o RAC); origen + destino en una migración
Escenarios
- Export: generar un archivo dump desde la base de datos — Una tabla, un esquema, un tablespace o toda la base de datos se escribe en un archivo dump (expdp). La base de datos sigue abierta y la aplicación sigue funcionando. Es una copia lógica: no sustituye a un backup RMAN (la recuperación a un punto en el tiempo y la recuperación completa requieren RMAN).
- Import: cargar un archivo dump en la base de datos — Un archivo dump generado previamente se carga con impdp; los nombres de esquema, tablespace y tabla se pueden remapear. El destino sigue abierto; la aplicación que usa los objetos cargados debe estar detenida.
- Migración: trasladar datos de la base de datos de origen al destino — Export → copia de archivos → import, o directamente con NETWORK_LINK sin archivo dump. Elija esta tarjeta si el esquema aún no existe en el destino (carga inicial); si el mismo esquema ya existe en el destino y debe sustituirse por el de producción, elija la tarjeta "Refresco de esquema". El origen sigue abierto.
- Extraer solo el DDL de un archivo dump (SQLFILE) — No se carga nada; las sentencias CREATE de los objetos se escriben en un archivo .sql. La base de datos no se modifica.
- Refresco de esquema de producción a pruebas (refresh) — Un esquema que ya existe en pruebas/UAT se sustituye por su versión actual de producción: backup del esquema de destino, cierre de sesiones, DROP USER … CASCADE o TABLE_EXISTS_ACTION=REPLACE, conservando contraseña/perfil y privilegios. El origen sigue abierto; el esquema de destino no está disponible mientras dura el trabajo.
- Trasladar un tablespace copiando datafiles (transportable tablespace) — Los tablespaces grandes (cientos de GB o más) se trasladan copiando datafiles en lugar de fila a fila; en la misma o en distinta plataforma/endian (RMAN CONVERT). Los juegos de caracteres deben ser iguales en ambos lados. En el origen los tablespaces quedan READ ONLY mientras dura el trabajo (interrupción de escritura).
- Trasladar toda la base de datos: full transportable (11g/12c → 19c, non-CDB → PDB) — Con FULL=Y TRANSPORTABLE=ALWAYS los tablespaces de usuario se trasladan a una nueva PDB como datafiles y todo lo demás (usuarios, PL/SQL, privilegios) como metadatos; VERSION=12 en un origen 11.2.0.3+. En el origen todos los tablespaces de usuario quedan READ ONLY mientras dura el trabajo.
- Job de Data Pump interrumpido / en espera: supervisar, reanudar, terminar — Un job de expdp/impdp está en espera (resumable wait), detenido o interrumpido; quiere conectarse a él con ATTACH y reanudarlo, terminarlo con KILL_JOB o limpiar una tabla maestra huérfana. La base de datos sigue abierta.
Antes de empezar
- Los comandos se ejecutan en el servidor de base de datos con el usuario oracle; el perfil de login de este usuario define las variables ORACLE_HOME, ORACLE_SID y PATH, y expdp/impdp están en el path. expdp, impdp y sqlplus están en $ORACLE_HOME/bin; si no está en el PATH se obtiene bash: expdp: command not found (. oraenv o la ruta completa: $ORACLE_HOME/bin/expdp).… En RAC, ORACLE_SID en cada nodo es el nombre de instancia de ese nodo (p. ej., …………… en el nodo 1).…
- Base de datos 12.2 o posterior (19c, 21c, 23ai). Los parámetros LOGTIME, ENCRYPTION_PWD_PROMPT y DISABLE_ARCHIVE_LOGGING que usa esta guía aparecieron en 12c. En 10g/11g la lista de parámetros es distinta; los archivos .dmp de Oracle 9i y anteriores solo se pueden abrir con el antiguo imp.… Full transportable: el export se admite desde 11.2.0.3 (con VERSION=12 en 11g) y el import desde 12.1; 11g no tiene LOGTIME/METRICS, por lo que en ese caso la guía no los usa.…
- El listener está en ejecución y el servicio … está registrado…; en el destino está registrado el servicio …….
- El listener está en ejecución en el servidor de destino y el servicio … está registrado.
- Hay espacio libre suficiente en …… (origen) y … (destino)…: en el export, tanto como el tamaño estimado (normalmente entre 3 y 5 veces menos con COMPRESSION=ALL); en el import, los archivos dump ya deben estar en este directorio. El directorio no debe estar en el mismo disco que los datafiles y la FRA.
- Para no recibir ORA-01555 en un export consistente (FLASHBACK_TIME/SCN) de larga duración, UNDO_RETENTION es mayor que la duración del export (p. ej., al menos 10800 s para un export de 3 horas) y el tablespace de undo es lo bastante grande para ese periodo (autoextend).
- El import genera mucho redo: si la base de datos está en modo ARCHIVELOG, debe haber espacio en la FRA (o en el destino de archivado). DISABLE_ARCHIVE_LOGGING no tiene efecto si FORCE LOGGING está activado (Data Guard).
- La base de datos de destino tiene un backup RMAN reciente y el método de vuelta atrás está definido (un import no se puede deshacer: un import en el esquema equivocado o con TRUNCATE/REPLACE solo se revierte desde un backup o con Flashback). En un entorno crítico se puede crear un guaranteed restore point antes del import (requiere ARCHIVELOG + FRA).
- Hay una ventana de mantenimiento planificada: …en el origen, los tablespaces que se trasladan quedan READ ONLY durante el export y la copia de datafiles (las aplicaciones que escriben reciben errores, ORA-00372); en el destino, los objetos nuevos no deben usarse durante el plug-in…durante el import, las aplicaciones que usan los objetos de destino deben detenerse o debe verificarse que no se ven afectadas…como no se ha seleccionado ninguna opción de consistencia, las escrituras de la aplicación deben detenerse mientras dura el export….
- El usuario oracle del origen puede hacer SSH/SCP al destino sin contraseña (con clave), o los archivos se trasladarán por otra vía (almacenamiento compartido, almacenamiento de objetos).
- El servidor de destino puede acceder al puerto del listener de origen (…:…) (firewall abierto).
- Comprobación de licencias: …COMPRESSION=ALL (y DATA_ONLY) requiere la licencia Advanced Compression Option. ……El cifrado del dump (ENCRYPTION, ENCRYPTION_PASSWORD/ENCRYPTION_PWD_PROMPT) requiere la licencia Advanced Security Option en Enterprise Edition. …Si no dispone de licencia, desactive estas opciones.
Fases de la guía
- Preparación: entorno, usuario y directorio — Verificar el entorno y el servicio del listener · Verificar el entorno y el servicio del listener (origen) · Verificar el entorno y el servicio del listener (destino) · Verificar el SCAN y las instancias del servicio · Comprobar la versión, el juego de caracteres y el modo de log · Comprobar la versión, el juego de caracteres y el modo de log (origen) …
- 1. Diagnóstico: ¿es el destino correcto? (refresco de esquema) — Registrar el estado del esquema de destino (destino) · Registrar el estado del esquema de origen (origen)
- 2. Red de seguridad: backup del esquema de destino y definición del usuario — Guardar la definición y los privilegios del usuario de pruebas (destino) · Hacer backup del esquema de destino (destino)
- 1. Diagnóstico: requisitos de transportable — Comprobar en el origen la plataforma, el juego de caracteres y el conjunto de tablespaces (origen) · Comprobar en el destino la plataforma, el juego de caracteres y los conflictos de nombres (destino)
- 2. Red de seguridad y preparación — Registrar la lista de datafiles y el estado READ ONLY actual (origen) · Preparar el directorio de datafiles en el destino (destino)
- 3. Ejecución: READ ONLY, export de metadatos y copia en el origen — Poner los tablespaces en READ ONLY (origen) · Escribir el parfile del export transportable (origen) · Ejecutar el export de metadatos (origen) · Copiar los datafiles y el dump al destino (origen)
- 4. Ejecución: plug-in en el destino — Verificar los archivos copiados (destino) · Convertir los datafiles a esta plataforma: RMAN CONVERT (destino) · Crear los esquemas propietarios de los objetos (destino) · Crear el parfile del import de plug-in (destino) · Ejecutar el import de plug-in (destino) · Poner los tablespaces en modo escritura (destino)
- 5. Verificación y pasos posteriores — Exportar los objetos que están fuera de los tablespaces (origen) · Cargar los objetos que están fuera de los tablespaces (destino) · Compilar y verificar los objetos no válidos (destino) · Volver a poner los tablespaces en READ WRITE en el origen (origen)
- Export — Revisar los objetos grandes, los LOBs y las particiones · Estimar el tamaño (ESTIMATE_ONLY) · Estimar el tamaño (ESTIMATE_ONLY) (origen) · Escribir el parfile del export · Escribir el parfile del export (origen) · Ejecutar el export …
- Traslado de los archivos dump al destino — Crear el archivo de checksums · Copiar los archivos dump al destino · Verificar el checksum en el destino
- Database link (NETWORK_LINK) — Crear el database link en el destino
- 3. Ejecución: vaciar el esquema de destino — Bloquear el usuario y cerrar las sesiones (destino) · Eliminar el esquema y volver a crear el usuario de pruebas (destino) · Listar los objetos que no se actualizarán en modo REPLACE (destino)
- Import — Comprobar los archivos dump · Comprobar los archivos dump (destino) · Comprobar el espacio y los esquemas existentes en el destino · Comprobar el espacio y los esquemas existentes en el destino (destino) · Escribir el parfile del import · Escribir el parfile del import (destino) …
- Después del import: compilación y estadísticas — Compilar los objetos no válidos · Compilar los objetos no válidos (destino) · Recopilar estadísticas · Recopilar estadísticas (destino)
- 4. Verificación y pasos posteriores (refresco de esquema) — Deshabilitar los jobs del scheduler que vinieron de producción (destino) · Volver a aplicar los privilegios que el esquema concede a otros (destino) · Comprobar objetos, sinónimos y links (destino) · Desbloquear el usuario (destino)
- SQLFILE: extraer el DDL de un dump — Comprobar los archivos dump · Escribir el parfile de SQLFILE · Generar el archivo DDL · Revisar el archivo DDL
- Programación: ejecutar el export periódicamente (cron) — Preparar los directorios del script, de logs y de TNS… (…)… · Crear el wallet y añadir la credencial · Copiar el wallet a los demás nodos · Escribir sqlnet.ora (solo para este job)… (…)… · Escribir tnsnames.ora (solo para este job)… (…)… · Escribir el script de export… (…)… …
- 1. Diagnóstico: ¿en qué estado está el job? — Mostrar el estado, las sesiones y el motivo de espera del job · Interpretar el resultado y elegir la acción
- 2. Ejecución: reanudar el job — Corregir la causa de la parada o de la suspensión · Conectarse al job y reanudarlo (ATTACH, START_JOB) · Verificar que el job se está ejecutando
- 2. Ejecución: terminar el job (KILL_JOB) — Conectarse al job y terminarlo con KILL_JOB · Verificar que el job ha desaparecido
- 2. Ejecución: limpiar la tabla maestra huérfana — Eliminar la tabla maestra del job huérfano
- Supervisión — Supervisar el job en ejecución · Supervisar el job en ejecución (origen) · Supervisar el job en ejecución (destino) · Conectarse al job: ATTACH y comandos interactivos · Conectarse al job: ATTACH y comandos interactivos (origen) · Conectarse al job: ATTACH y comandos interactivos (destino)
- Limpieza y seguridad — Listar los jobs interrumpidos y las tablas maestras · Listar los jobs interrumpidos y las tablas maestras (origen) · Listar los jobs interrumpidos y las tablas maestras (destino) · Terminar el job con KILL_JOB · Terminar el job con KILL_JOB (origen) · Terminar el job con KILL_JOB (destino) …