Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Impdp bd oracle 10g

Estas en el tema de Impdp bd oracle 10g en el foro de Oracle en Foros del Web. Hola buenas!! estoy intentando importar de una base de datos Oracle 10g a otra bd Oracle 10g, he exportado el contenido a un archivo .dmp ...
  #1 (permalink)  
Antiguo 19/10/2011, 13:01
 
Fecha de Ingreso: octubre-2011
Mensajes: 3
Antigüedad: 13 años, 2 meses
Puntos: 0
Impdp bd oracle 10g

Hola buenas!!

estoy intentando importar de una base de datos Oracle 10g a otra bd Oracle 10g,

he exportado el contenido a un archivo .dmp con una tarea programada de un .bat

y ahi todo genial.

Pero al intentar importar con una tarea programada de un .bat solo me importa el contenido de las tablas si la tabla no existe en la base de datos.

mi .bat es :

@echo off
set FECHA=%date%
set FECHA=%FECHA:/=%
set FECHA=%FECHA: =%
set FECHA=%FECHA::=%
set FECHA=%FECHA:,=%
set FECHA=%FECHA: =%
ren "Z:\BACKUP_DB\*.dmp" %FECHA%.dmp
MOVE /y "Z:\BACKUP_DB\export.log" "E:\BBDD"
MOVE /y "Z:\BACKUP_DB\*.dmp" "E:\BBDD

IMPDP ORSYSTEM/B6J4RR0N DIRECTORY=BACKUP_ORACLE DUMPFILE=%FECHA%.dmp

DEL "E:\BBDD\*.dmp"
DEL "E:\BBDD\*.log"

alguna idea para poder actualizar las tablas con esta importacion sin tener q borrar las propias tablas¿?¿?¿?¿?

y tb si eso como se podria borrar todas las tablas o bd desde una funcion .bat¿?¿?¿?

gracias , un saludo.
  #2 (permalink)  
Antiguo 19/10/2011, 15:46
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 17 años, 1 mes
Puntos: 85
Respuesta: Impdp bd oracle 10g

Los dos problemas que planteas (importar datos a una tabla existente y/o borrar datos antes de importar) se pueden resolver con el parámetro del import TABLE_EXISTS_ACTION, donde los valores posibles son:

SKIP: Si la tabla existe, el import no hace nada y pasa a la tabla siguiente. Esto es útil cuando se quiere importar tablas nuevas sobre un modelo dado sin modificar los datos existentes.

APPEND: Si la tabla existe y tiene datos, el import agrega o suma las filas del .dmp sin modificar las existentes. Esto es útil en modelos tipo data warehouse o de datos históricos.

TRUNCATE: Si la tabla existe y tiene datos, el import borra las filas existentes y después carga las filas del .dmp. Este parece ser el parámetro que soluciona tu problema, está para reemplazar los datos en casos donde la estructura de la tabla se mantiene.

REPLACE: Si la tabla existe, el import elimina la tabla existente (drop table), y después crea la tabla y carga las filas según la definición del .dmp. Esto es útil cuando se necesita reemplazar los datos y además cambia la estructura de la tabla (ej: se agrega o elimina una columna).

En primer lugar, prueba con:

Código:
IMPDP ORSYSTEM/B6J4RR0N 
DIRECTORY=BACKUP_ORACLE 
DUMPFILE=%FECHA%.dmp 
TABLE_EXISTS_ACTION=TRUNCATE
Pero en caso de tener problemas con el truncate, ya que tiene limitaciones si las tablas están relacionadas con constraints tipo FK/PK, prueba con los siguientes pasos (siempre conectado a la base con el usuario propietario de las tablas):

1. Disable de las constraints tipo FK

Código:
begin
for rec in (select table_name, constraint_name 
            from user_constraints
            where constraint_type = 'R') loop
 execute immediate 'alter table ' || rec.table_name || 
 ' disable constraint ' || rec.constraint_name;
end loop;
end;
/
2. Delete de las filas

Código:
begin
for rec in (select table_name from user_tables) loop
execute immediate 'delete from ' || rec.table_name;
commit;
end loop;
end;
/
3. Import con append

Código:
IMPDP ORSYSTEM/B6J4RR0N 
DIRECTORY=BACKUP_ORACLE 
DUMPFILE=%FECHA%.dmp 
TABLE_EXISTS_ACTION=APPEND
4. Enable de las constraints FK

Código:
begin
for rec in (select table_name, constraint_name 
            from user_constraints
            where constraint_type = 'R') loop
 execute immediate 'alter table ' || rec.table_name || 
 ' enable validate constraint ' || rec.constraint_name;
end loop;
end;
/
Saludos
  #3 (permalink)  
Antiguo 21/10/2011, 01:46
 
Fecha de Ingreso: abril-2011
Mensajes: 6
Antigüedad: 13 años, 8 meses
Puntos: 1
Respuesta: Impdp bd oracle 10g

La respuesta de matanga es muy correcta. Sin embargo, a mí por experiencia siempre me ha dado menos problemas la solución de borrar por completo la base de datos, recrearla vacía y después hacer el import. Eso te deja todo exactamente idéntico a la base de datos de origen.
Siempre que que el import que vayas a hacer sea completo, el tiempo que vas a tardar es prácticamente el mismo y la complicación mucho menor.
Un saludo
www.forumtecnico.com
  #4 (permalink)  
Antiguo 21/10/2011, 18:12
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 17 años, 1 mes
Puntos: 85
Respuesta: Impdp bd oracle 10g

Cita:
Sin embargo, a mí por experiencia siempre me ha dado menos problemas la solución de borrar por completo la base de datos, recrearla vacía y después hacer el import.
Ciertamente un drop table, create table e insert es el método más seguro en la importación, pero no es óptimo en todos los escenarios, la seguridad tiene un costo y puede que supere los beneficios, tienes casos como:

1. Importar datos incrementales, comenté el ejemplo de modelos históricos o data warehouse donde se necesita importar datos nuevos manteniendo los actuales, en este caso es más eficiente insertar solo los datos nuevos que eliminar y crear las tablas e insertar los datos viejos más los nuevos (parámetro TABLE_EXISTS_ACTION=APPEND).

2. Importar datos reemplazando los existentes, en el caso de necesitar vaciar una tabla antes de importar, y si la estructura de la tabla no cambia o no tiene relaciones FK/PK, es más eficiente hacer un truncate table e importar que hacer un drop table, create table e importar (parámetro TABLE_EXISTS_ACTION=TRUNCATE)

3. Importar tablas nuevas, en el caso de ampliar un modelo de datos existente manteniendo intactas las tablas actuales, es más eficiente crear solo las tablas nuevas e importar que hacer un drop para crear e importar las tablas nuevas más la viejas (parámetro TABLE_EXISTS_ACTION=SKIP).

Un drop de todo más un import full es simple, fácil y seguro, en general va bien para bases de datos pequeñas o medianas. Afinar la importación tiene más riesgo y complejidad pero es recomendado para bases de datos grandes donde recrear todas las tablas llevaría tiempos inviables.

Saludos

Etiquetas: impdp
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:40.