Comment déterminer les schémas à l'intérieur d'un fichier d'exportation Oracle Data Pump

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

  •  01-07-2019
  •  | 
  •  

Question

  • J'ai un fichier de sauvegarde de la base de données Oracle (.dmp) créé avec expdp.
  • Le fichier .dmp était une exportation d'une base de données entière.
  • Je dois restaurer 1 des schémas à partir de ce fichier de vidage.
  • Je ne connais pas les noms des schémas à l'intérieur de ce fichier de vidage.
  • Pour utiliser impdp pour importer les données, j'ai besoin du nom du schéma à charger.

Je dois donc inspecter le fichier .dmp et répertorier tous les schémas qu'il contient, comment puis-je le faire?

Mise à jour (2008-09-18 13:02) - Informations plus détaillées:

La commande impdp que j'utilise actuellement est la suivante:

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

Et le DPUMP_DIR est correctement configuré.

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

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

Et oui, le fichier EXPORT.DMP se trouve dans ce dossier.

Le message d'erreur que je reçois lorsque j'exécute la commande impdp est le suivant:

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

Ce message d'erreur est généralement attendu. J'ai besoin que la commande impdp soit:

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

Mais pour ce faire, j'ai besoin du schéma source.

Était-ce utile?

La solution

Si vous ouvrez le fichier DMP avec un éditeur capable de gérer des fichiers volumineux, vous pourrez peut-être localiser les zones où les noms de schéma sont mentionnés. Veillez simplement à ne rien changer. Ce serait mieux si vous ouvriez une copie du dump original.

Autres conseils

impdp exporte le DDL d'une dmp sauvegarde dans un fichier si vous utilisez SQLFILE paramètre . Par exemple, mettez cela dans un fichier texte

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

Recherchez ensuite ddl_dump.txt les espaces de table, les utilisateurs et les schémas dans la sauvegarde.

Selon la documentation, cela ne modifie pas réellement la base de données:

  

Le code SQL n'est pas réellement exécuté et le système cible reste inchangé.

Mise à jour (2008-09-19 10:05) - Solution:

Ma solution: L'ingénierie sociale, j'ai vraiment creusé et j'ai trouvé quelqu'un qui connaissait le nom du schéma.
Solution technique: la recherche dans le fichier .dmp a généré le nom du schéma.
Une fois que j'ai connu le nom du schéma, j'ai effectué une recherche dans le fichier de vidage et j'ai appris où le trouver.

Le nom du schéma a été vu dans le fichier .dmp:

  • <OWNER_NAME>SOURCE_SCHEMA</OWNER_NAME> Cela a été vu avant chaque nom de table / définition.

  • SCHEMA_LIST 'SOURCE_SCHEMA' Cela a été vu vers la fin du fichier .dmp.

Fait intéressant, autour de la section <=>, la ligne de commande utilisée permettait également de créer le dump, les répertoires utilisés, les fichiers de référence utilisés, la version Windows sur laquelle il était exécuté et les paramètres de session d'exportation (langue, formats de date).

Donc, le problème est résolu:

En supposant que vous ne disposiez pas du fichier journal du travail expdp qui l’a généré, l’option la plus simple serait probablement d’utiliser le Paramètre SQLFILE pour que impdp génère un fichier DDL (basé sur une importation complète). Ensuite, vous pouvez récupérer les noms de schéma de ce fichier. Pas idéal, bien sûr, car impdp doit lire tout le fichier de vidage pour extraire le DDL, puis encore pour accéder au schéma qui vous intéresse et vous devez faire un peu de texte pour rechercher les différentes instructions CREATE USER. , mais cela devrait être faisable.

Lorsque vous exécutez la commande impdp pour générer un fichier SQL, vous devez l'exécuter en tant qu'utilisateur doté du rôle DATAPUMP_IMP_FULL_DATABASE.

Ou ... exécutez-le en tant qu'utilisateur avec des privilèges faibles et utilisez l'option MASTER_ONLY = YES, puis inspectez la table principale. par exemple.

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

Étape 1: Voici un exemple simple. Vous devez créer un fichier SQL à partir du fichier de vidage en utilisant SQLFILE l'option.

Étape 2: Grep pour CREATE USER dans le fichier SQL généré (ici tables.sql)

Exemple ici:

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

Importation: Version 11.2.0.3.0 - Production le vendredi 26 avril à 08:29:06 2013

     

Copyright © 1982, 2011, Oracle et / ou ses filiales. Tous droits réservés.

     

Nom d'utilisateur: / as sysdba

     

Type d'objet de traitement SCHEMA_EXPORT / PRE_SCHEMA / PROCACT_SCHEMA Job & "SYS &". & "SYS_SQL_FILE_FULL_01 &"; terminé avec succès à 08:29:12

$ grep "CREATE USER" tables.sql
  

CREATE USER " USER1 " IDENTIFIÉ PAR LES VALEURS: 270D559F9B97C05EA50F78507CD6EAC6AD63969E5E; BBE7786A5F9103 '

Les nombreuses options de datapump expliquées ici http://www.acehints.com/p/ site-map.html

Ma solution (similaire à la réponse de KyleLanser) (sur une boîte Unix):

strings dumpfile.dmp | grep SCHEMA_LIST

Vous devez rechercher OWNER_NAME.

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

cat -v transforme le fichier de vidage en texte visible.

grep -o ne montre que la correspondance, nous ne voyons donc pas de longues lignes

uniq -u supprime les lignes en double afin d’obtenir moins de résultats.

Cela fonctionne plutôt bien, même sur des fichiers de sauvegarde volumineux, et pourrait être modifié pour une utilisation dans un script.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top