Wie die Schemen innerhalb einer Oracle Data Pump Export-Datei, um festzustellen
Frage
- Ich habe eine Oracle-Datenbank-Sicherungsdatei (.dmp), die mit expdp erstellt wurde.
- Die DMP-Datei war ein Export der gesamten Datenbank.
- Ich brauche 1 der Schemata zur Wiederherstellung von in dieser Dump-Datei.
- Ich habe nicht die Namen der Schemata innerhalb dieser Dump-Datei kennen.
- So verwenden impdp die Daten zu importieren ich den Namen des Schemas müssen geladen werden.
Also, ich brauche die DMP-Datei zu überprüfen und alle Schemata darin auflisten, wie kann ich das tun?
Update (2008-09-18 13.02) - Detailliertere Informationen:
Der impdp Befehl i aktuellen bin verwendet, ist:
impdp user/password@database directory=DPUMP_DIR
dumpfile=EXPORT.DMP logfile=IMPORT.LOG
Und die DPUMP_DIR richtig konfiguriert ist.
SQL> SELECT directory_path
2 FROM dba_directories
3 WHERE directory_name = 'DPUMP_DIR';
DIRECTORY_PATH
-------------------------
D:\directory_path\dpump_dir\
Und ja, ist die EXPORT.DMP Datei infact in diesem Ordner.
Die Fehlermeldung erhalte ich, wenn ich den impdp Befehl ausgeführt wird:
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
Diese Fehlermeldung wird meist erwartet. Ich brauche den impdp Befehl sein:
impdp user/password@database directory=DPUMP_DIR dumpfile=EXPORT.DMP
SCHEMAS=SOURCE_SCHEMA REMAP_SCHEMA=SOURCE_SCHEMA:MY_SCHEMA
Aber das zu tun, ich brauche das Quellschema.
Lösung
Wenn Sie die DMP-Datei mit einem Editor öffnen, die große Dateien verarbeiten kann, können Sie in der Lage sein, die Bereiche zu lokalisieren, wo die Schemanamen erwähnt werden. Nur sicher sein, nicht etwas zu ändern. Es wäre besser, wenn Sie eine Kopie des Original-Dump geöffnet.
Andere Tipps
impdp
exportiert die DDL einer dmp
Sicherung in eine Datei, wenn Sie die SQLFILE
Parameter . Zum Beispiel setzen diese in eine Textdatei
impdp '/ as sysdba' dumpfile=<your .dmp file> logfile=import_log.txt sqlfile=ddl_dump.txt
Dann überprüfen ddl_dump.txt
für die Tablespaces, Benutzer und Schemata in der Sicherung.
Nach der Dokumentation gehen diese auf die Datenbank nicht tatsächlich ändern:
Die SQL wird nicht tatsächlich ausgeführt wird, und das Zielsystem bleibt unverändert.
Update (2008-09-19 10.05) - Lösung:
Meine Lösung: Social Engineering, grub ich wirklich hart und fand jemanden, der das Schema Namen kannte
.
Technische Lösung: Suche im DMP-Datei haben Ausbeute der Schemaname
.
Sobald ich das Schema Namen kannte, suchte ich die Dump-Datei und gelernt, wo sie zu finden.
Platziert wurden die Schemen Namen, in der DMP-Datei zu sehen:
-
<OWNER_NAME>SOURCE_SCHEMA</OWNER_NAME>
Dies wurde vor jedem Tabellennamen / Definition zu sehen. -
SCHEMA_LIST 'SOURCE_SCHEMA'
Dies wurde in der Nähe des Endes des DMP gesehen.
Interessanterweise um den SCHEMA_LIST 'SOURCE_SCHEMA'
Abschnitt, es hatte auch den Zeilenbefehl verwendet, um den Dump zu erstellen, Verzeichnisse verwendet, par-Dateien verwendet, Windows-Version wurde läuft auf und exportieren Sitzungseinstellungen (Sprache, Datumsformate).
So Problem gelöst:)
Unter der Annahme, dass Sie nicht über die Protokolldatei aus dem expdp Job, der die Datei in erster Linie erzeugt wird, wäre die einfachste Möglichkeit wahrscheinlich sein, die SQLFILE Parameter hat impdp eine Datei von DDL zu erzeugen (basierend auf einem vollständigen Import). Dann können Sie die Schemanamen aus dieser Datei greifen. Nicht ideal, natürlich, da impdp hat die gesamte Dump-Datei zu lesen, die DDL und dann wieder zu extrahieren, um das Schema zu bekommen Sie interessiert sind, und Sie haben ein bisschen Textdatei für die verschiedenen CREATE USER-Anweisungen der Suche zu tun , aber es sollte machbar sein.
Der den impdp Befehl ausführen eine SQLFILE zu erzeugen, müssen Sie es als Benutzer ausgeführt werden, der die DATAPUMP_IMP_FULL_DATABASE Rolle hat.
oder ... es als niedrig privilegierte Benutzer ausgeführt und die MASTER_ONLY = YES Option verwenden, dann überprüfen Sie die Master-Tabelle. z.B.
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
/
Schritt 1: Hier ist ein einfaches Beispiel. Sie haben eine SQL-Datei aus der Dump-Datei mit SQLFILE
Option erstellen.
Schritt 2: Grep für CREATE USER
in der generierten SQL-Datei (hier tables.sql)
Beispiel hier:
$ impdp directory=exp_dir dumpfile=exp_user1_all_tab.dmp logfile=imp_exp_user1_tab sqlfile=tables.sql
Import: Release 11.2.0.3.0 - Produktion am Fr 26. April 2013 08.29.06
Copyright (c) 1982, 2011, Oracle und / oder ihrer Tochtergesellschaften. Alle Rechte vorbehalten.
Benutzername: / als sysdba
Verarbeitungsobjekttyp SCHEMA_EXPORT / PRE_SCHEMA / PROCACT_SCHEMA Job "SYS". "SYS_SQL_FILE_FULL_01" erfolgreich abgeschlossen 08.29.12
$ grep "CREATE USER" tables.sql
CREATE USER "USER1" GEKENNZEICHNET DURCH WERTE 'S: 270D559F9B97C05EA50F78507CD6EAC6AD63969E5E; BBE7786A5F9103'
Lot von Datapump Optionen hier erklärt http://www.acehints.com/p/ Website-map.html
Meine Lösung (ähnlich KyleLanser Antwort) (auf einem Unix-Kasten):
strings dumpfile.dmp | grep SCHEMA_LIST
Sie müssen sich für OWNER_NAME suchen.
cat -v dumpfile.dmp | grep -o '<OWNER_NAME>.*</OWNER_NAME>' | uniq -u
cat -v die dumpfile in sichtbaren Text verwandeln.
grep -o zeigt nur das Spiel, so dass wir nicht wirklich lange Schlangen sehen
uniq -u entfernt doppelte Linien, so dass Sie weniger Ausgabe.
Das funktioniert ziemlich gut, auch auf großen Dump-Dateien, und in einem Skript für die Nutzung wird gezwickt könnte.