Come determinare gli schemi all'interno di un file di esportazione Oracle Data Pump

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

  •  01-07-2019
  •  | 
  •  

Domanda

  • Ho un file di backup del database Oracle (.dmp) creato con expdp.
  • Il file .dmp era un'esportazione di un intero database.
  • Devo ripristinare 1 degli schemi dall'interno di questo file di dump.
  • Non conosco i nomi degli schemi all'interno di questo file di dump.
  • Per utilizzare impdp per importare i dati ho bisogno del nome dello schema da caricare.

Quindi, devo controllare il file .dmp ed elencare tutti gli schemi al suo interno, come posso farlo?


Aggiornamento (2008-09-18 13:02) - Informazioni più dettagliate:

Il comando impdp che sto utilizzando attualmente è:

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

E DPUMP_DIR è configurato correttamente.

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

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

E sì, il file EXPORT.DMP si trova infatti in quella cartella.

Il messaggio di errore che ricevo quando eseguo il comando impdp è:

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

Questo messaggio di errore è per lo più previsto.Ho bisogno che il comando impdp sia:

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

Ma per farlo, ho bisogno dello schema sorgente.

È stato utile?

Soluzione

Se apri il file DMP con un editor in grado di gestire file di grandi dimensioni, potresti riuscire a individuare le aree in cui sono menzionati i nomi degli schemi.Assicurati solo di non cambiare nulla.Sarebbe meglio se aprissi una copia del dump originale.

Altri suggerimenti

impdp esporta il DDL di a dmp backup su un file se usi il file SQLFILE parametro.Ad esempio, inseriscilo in un file di testo

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

Quindi controlla ddl_dump.txt per i tablespace, gli utenti e gli schemi nel backup.

Secondo la documentazione, questo in realtà non modifica il database:

L'SQL non viene effettivamente eseguito e il sistema di destinazione rimane invariato.

Aggiornamento (2008-09-19 10:05) - Soluzione:

La mia soluzione: Ingegneria sociale, ho scavato a fondo e ho trovato qualcuno che conosceva il nome dello schema.
Soluzione tecnica: Ricerca del file .dmp fatto restituire il nome dello schema.
Una volta conosciuto il nome dello schema, ho cercato il file dump e ho scoperto dove trovarlo.

Luoghi in cui sono stati visualizzati i nomi degli schemi, nel file .dmp:

  • <OWNER_NAME>SOURCE_SCHEMA</OWNER_NAME>Questo è stato visto prima del nome/definizione di ogni tabella.

  • SCHEMA_LIST 'SOURCE_SCHEMA'Questo è stato visto verso la fine del file .dmp.

È interessante notare che intorno al SCHEMA_LIST 'SOURCE_SCHEMA' sezione, aveva anche la riga di comando utilizzata per creare il dump, le directory utilizzate, i file par utilizzati, la versione di Windows su cui veniva eseguito e le impostazioni della sessione di esportazione (lingua, formati di data).

Quindi problema risolto :)

Supponendo che non si disponga del file di registro del lavoro expdp che ha generato il file, l'opzione più semplice sarebbe probabilmente quella di utilizzare il comando Parametro SQLFILE fare in modo che impdp generi un file di DDL (basato su un'importazione completa).Quindi puoi prendere i nomi degli schemi da quel file.Non è l'ideale, ovviamente, dato che impdp deve leggere l'intero file di dump per estrarre il DDL e poi di nuovo per arrivare allo schema che ti interessa, e devi fare un po' di file di testo alla ricerca delle varie istruzioni CREATE USER , ma dovrebbe essere fattibile.

Quando si esegue il comando impdp per produrre un file sql, sarà necessario eseguirlo come utente con il ruolo DATAPUMP_IMP_FULL_DATABASE.

O...eseguilo come utente con privilegi limitati e utilizza l'opzione MASTER_ONLY=YES, quindi controlla la tabella principale.per esempio.

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

Passo 1:Ecco un semplice esempio.È necessario creare un file SQL dal file dump utilizzando SQLFILE opzione.

Passo 2:Grep per CREATE USER nel file SQL generato (qui tables.sql)

Esempio qui:

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

Importare:Versione 11.2.0.3.0 - Produzione venerdì 26 aprile 08:29:06 2013

Copyright (c) 1982, 2011, Oracle e/o sue affiliate.Tutti i diritti riservati.

Nome utente:/ come sysdba

Elaborazione del tipo di oggetto SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA Lavoro "SYS"."SYS_SQL_FILE_FULL_01" completato con successo alle 08:29:12

$ grep "CREATE USER" tables.sql

CREA UTENTE "UTENTE1" IDENTIFICATO DAI VALORI 'S:270D559F9B97C05EA50F78507CD6EAC6AD63969E5E;BBE7786A5F9103'

Molte opzioni del datapump spiegate qui http://www.acehints.com/p/site-map.html

La mia soluzione (simile alla risposta di KyleLanser) (su una scatola Unix):

strings dumpfile.dmp | grep SCHEMA_LIST

Devi cercare OWNER_NAME.

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

cat -v trasforma il file dump in testo visibile.

grep -o mostra solo la corrispondenza, quindi non vediamo righe molto lunghe

uniq -u rimuove le righe duplicate in modo da vedere meno output.

Funziona abbastanza bene, anche su file di dump di grandi dimensioni, e potrebbe essere ottimizzato per l'utilizzo in uno script.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top