Jak określić Schematy wewnątrz pliku eksportowego Oracle Data Pump

  • mam plik kopii zapasowej bazy danych Oracle (.dmp), który został utworzony za pomocą expdp.
  • The .plik dmp był eksportem całej bazy danych.
  • muszę przywrócić 1 schemat z tego pliku zrzutu.
  • nie znam nazw schematów w tym pliku zrzutu.
  • Aby zaimportować dane z impdp, potrzebuję nazwy schematu do załadowania.
Więc muszę sprawdzić .plik dmp i listę wszystkich schematów w nim, jak to zrobić to?

Aktualizacja (2008-09-18 13: 02) - więcej informacji:

Aktualnie używam polecenia impdp:

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

I dpump_dir jest poprawnie skonfigurowany.

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

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

I tak, eksport.Plik DMP znajduje się w tym folderze.

Komunikat o błędzie, który otrzymuję po uruchomieniu polecenia impdp to:

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

Ten Komunikat o błędzie jest najczęściej oczekiwany. Potrzebuję komendy impdp be:

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

Ale aby to zrobić, potrzebuję źródła schemat.

Author: KyleLanser, 2008-09-18

8 answers

Jeśli otworzysz plik DMP za pomocą edytora obsługującego duże pliki, możesz być w stanie zlokalizować obszary, w których wymienione są nazwy schematów. Tylko nie zmieniaj niczego. Byłoby lepiej, gdybyś otworzył kopię oryginalnego zrzutu.

 11
Author: Petros,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-19 06:25:02

impdp eksportuje DDL kopii zapasowej dmp do pliku, jeśli używasz SQLFILE parametr . Na przykład, umieść to w pliku tekstowym

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

Następnie sprawdź ddl_dump.txt dla tablespaces, users i schemas w kopii zapasowej.

Zgodnie z dokumentacją, nie zmienia to bazy danych:

SQL nie jest faktycznie wykonywany, a docelowy system pozostaje niezmieniony.

 74
Author: Factor Mystic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-30 19:21:57

Aktualizacja (2008-09-19 10: 05) - Rozwiązanie:

Moje rozwiązanie: socjotechnika, kopałem naprawdę ciężko i znalazłem kogoś, kto znał nazwę schematu.
rozwiązanie techniczne: plik dmp czy dał nazwę schematu.
Gdy znałam nazwę schematu, przeszukałam plik zrzutu i dowiedziałam się, gdzie go znaleźć.

Miejsca nazw schematów były widoczne, w .plik dmp:

  • <OWNER_NAME>SOURCE_SCHEMA</OWNER_NAME> To było widoczne przed każdym stołem nazwa / definicja.

  • SCHEMA_LIST 'SOURCE_SCHEMA' To było widoczne pod koniec .dmp.

Co ciekawe, wokół sekcji SCHEMA_LIST 'SOURCE_SCHEMA' znajdował się również wiersz poleceń używany do tworzenia zrzutu, używanych katalogów, używanych plików par, wersji systemu windows, na której był uruchomiony, oraz ustawień sesji eksportu (język, formaty daty).

Więc problem rozwiązany:)

 9
Author: KyleLanser,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-19 16:27:05

Zakładając, że nie masz pliku dziennika z zadania expdp, które go wygenerowało, najprościej byłoby użyć parametru sqlfile , aby impdp wygenerował plik DDL (oparty na pełnym imporcie). Następnie możesz pobrać nazwy schematów z tego pliku. Oczywiście nie jest to idealne rozwiązanie, ponieważ impdp musi odczytać cały plik zrzutu, aby wyodrębnić DDL, a następnie ponownie, aby dostać się do schematu, który Cię interesuje, i musisz trochę przeszukiwać plik tekstowy dla różnych instrukcji CREATE USER, ale powinno być wykonalne.

 5
Author: Justin Cave,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-04 17:22:57

Uruchamiając polecenie impdp, aby utworzyć plik SQL, będziesz musiał uruchomić go jako użytkownik posiadający rolę DATAPUMP_IMP_FULL_DATABASE.

Lub... uruchom go jako niski uprzywilejowany użytkownik i użyj opcji MASTER_ONLY=YES, a następnie sprawdź tabelę master. np.

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

 4
Author: Peter Wiseman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-22 03:23:41

Krok 1: Oto jeden prosty przykład. Musisz utworzyć plik SQL z pliku zrzutu używając opcji SQLFILE.

Krok 2: Grep dla CREATE USER w wygenerowanym pliku SQL (tutaj tabele.sql)

Przykład tutaj:

$ 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-produkcja już w piątek 26 08:29:06 2013

Copyright (c) 1982, 2011, Oracle i / lub jej podmioty stowarzyszone. Wszelkie prawa zastrzeżone.

Username: / as sysdba

Typ obiektu przetwarzania SCHEMA_EXPORT/PRE_SCHEMA / PROCACT_SCHEMA praca "SYS"."SYS_SQL_FILE_FULL_01" zakończone pomyślnie o 08: 29: 12

$ grep "CREATE USER" tables.sql

UTWÓRZ UŻYTKOWNIKA "USER1" IDENTYFIKOWANEGO WARTOŚCIAMI "S:270D559F9B97C05EA50F78507CD6EAC6AD63969E5E; BBE7786A5F9103"

Wiele opcji datapump wyjaśnione tutaj http://www.acehints.com/p/site-map.html

 4
Author: DBA,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-26 06:54:32

Moje rozwiązanie (podobne do odpowiedzi Kylelansera) (na uniksowym pudełku):

strings dumpfile.dmp | grep SCHEMA_LIST
 2
Author: slafs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-24 13:10:01

Musisz wyszukać nazwę właściciela.

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

Cat-v zamienia plik dumpfile na widoczny tekst.

Grep-o pokazuje tylko mecz, więc nie widzimy naprawdę długich linii

Uniq-u usuwa zduplikowane linie, więc widzisz mniej wyjścia.

To działa całkiem dobrze, nawet na dużych plikach zrzutu, i może być zmodyfikowany do użycia w skrypcie.

 0
Author: Aldur,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-21 17:41:52