Ver Mensaje Individual
  #2 (permalink)  
Antiguo 19/10/2011, 15:46
Avatar de matanga
matanga
 
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 17 años
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