Uso de las herramientas expdp e impdp de Oracle

Oracle ofrece unas herramientas para realizar exportaciones/importaciones de datos que nos permiten desde realizar backups de esquemas completos, de bases de datos, de tablas, hasta la migración de esquemas en diferentes versiones, y un sin fin de posibilidades.

La idea de esta entrada del blog es explicar cómo realizar difentes exportaciones e importaciones en función de nuestras necesidades. En versiones anteriores a la 10gR1 de Oracle se utilizaban las herramientas exp e imp. Pero desde esa versión (10gR1) aparece una nueva herramienta llamada Oracle Data Pump que experimenta importantes cambios respecto a sus predecesoras exp e imp.

Una de las diferencias más sustanciales de la nueva herramienta es que pasa de ser una herramienta que se ejecuta en el servidor en lugar de en el cliente, con la mejora de rendimiento/velocidad que eso conlleva. Por tanto los ficheros de dump (.dmp normalmente) se generarán o leerán en el servidor de base de datos.

Las antiguas exp/imp ya se encuentran fuera de soporte. Por lo que es más que recomendable adaptarse al uso de Oracle Data Pump.

Para empezar lo ideal es conocer los parámetros que se le pueden pasar a expdp o impdp para ello basta poner desde la linea de comandos help=y.

En esta entrada de blog todos los ejemplos están hechos en Linux.

Ej. Mostrar los parámetros de expdp (exportación):

$ expdp help=y

Para poder usar Oracle Data Pump debemos realizar unos pasos previos a nivel de Oracle que nos permita ejecutar la herramienta correctamente. El primer paso que debemos realizar es crear el directorio a nivel lógico en Oracle que especifica la ruta que Oracle usará para realizar los exports e imports. De esta manera no tendremos nunca que modificar nuestros scripts de export/import, ya que en el script especificaremos el nombre que nosotros hayamos puesto a nivel lógico.

Para crear el directorio nos conectamos con el usuario “sys”:

$ sqlplus /nolog

SQL>connect /as sysdba

SQL> show user

USER is “SYS”

SQL> create or replace directory dirdatapump as ‘/home/oracle/dirdatapump’;

 Directory created.

 SQL> grant read,write on directory dirdatapump to system;

 Grant succeeded.

Con esto ya tenemos el directorio creado llamado dirdatapump que será el que usaremos en nuestros scripts. Si quisieramos modificar la ruta del directorio deberíamos volver a ejecutar los pasos anteriores especificando la nueva ruta. Al usuario que hemos dado permisos para poder hacer los exports/imports lo hemos especificado en la segunda setencia con el “grant”, en el ejemplo “system”.

Una vez hecho esto, ya podemos empezar a crear nuestros scripts para hacer las exportaciones o importaciones que necesitemos. Seguidamente pongo algún ejemplo…

Ejemplo 1: Exportar datos de un esquema en concreto

Crear un fichero llamado expdp.sh y añadir el siguiente contenido:

$ vi expdp.sh

expdp system/password@micadenaconexion schemas=USUARIO_EJEMPLO directory=dirdatapump dumpfile=esquema_USUARIO_EJEMPLO.dmp  logfile=expdp_USUARIO_EJEMPLO.log

Dar permisos de ejecución al script en Linux:

$ chmod u+x expdp.sh

donde…

USUARIO_EJEMPLO es el nombre de usuario

micadenaconexion es el nombre de la instancia a la que nos conectamos

dirdatapump es la ruta que hemos especificado en la creación del directorio a nivel lógico. En este ejemplo ‘/home/oracle/dirdatapump’

Este export generará un fichero con extensión .dmp que posteriormente usaremos para realizar el import en función de nuestras necesidades.

Ya podríamos ejecutar el script para realizar el export:

$ . ./expdp.sh

- Ejemplo de import usando el anterior export para crear el esquema en otra instancia:

impdp system/password@micadenaconexion2 schemas=USUARIO_EJEMPLO directory=dirdatapump dumpfile=esquema_USUARIO_EJEMPLO .dmp  logfile=impdp_USUARIO_EJEMPLO.log

Donde …

micadenaconexion2 es el nombre de una nueva instancia donde por ejemplo quiero importar los datos del esquema que he exportado anteriormente. Si el usuario no existe el propio impdp lo crea.

 Ejemplo 2: Quiero copiar un esquema de desarrollo a un entorno de producción pero con otro nombre.

Para ello usaremos el parámetro REMAP_SCHEMA en el import.

Export:

expdp system/password@micadenaconexion schemas=USUARIO_DESARROLLO directory=dirdatapump dumpfile=esquema_USUARIO_DESARROLLO .dmp  logfile=expdp_USUARIO_DESARROLLO.log

Import:

impdp system/password@micadenaconexion remap_schema=USUARIO_DESARROLLO:USUARIO_PRODUCCION directory=dirdatapump dumpfile=esquema_USUARIO_DESARROLLO .dmp  logfile=impdp_USUARIO_REMAP.log

Ejemplo 3: Quiero copiar un esquema y quiero que el fichero .dmp se sobreescriba para evitar el error al ejecutar expdp y así tener la última versión del esquema exportado.

Sólo basta con añadir el parámetro REUSE_DUMPFILES=y en el export.

Export:

expdp system/password@micadenaconexion schemas=USUARIO_EJEMPLO directory=dirdatapump dumpfile=esquema_USUARIO_EJEMPLO.dmp  resuse_dumpfile=y logfile=expdp_USUARIO_EJEMPLO.log

Nota:

Si no sabemos que ruta tenemos definida como “directory” la tabla all_directories nos podrá facilitar esta información,  podemos ejecutar la siguiente setencia:

SELECT privilege,directory_name, directory_path
FROM user_tab_privs t, all_directories d
WHERE t.table_name(+)=d.directory_name and d.directory_name = ‘DIRDATAPUMP’
ORDER BY 2,1
/

o esta para saber todos los directorios configurados de Oracle

SELECT privilege,directory_name, directory_path
FROM user_tab_privs t, all_directories d
WHERE t.table_name(+)=d.directory_name ORDER BY 2,1
/

This entry was posted in Administración Oracle and tagged , , , , , , . Bookmark the permalink.

Deja un comentario