Export e Import en Oracle

A continuación describiremos la forma de realizar un Export/Import en nuestro Oracle, probado en la versión 9i y a funcionado sin problemas ninguna, ante todo tendremos que saber que es esto de Export/Import

¿Que es un export/import en Oracle?

Export/Import es una utilidad de Oracle para realizar backups lógicos de Oracle ( y luego poderlos restaurar ). Esto significa que copian el contenido de la BD pero sin almacenar la posición física de los datos. Para realizar estas operaciones la base de datos tiene que estar abierta.

Para crear el fichero de backup se utiliza la utilidad export y para importar el contenido o recuperar la base de datos se realiza import.

Se realiza en los siguientes casos:

  1. Para realizar backups de bases de datos
  2. Para corregir “Row Migration & Row Chaining”
  3. Detectar alguna corrupción en la base de datos, puesto que al hacer el export se lee toda la bd.
  4. Para “migrar” una base de datos a otro servidor

EXPORT

Comenzemos a ver como se realizaria un export para nuestra base de datos.

- Podemos realizar una copia completa de la base de datos mediante la siguiente orden

$exp file=/oracle9/export_orasite.dmp full=yes log=/oracle9/log/export_orasite.log buffer=1000000

file=/oracle9/export_orasite.dmp > Nombre y ubicación del archivo del export ( el usuario oracle tiene que tener permisos para escribir ahi. La extensión de este archivo es dmp.

full=yes –> Con esto indicamos que el export es completo, todos los esquemas de la base de datos y sus datos permisos, privilegios ..

log=/oracle9/log/export_orasite.log –> fichero para tener el log del export, el usuario oracle también tiene que tener permisos en ese directorio para escribir.

buffer=1000000 –> reservamos buffer para la operación.

- Copiando las tablas especificas de un usuario

$exp scott/tiger file=orasitescott.dmp tables=(emp,dept) buffer=1000000

Realizando el export de las tablas que tiene el usuario scott

- Copiando tablas de un usuario con una condición especifica

$exp scott/tiger file=c:\orasitempleados.dmp tables=emp query=\”where deptno=10\”

Con query espeficificamos una condición para realizar el export de esa tabla

IMPORT

- Importar todo el archivo exportado

$imp system/manager file=c:\orasitefull.dmp full=yes ignore=yes log=c:\orasite\log\import_log.log buffer=1000000

Importamos con el usuario system que tiene permisos para importar el archivo orasitefull.dmp dejando un log de dicha importación en import_log.log reservando un buffer de 100000

- Importar una tabla de un usuario concreto

$imp scott/tiger file=orasitempleados.dmp fromuser=scott touser=scott tables=dept

Importamos del archivo orasitempleados.dmp sólo del usuario scott de ese archivo al esquema del usuario scott la tabla departamento

Existe la opcion de realizar import y export interactivo, esto es que en la consola introducimos el comando imp (para import) o exp (para export) y nos irá pidiendo parámetros para la acción a realizar, usuarios, tablas, permisos……

35 comentarios »

  1. Oscar dicho:

    Hola que tal…
    Antes de nada …muchas gracias por la info…
    Te queria hacer una pregunta al respecto si no te importa.
    Tengo planeado migrar una base de datos de Oracle de un servidor windows 2000 con un 9i a un servidor windows 2003 con una 10g.
    Tengo hecho un exd full y pretendia llevarlo al nuevo servidor y realizar un imp full.
    Me da que esto no me funcionara si no me creo objetos primero en el nuevo servidor?

    Salu2

  2. ramkiller dicho:

    Hola Oscar, yo nunca he probado exportar de una version a otra, pero no creo que haya muchos problemas de una 9i a una 10g, te tienes que asegurar que en las dos base de datos hayan los mismos tablespaces y los mismos usuarios y entoces a empezar el import y no creo que te de error ninguno

    Saludos

  3. rEYES dicho:

    Hola,
    No hay ninguna opción para que el exp te meta en el script también el create user y el create tablespace exactos a la BD de origen?
    Gracias
    Reyes.

  4. ramkiller dicho:

    Reyes perdona la tardanza de la respuesta, que yo sepa y que mis conocimientos lleguen, exp e imp son comandos que tu das en la consola del sistema, nunca llegas a meterlos mediante sql, mientras que el script de create user lo tienes que poner mediante la consola de sql, asi que no estoy seguro de que puedas realizar dicho script

    un saludo

  5. Rous dicho:

    Ya tengo una Base de datos de prueba , pero necesito hacer un full imp , le pregunto . Que debo hacer para volver hacer un full imp.

    Gracias por la ayuda

  6. ramkiller dicho:

    Rous no he entendido muy bien tu pregunta, que quieres volver a realizar un full imp sobre una bbdd a la que ya se lo has realizado???

  7. luis dicho:

    Hola.

    Soy nuevo trabajando con Export Import y me gustaria saber como
    puedo recuperar un archivo (un programa), o un scritp no una tabla desde un export.

    Gracias.

  8. ramkiller dicho:

    Luis que has perdido datos de una tabla y te gustaría recuperarlo, si es así deberías de realizar un import a la base de datos, claro eso es si anteriormente realizaste la copia de seguridad de export sino es así es imposible recuperarlo

  9. Antares dicho:

    Hol, gracias por la guía una pregunta… ¿cómo se hace el import si el export se hizo con un un usuario con privilegio de sysdba? por que sy coloco imp system/manager file=…. me sale error por que necesito el rol de sysdba.

  10. MIGUEL dicho:

    saludos

    quiero hacer un IMPORT de una bd pero quiero unicamente importar la estructura de la base (tablas) sin datos… como lohago?

    o lo que es lo mismo como hago un EXPORT pero unicamente de la estructura , sin datos de las tablas?

    gracias

  11. ramkiller dicho:

    Hola antares si el script de tu export era una cosa asi:
    exp ’sys/passsys@bdd as sysdba’ file=destino log=destinolog ….. y lo que sigue, el import pues igual pero en vez de exp le pones imp, seria una cosa asi
    imp ’sys/passsys@bd as sysdba’ file=origen log=destinolog
    Otra forma de realizar un import al igual que el export es introducir en la línea de comando imp, pulsar intro y esperar a que te vaya pidiendo la utilidad los parámetros que requiere.
    De esta forma te pedirá el usuario, constraseña, el archivo para importar, qué quieres importar del archivo … etc.
    Espero haber aclarado tus dudas, sino no dudes en comentar lo que sea por aqui

    Un saludo

  12. ramkiller dicho:

    Hola Miguel

    Puedes probar como le he comentado a antares, te vas a la línea de comandos y escribes exp y pulsas intro, a partir de ahi te ira preguntando los parámetros para el export desado, de esta manera te pedirá, el usuario, constraseña, si quieres hacer copia sólo de la estructura, con datos, sin datos, nombre del archivo … etc.

    Un saludo

  13. Jair Monterrosa dicho:

    Gracias amigo me fue muy util.

  14. Christian dicho:

    hola muy interesante tu ayuda, te detallo mi caso . . tengo dos servidores el servidor “A” que esta en red hat y el servidor “B” que esta en WinXP, en los dos tengo instalados el ORACLE 10g, en la base de datos del servidor A esta realizando constantes cambios y pruebas, mientras que la B ya esta en produccion, la pregunta del millon es: ¿ puedo exportar una tabla nueva que se creo de la base de datos del servidor A, e importarlo en la base de datos del servidor B?..¿no afectarian las llaves e indices con relacion a las demas tablas? de ser posible esta importacion y exportacion en el mismo entorno si se aumentaria un campo en la tabla de la base de datos del servidor A que es lo ¿que podria hacer?

  15. Victor dicho:

    HOLA RAMKILLER

    Necesito que me aclares una duda respecto a oracle 10g, hay alguna forma de poder generar el script que contenga las lineas de SQL*plus de toda mi BD (Esquema, tablas, constarains, etc..) que he creado. O dime cual es la sentencia en el EXP, para decirle en linea de comando que tablas deeseo exportar, por ejemplo CARRERA, MATERIA, HORARIO; o de otra forma.

  16. ramkiller dicho:

    hola christian y perdona por el gran retraso, pero en el curro tenemos capado el wordpress y en casa no he cogido apenas el ordenador, y en tu caso si, la exportación afecta a las llaves, pero como leo una tabla nueva, o sea no está en la base de datos de B, si es ese el caso solamente debes de crear la tabla en el esquema correcto y realizar la importación, pero te recomiendo que consultes en otros sitios para tu seguridad ya que todavia soy medio novato en Oracle.

    Un saludo

  17. ramkiller dicho:

    Hola Victor y perdon por el retraso, ya se lo he comentado a christian y según he entendido en tu pregunta, quieres exportar específicas tablas no??? para ello realiza lo siguiente

    $exp scott/tiger file=orasitescott.dmp tables=(emp,dept) buffer=1000000

    donde tables = aquí pondrias las tablas que quieres exportar

    Un saludo

  18. ramkiller dicho:

    Hola Victor y perdon por el retraso, ya se lo he comentado a christian y según he entendido en tu pregunta, quieres exportar específicas tablas no??? para ello realiza lo siguiente

    $exp scott/tiger file=orasitescott.dmp tables=(emp,dept) buffer=1000000

    donde tables = aquí pondrias las tablas que quieres exportar

    Un saludo

  19. pato dicho:

    Hola ramkiller, tengo un problema. Realice un exp full en modo interactivo de mi base de datos y me salio ok. Ahora quiero hacer exp de la misma bd pero solo de algunas tablas, le doy el comando exp en el cmd pero me sale un mensaje de que el comando no es reconocido interna ni externamente como ejecutable. Lo raro es q anteriormente si me funciono pero la segunda vez ni tercera, cuarta, quinta (a esto me refiero q probe varias veces jeje =P) y aun no me funciona. El S.O. es Windows 2003 server.
    Gracias de antemano =)

  20. HGMAYA dicho:

    Hola

    Como le hago para pasar el contenido de una tabla que apunta al mismo esquema pero que esta en diferente servidor?
    ejemplo

    Pasar el contenido de esta tabla
    conexion : servidor01
    esquema : basedatos
    tabla : empleados

    conexion : servidor02
    esquema : basedatos
    tabla : empleados

    Porfa ayudarme gracias

  21. ramkiller dicho:

    Hola pato, por lo que me comentas puedes que hayas tocado en las variables de entorno del sistema y trastocase en la variable path, porque de otro motivo no se me pasa la cabeza para que el comando exp no te lo reconozca la máquina, mira la variable de entorno path y compárala con otro equipo que puede que se haya eliminado alguna de oracle.

    un saludo

  22. ramkiller dicho:

    Hola HGMAYA.

    Realizar este import es sencillo, basta con llevarte el dmp en la máquina a la que va a recibir el import, para así vaya este más rápido, y lo típico antes de realizar un import, aqui en su caso borrarias el contenido de la tabla de la base de datos que va a recibir la importación, para que no te de conflictos, vamos los pasos típicos a realizar pero solo con una tabla.

    Empezemos con nuestro import de una sola tabla sería una cosa así
    $imp ’sys/pass@bdd as sysdba’ file=archivo.dmp fromuser=scott touser=scott tables=dept

    espero haberte servido de ayuda.

    un saludo

  23. Carla dicho:

    hola :)
    realizo exportaciones en bd oracle 10g con SO server 2003 , pero esta tarea me resulta tediosa asi que lo hago con archivos bat (este es mi comando):

    exp system/oracle file=c:\backup\EQU_05_11_2008.dmp log=c:\backup\EQU_05_11_2008.log recordlength=4096 buffer=300000 owner=CTRLEQU

    pero lo que me falta es hacer el cambio de fecha automatico, no se si m explico, pero “EQU_05_11_2008″ esta fecha yo la digito; como puedo hacer para que realice backup con la fecha actual sin tener que digitarla.

    gracias

  24. ramkiller dicho:

    Hola Carla.

    Para que tus exportaciones lleven la fecha en la que se realizaron te voy a poner un ejemplo de .bat que yo utilizo que me saca el di en el que se realizó ya que guardo las copias por meses, aquí te lo pongo y espero que te sirva

    for /f “tokens=1-3 delims=/ ” %%a in (‘DATE /T’) do set Date=%%a

    %ORACLE_HOME%bin\exp ’sys/pass@bdd as sysdba’ file=(%DIR_DATOS%nombre-%Date%.dmp) full=y STATISTICS = NONE consistent=y log=%DIR_DATOS%nombre-%Date%.log buffer=200000

    y para que te ponga la fecha entera nunca lo he probado pero supongo que será algo así

    for /f “tokens=1-3 delims=/ ” %%a in (‘DATE /T’) do set Date=%%a
    for /f “tokens=2-4 delims=/ ” %%a in (‘DATE /T’) do set Mes=%%a
    for /f “tokens=3-5 delims=/ ” %%a in (‘DATE /T’) do set Anyo=%%a

    %ORACLE_HOME%bin\exp usuario/pass@bdd file=%DIR_DATOS%\ejemplo%Date%%Mes%%Anyo%.dmp STATISTICS=NONE consistent=y log=%DIR_LOGS%\ejemplo%Date%%Mes%%Anyo%.log

    Bueno espero que te sirva de ayuda.

    Un saludo.

  25. Merthin dicho:

    Hola.
    Mi problema es el siguiente: Tengo los datos en un oracle 10.2 y los quiero pasar a un oracle 9.2. Después de hacer el export en la versión 10 y tratar de importarlo en la 9, obtengo un “IMP-00010: not a valid export file, header failed verification”, que imagino que será por la diferencia de versiones. He intentado localizar alguna opción en el exp que permita exportar para versiones anteriores, pero no la encuentro.
    ¿Se te ocurre algo?
    Gracias.

    • ramkiller dicho:

      Hola Merthin,

      La verdad que no he visto ningun caso en lo que se quiera pasar la base de datos Oracle 10g a una Oracle 9i en el casi año de experiencia que llevo con esto.
      Mi recomendación de lo que he leido por internet, es que realizes el export desde el servidor de la 9i y luego ya realizas el import, si te vuelve a dar problemas, no dudes en consultarme lo que sea, ya que es la primera vez que me enfrento a esto.

      Un saludo

    • javierb dicho:

      No es posible. Lo lei en el manual. solo va hacia delante.

  26. Gabriela dicho:

    Hola, antes que nada gracias por tus tips me han servido mucho y tengo una duda haber si me pueden ayudar tengo una base de datos en Oracle 10i y necesito bajarla de versión a la 9i, no se sipodrias decir como hacerlo.

    De antemano muchas gracias.

    • ramkiller dicho:

      Hola Gabriela, perdona por la tardanza pero no he podido conectarme en un buen tiempo a mi blog ni a mi correo, puedes intentar lo siguiente:

      1-Configura el Tnsnames de la 9i para que pueda ver la base 10g.
      2-Usando el EXP de la 9i conectate a la 10g y realiza el export.
      3- Importa en la 9i.

      Espero que te sirva, ya que yo nunca he bajado la versión de mi base de datos

  27. Sergio dicho:

    hola a todos,

    estoy intentando hacer un export pero me sale el siguiente error : “Export prog not found: ‘ORACLE_HOME/bin/exp*’”
    He mirado los registros y no encuentro nada. No he realizado ningún cambio en los registros. sí que he tirado abajo los servicios y los he vuelto a levantar. quizás no haya levantado uno de ellos y por eso no encuentre el ejecutable.

    espero que le suene a alguien

    muchas gracias

  28. Alfonso dicho:

    Hola:
    Tengo un archivo .dmp de un oracle 10g versión 2, quiero realizar el import a un 10g versión 1. y obtengo un “IMP-00010: not a valid export file, header failed verification”, que imagino que será por la diferencia de versiones. La solucion sería realizar el export con la version menor????

    • ramkiller dicho:

      Buenas, el problema puede ser causado como tu dices por las versiones de oracle, prueba a realizar el import desde la version menor de oracle, si te da otro fallo no dudes en exponerlo por aquí que me encanta investigar fallos de Oracle.
      Un saluod.

  29. checo dicho:

    hola, les escribo, ya que tengo una duda con oracle 10g Express edition, he vendido mi maquina pero quiero respaldar toda la informacion de mi base de datos en una nueva maquina que compre, como podria hacerle, ya que la informacion es muchisima y es urgente que la tenga ya funcionando en la nueva maquina, gracias

  30. Carlos dicho:

    Saludos,

    Antes que nada gracias por toda la información que aqui es desplegada. Mi inquietud es la siguiente: Ya realicé la importación del archivo .dmp, la pregunta ahora es; como lo abro? es decir, como accedo a esa base de datos. EL archivo que importé es un a base de datos que me pasaron para realizar unas pruebas. Gracias de antemano.

  31. PEPA dicho:

    Yo tengo una duda, yo solo quiero exportar la estructura de las tablas no sus datos, alguien me podria ayudar cual es la forma de realizarlo,

    Gracias,


{ RSS suscribirse para los comentarios en esta entrada} · { URI para TrackBack. }

Dejar un comentario