viernes, 23 de abril de 2010

¿Cómo copiar datos desde una base a otra en Oracle?

Si alguna vez se han preguntado como hacer para copiar información (y rapidamente!) desde una base de datos a otra acá les dejo el comando de SQL*Plus para poder hacerlo:

COPY FROM  "db_origen" TO  "db_destino" "accion" "tabla_destino"
["(column_name, column_name...)"] USING "query";

Siendo:

  • "db_origen" y "db_destino" - las conexiones a las base de datos, por ejemplo: SCOTT/TIGER@BASE1

  • "accion" - puede ser una de las siguientes:

    • create - Crea la tabla. Si esta ya existía vamos a tener un error al ejecutar el comando.

    • replace - Reemplaza la tabla si existía y la vuelve a crear. Si no existía, la crea e inserta los datos.

    • insert - Inserta los datos provenientes de la query. En este caso solo las filas devueltas por la query son insertadas, no hay ninguna operación de DDL. Si la tabla no existía vamos a tener un error al ejecutar el comando.

    • append - Inserta los datos si la tabla ya existía. Si la tabla no existía entonces la crea y luego procede a insertar las filas.}

  • "tabla_destino": La tabla destino :P

  • ["(column_name, column_name...)"] - Opcional. Permite establecer en que columnas queremos insertar los datos. Esto debe usarse cuando el query solo va a devolver algunas de las columnas de la tabla destino y no todas.

  • "query" - Query a ejecutarse en la base origen.

Ejemplos de uso:

Podriamos crear una tabla desde la base DB1 en la base DB2 con el siguiente comando:

SQL> copy FROM scott/tiger@DB1 TO scott/tiger@DB2 CREATE emp
using SELECT * FROM emp;

Este comando también sirve para poder copiar información desde una tabla a otra en la misma base:

SQL> copy FROM scott/tiger@DB1 TO scott/tiger@DB1 CREATE new_emp
using SELECT * FROM emp;

Conclusión:

Vale destacar que este método es muy práctico para copiar tablas con columnas con tipo de datos: BLOB, CLOB o Long.

Si en nuestra base de datos tenemos columnas Long utilizadas para almacenar texto, deberiamos tener en cuenta el tamańo de los datos Long a copiar. Ejecutamos el siguiente comando "longsize" con el tamańo deseado (en bytes) y listo:

SQL> SET longsize 35000

Otro modificador util es el "copycommit", el cual permite establecer cada cuantas filas insertadas se va a ejecutar un commit:

SQL> SET copycommit 5000

Espero que les haya sido de utilidad!

2 comentarios:

email marketing dijo...

Hola , queria felicitarte, pues tu pagina es excelente .
te mando un abrazo .

Unknown dijo...

Excelente artículo!, muy buena publicación, felicitaciones