Cómo determinar los esquemas dentro de un archivo de exportación de Oracle Data Pump

StackOverflow https://stackoverflow.com/questions/95578

  •  01-07-2019
  •  | 
  •  

Pregunta

  • Tengo un archivo de copia de seguridad de la base de datos Oracle (.dmp) que se creó con expdp.
  • El archivo .dmp era una exportación de una base de datos completa.
  • Necesito restaurar 1 de los esquemas desde este archivo de volcado.
  • No sé los nombres de los esquemas dentro de este archivo de volcado.
  • Para usar impdp para importar los datos, necesito el nombre del esquema a cargar.

Entonces, necesito inspeccionar el archivo .dmp y enumerar todos los esquemas que contiene, ¿cómo lo hago?


Actualización (2008-09-18 13:02) - Información más detallada:

El comando impdp que estoy usando actualmente es:

impdp user/password@database directory=DPUMP_DIR 
      dumpfile=EXPORT.DMP logfile=IMPORT.LOG  

Y DPUMP_DIR está configurado correctamente.

SQL> SELECT directory_path
2  FROM dba_directories
3  WHERE directory_name = 'DPUMP_DIR';

DIRECTORY_PATH
-------------------------
D:\directory_path\dpump_dir\

Y sí, el archivo EXPORT.DMP está de hecho en esa carpeta.

El mensaje de error que recibo cuando ejecuto el comando impdp es:

Connected to: Oracle Database 10g Enterprise Edition ...
ORA-31655: no data or metadata objects selected for job
ORA-39154: Objects from foreign schemas have been removed from import

Este mensaje de error es lo más esperado.Necesito que el comando impdp sea:

impdp user/password@database directory=DPUMP_DIR dumpfile=EXPORT.DMP 
      SCHEMAS=SOURCE_SCHEMA REMAP_SCHEMA=SOURCE_SCHEMA:MY_SCHEMA

Pero para hacer eso, necesito el esquema fuente.

¿Fue útil?

Solución

Si abre el archivo DMP con un editor que pueda manejar archivos grandes, es posible que pueda ubicar las áreas donde se mencionan los nombres de los esquemas.Solo asegúrate de no cambiar nada.Sería mejor si abrieras una copia del volcado original.

Otros consejos

impdp exporta el DDL de un dmp copia de seguridad en un archivo si utiliza el SQLFILE parámetro.Por ejemplo, ponga esto en un archivo de texto.

impdp '/ as sysdba' dumpfile=<your .dmp file> logfile=import_log.txt sqlfile=ddl_dump.txt

Entonces revisa ddl_dump.txt para los espacios de tabla, usuarios y esquemas en la copia de seguridad.

Según la documentación, esto en realidad no modifica la base de datos:

En realidad, el SQL no se ejecuta y el sistema de destino permanece sin cambios.

Actualización (2008-09-19 10:05) - Solución:

Mi solución: Ingeniería social, investigué mucho y encontré a alguien que conocía el nombre del esquema.
Solución técnica: Buscando el archivo .dmp hizo produce el nombre del esquema.
Una vez que supe el nombre del esquema, busqué el archivo de volcado y aprendí dónde encontrarlo.

Lugares donde se vio el nombre de los esquemas, en el archivo .dmp:

  • <OWNER_NAME>SOURCE_SCHEMA</OWNER_NAME>Esto se vio antes de cada nombre/definición de tabla.

  • SCHEMA_LIST 'SOURCE_SCHEMA'Esto se vio cerca del final del .dmp.

Curiosamente, alrededor del SCHEMA_LIST 'SOURCE_SCHEMA' sección, también tenía la línea de comando utilizada para crear el volcado, los directorios utilizados, los archivos par utilizados, la versión de Windows en la que se ejecutó y la configuración de la sesión de exportación (idioma, formatos de fecha).

Entonces, problema resuelto :)

Suponiendo que no tiene el archivo de registro del trabajo expdp que generó el archivo en primer lugar, la opción más sencilla probablemente sería utilizar el archivo Parámetro SQLFILE hacer que impdp genere un archivo de DDL (basado en una importación completa).Luego puede tomar los nombres de los esquemas de ese archivo.No es ideal, por supuesto, ya que impdp tiene que leer todo el archivo de volcado para extraer el DDL y luego nuevamente para llegar al esquema que le interesa, y tiene que buscar un poco en el archivo de texto las diversas declaraciones CREATE USER. , pero debería ser factible.

Al ejecutar el comando impdp para producir un archivo sql, deberá ejecutarlo como un usuario que tiene la función DATAPUMP_IMP_FULL_DATABASE.

O...ejecútelo como un usuario con pocos privilegios y use la opción MASTER_ONLY=YES, luego inspeccione la tabla maestra.p.ej.

select value_t 
from SYS_IMPORT_TABLE_01 
where name = 'CLIENT_COMMAND' 
and process_order = -59;

col object_name for a30
col processing_status head STATUS for a6
col processing_state head STATE for a5
select distinct
  object_schema,
  object_name,
  object_type,
  object_tablespace,
  process_order,
  duplicate,
  processing_status,
  processing_state
from sys_import_table_01
where process_order > 0
and object_name is not null
order by object_schema, object_name
/

http://download.oracle.com/otndocs/products/database/enterprise_edition/utilities/pdf/oow2011_dp_mastering.pdf

Paso 1:He aquí un ejemplo sencillo.Tienes que crear un archivo SQL a partir del archivo de volcado usando SQLFILE opción.

Paso 2:grep para CREATE USER en el archivo SQL generado (aquí tablas.sql)

Ejemplo aquí:

$ impdp directory=exp_dir dumpfile=exp_user1_all_tab.dmp  logfile=imp_exp_user1_tab sqlfile=tables.sql

Importar:Versión 11.2.0.3.0 - Producción el viernes 26 de abril 08:29:06 2013

Copyright (c) 1982, 2011, Oracle y/o sus filiales.Reservados todos los derechos.

Nombre de usuario:/ como sysdba

Tipo de objeto de procesamiento SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA Trabajo "SYS". "SYS_SQL_FILE_FULL_01" completado con éxito a las 08:29:12

$ grep "CREATE USER" tables.sql

CREAR USUARIO "USUARIO1" IDENTIFICADO POR VALORES 'S:270D559F9B97C05EA50F78507CD6EAC6AD63969E5E;BBE7786A5F9103'

Muchas opciones de bombas de datos explicadas aquí http://www.acehints.com/p/site-map.html

Mi solución (similar a la respuesta de KyleLanser) (en un cuadro Unix):

strings dumpfile.dmp | grep SCHEMA_LIST

Debes buscar OWNER_NAME.

cat -v dumpfile.dmp | grep -o '<OWNER_NAME>.*</OWNER_NAME>' | uniq -u

cat -v convierte el archivo de volcado en texto visible.

grep -o muestra solo la coincidencia para que no veamos líneas muy largas

uniq -u elimina las líneas duplicadas para que veas menos resultados.

Esto funciona bastante bien, incluso en archivos de volcado grandes, y podría modificarse para su uso en un script.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top