2008-09-18 24 views
33
  • Tengo un archivo de copia de seguridad de 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 para cargar.

Por lo tanto, tengo que inspeccionar el archivo .dmp y enumerar todos los esquemas en él, ¿cómo puedo hacer eso?Cómo determinar los esquemas dentro de un archivo Oracle Data Pump Export


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

El comando impdp estoy utilizando actual es:

impdp user/[email protected] directory=DPUMP_DIR 
     dumpfile=EXPORT.DMP logfile=IMPORT.LOG 

Y el DPUMP_DIR es 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 consigo cuando funciono con 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 sobre todo espera. Necesito el comando impdp sea:

impdp user/[email protected] directory=DPUMP_DIR dumpfile=EXPORT.DMP 
     SCHEMAS=SOURCE_SCHEMA REMAP_SCHEMA=SOURCE_SCHEMA:MY_SCHEMA 

Pero para hacer eso, necesito el esquema de origen.

Respuesta

11

Si abre el archivo DMP con un editor que puede 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 abre una copia del volcado original.

+0

funcionó para mí 100% – theo231022

5

Suponiendo que no tiene el archivo de registro del trabajo expdp que generó el archivo en primer lugar, la opción más fácil sería usar el SQLFILE parameter para tener impdp generar un archivo de DDL (basado en una importación completa) Luego puede tomar los nombres de esquema 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 hacer un poco de archivo de texto buscando las distintas instrucciones CREATE USER , pero debería ser factible.

+0

Intenté usar el parámetro SQLFILE, pero falló con una sola línea en el archivo de salida .sql: "- CONNECT MYSCHEMA". Creo que con un poco más de esfuerzo para que funcione, esto podría haber dado la solución. – KyleLanser

9

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

Mi Solución: La ingeniería social, que excavó muy duro y encontró a alguien que conocía el nombre de esquema.
Solución técnica: Buscando en el archivo .dmp hizo produce el nombre del esquema.
Una vez que conocí el nombre del esquema, busqué en el archivo de volcado y descubrí dónde encontrarlo.

Coloca el nombre de Schemas visto en el.dmp:

  • <OWNER_NAME>SOURCE_SCHEMA</OWNER_NAME> Esto fue visto antes de cada nombre de la tabla/definición.

  • SCHEMA_LIST 'SOURCE_SCHEMA' Esto fue visto cerca del final de la .dmp.

Curiosamente, alrededor de la sección SCHEMA_LIST 'SOURCE_SCHEMA', también tenía la línea de comandos que se utiliza para crear el volcado, directorios utilizados, archivos PAR utilizados, la versión de Windows que se ejecuta en y configuración de la sesión de exportación (idioma, formatos de fecha)

Así, problema resuelto :)

68

impdp exporta el DDL de una copia de seguridad dmp a un archivo si se utiliza el SQLFILE parameter. Por ejemplo, poner esto en un archivo de texto

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

continuación, compruebe ddl_dump.txt para los espacios de tablas, usuarios y esquemas de la copia de seguridad.

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

El SQL no se ejecuta realmente, y el sistema de destino se mantiene sin cambios.

+10

Curioso por qué el downvote, literalmente he usado este método yo mismo en varias ocasiones para determinar esquemas, y es muchísimo más simple que las otras respuestas de "ingeniería social" o "cavar alrededor de un dmp" " –

+4

¿Quién rechazaría esto? Me salvó de intentar analizar un gran vertedero. – sreimer

+0

Tal vez obtuvieron "ORA-39145: parámetro de objeto de directorio debe ser especificado y no nulo" –

4

Al ejecutar el comando impdp para generar un archivo sqlfile, deberá ejecutarlo como un usuario que tenga el rol DATAPUMP_IMP_FULL_DATABASE.

O ... ejecútelo como un usuario con privilegios bajos 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

2

Mi solución (similar a la respuesta de KyleLanser) (en una caja de Unix):

strings dumpfile.dmp | grep SCHEMA_LIST 
3

Paso 1: Aquí se presenta un ejemplo simple. Debe crear un archivo SQL a partir del archivo de volcado utilizando la opción SQLFILE.

Paso 2: Grep para CREATE USER en el archivo SQL generado (en este caso tables.sql)

Ejemplo aquí:

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

importación: Release 11.2.0.3.0 - Producción de Fri Apr 26 08:29:06 2013

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

Nombre de usuario:/como sysdba

tipo de objeto Procesamiento SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA Trabajo "SYS"."SYS_SQL_FILE_FULL_01" completó con éxito en 08:29:12

$ grep "CREATE USER" tables.sql 

CREATE USER "USUARIO1" identificadas por los valores 'S: 270D559F9B97C05EA50F78507CD6EAC6AD63969E5E; BBE7786A5F9103'

Gran cantidad de opciones DataPump explica aquí http://www.acehints.com/p/site-map.html

0

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 sólo el partido por lo que no se ve muy largas líneas

uniq -u elimina las líneas duplicadas por lo que se ve menos producción.

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

Cuestiones relacionadas