parallel - impdp oracle 12c
Cómo determinar los esquemas dentro de un archivo Oracle Data Pump Export (8)
- Tengo un archivo de copia de seguridad de la base de datos de 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.
Entonces, necesito inspeccionar el archivo .dmp y enumerar todos los esquemas, ¿cómo hago eso?
Actualización (2008-09-18 13:02) - Información más detallada:
El comando impdp que uso actualmente es:
impdp user/password@database directory=DPUMP_DIR
dumpfile=EXPORT.DMP logfile=IMPORT.LOG
Y el 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 principalmente esperado. Necesito el comando impdp ser:
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.
Al ejecutar el comando impdp para generar un archivo sqlfile, deberá ejecutarlo como un usuario que tenga la función 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
/
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 solo muestra la coincidencia por lo que no vemos líneas realmente 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.
Mi solución (similar a la respuesta de KyleLanser) (en un recuadro de Unix):
strings dumpfile.dmp | grep SCHEMA_LIST
Paso 1: Aquí hay un ejemplo simple. SQLFILE
crear un archivo SQL desde el archivo de volcado utilizando la opción SQLFILE
.
Paso 2: Grep para CREATE USER
en el archivo SQL generado (aquí tables.sql)
Ejemplo aquí:
$ impdp directory=exp_dir dumpfile=exp_user1_all_tab.dmp logfile=imp_exp_user1_tab sqlfile=tables.sql
Importación: lanzamiento 11.2.0.3.0 - producción el vie 26 de abril 08:29:06 2013
Copyright (c) 1982, 2011, Oracle y / o sus afiliados. Todos los derechos reservados.
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
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.
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 parámetro SQLFILE para que impdp genere 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.
impdp
exporta el DDL de una copia de seguridad dmp
a un archivo si usa el parámetro SQLFILE
. Por ejemplo, pon esto en un archivo de texto
impdp ''/ as sysdba'' dumpfile=<your .dmp file> logfile=import_log.txt sqlfile=ddl_dump.txt
Luego, consulte ddl_dump.txt
para ver los ddl_dump.txt
de tabla, los usuarios y los esquemas en la copia de seguridad.
De acuerdo con la documentación, esto en realidad no modifica la base de datos:
El SQL no se ejecuta en realidad, y el sistema de destino permanece sin cambios.
Actualización (2008-09-19 10:05) - Solución:
Mi solución: Ingeniería social, cavé muy duro y encontré a alguien que conocía el nombre del esquema.
Solución técnica: al buscar en el archivo .dmp se obtuvo el nombre del esquema.
Una vez que supe el nombre del esquema, busqué en el archivo de volcado y descubrí dónde encontrarlo.
Coloca el nombre de Schemas visto 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 de .dmp.
Curiosamente, alrededor de la SCHEMA_LIST ''SOURCE_SCHEMA''
, 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 :)