martes, 11 de noviembre de 2008

¿Cómo importar datos sin un dump de por medio?

Todos hemos usado alguna vez los utilitarios export e import, pero con la aparición de Oracle10g vino como novedad Data Pump. Aún muchos no se han animado a usarlo, pero eventualmente tendrán que hacerlo ya que Oracle ha anunciado que en futuras versiones sólo se proporcionará import. Pues bien, la verdad es que si investigamos un poco y empezamos a usarlo, notaremos que mucho de los problemas por lo que pasamos al tratar de hacer algunas cosas medio rebuscadas con export e import, ahora son posibles con Data Pump y se los iré mostrando poco a poco, pero para empezar veamos cómo ahora es posible exportar los datos de un base de datos e importarlos en otra remota sin necesidad de crear un dump, e incluso crear allí el usuario destino si es que éste aún no existe, a ver ¡traten de hacer eso con export e import!

Para hacer esta demostración contaremos con una base de datos 10.2 bajo Solaris 10 como origen, y otra base de datos 11.1 bajo RHEL 4.7 como destino. Debemos empezar por crear un database link en la base de datos destino que nos permita comunicarnos con la base de datos origen

SYSTEM@orcl > create database link solaris
  2  connect to system identified by oracle
  3  using 'solaris';

Database link created.

SYSTEM@orcl > select banner from v$version@solaris;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - Prod
PL/SQL Release 10.2.0.2.0 - Production
CORE    10.2.0.2.0      Production
TNS for Solaris: Version 10.2.0.2.0 - Production
NLSRTL Version 10.2.0.2.0 - Production

Ya tenemos el database link operativo, procedamos a deshacernos del usuario scott que usualmente se instala como parte de los ejemplos.

SYSTEM@orcl > drop user scott cascade;

User dropped.

Hagamos la importación de los datos.
[oracle@linux ~]$ impdp system/oracle nologfile=y network_link=solaris schemas=scott

Import: Release 11.1.0.6.0 - Production on Tuesday, 11 November, 2008 9:58:03

Copyright (c) 2003, 2007, Oracle.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "SYSTEM"."SYS_IMPORT_SCHEMA_01":  system/******** nologfile=y network_link=solaris schemas=scott
Estimate in progress using BLOCKS method...
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 192 KB
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/TABLE/TABLE
. . imported "SCOTT"."DEPT"                                   4 rows
. . imported "SCOTT"."EMP"                                   14 rows
. . imported "SCOTT"."SALGRADE"                               5 rows
. . imported "SCOTT"."BONUS"                                  0 rows
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Job "SYSTEM"."SYS_IMPORT_SCHEMA_01" successfully completed at 09:58:17

No hay mensajes de error, pero igual comprobaremos.

[oracle@linux ~]$ sqlplus scott/tiger

SQL*Plus: Release 11.1.0.6.0 - Production on Tue Nov 11 09:58:23 2008

Copyright (c) 1982, 2007, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SCOTT@orcl > select table_name, num_rows
  2  from user_tables;

TABLE_NAME                       NUM_ROWS
------------------------------ ----------
SALGRADE                                5
BONUS                                   0
EMP                                    14
DEPT                                    4

Todo funcionó de acuerdo a lo esperado, hemos logrado sin mayor problema:
  • Usar un cliente de una versión superior (11g) para extraer datos de una versión inferior(10gR2), algo que con exp usualmente nos daría algunos errores de compatibilidad.
  • Creación del usuario receptor de los datos, esto es posible porque hemos empleado un usuario privilegiado, system en este caso, de otra forma el usuario debe existir previamente.
  • Transferir los datos desde una base de datos remota sin necesidad de generar un archivo dump como paso intermedio, gracias a la inclusión del parámetro network_link.

Puedes encontrar información adicional en el Note 351598.1 Export/Import DataPump: The Minimum Requirements to Use Export DataPump and Import DataPump (System Privileges) y en la documentación oficial.

¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues déjame tus comentarios o envíame un email y para que NO te pierdas ningún Post, suscríbete por email ahora mismo!

Agrega tu comentario