Как определить схемы внутри файла экспорта Oracle Data Pump - PullRequest
36 голосов
/ 18 сентября 2008
  • У меня есть файл резервной копии базы данных Oracle (.dmp), созданный с помощью expdp.
  • Файл .dmp был экспортом всей базы данных.
  • Мне нужно восстановить одну из схем из этого файла дампа.
  • Я не знаю имен схем внутри этого файла дампа.
  • Чтобы использовать impdp для импорта данных, мне нужно загрузить имя схемы.

Итак, мне нужно проверить файл .dmp и перечислить все схемы в нем, как мне это сделать?


Обновление (2008-09-18 13:02) - Более подробная информация:

Команда impdp, которую я сейчас использую:

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

И DPUMP_DIR правильно настроен.

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

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

И да, файл EXPORT.DMP в этой папке заражен.

При запуске команды 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

Это сообщение об ошибке в основном ожидается. Мне нужна команда impdp:

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

Но для этого мне нужна схема источника.

Ответы [ 8 ]

76 голосов
/ 15 июля 2011

impdp экспортирует DDL dmp резервной копии в файл, если вы используете параметр SQLFILE . Например, поместите это в текстовый файл

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

Затем проверьте ddl_dump.txt для табличных пространств, пользователей и схем в резервной копии.

Согласно документации, это фактически не изменяет базу данных:

SQL фактически не выполняется, и целевая система остается неизменной.

12 голосов
/ 19 сентября 2008

Если вы откроете файл DMP с помощью редактора, который может обрабатывать большие файлы, вы сможете найти области, где упоминаются имена схем. Только убедитесь, что ничего не изменилось. Было бы лучше, если бы вы открыли копию оригинального дампа.

10 голосов
/ 19 сентября 2008

Обновление (2008-09-19 10:05) - Решение:

Мое решение: Социальная инженерия, я очень усердно копал и нашел человека, который знал имя схемы.
Техническое решение: Поиск в файле .dmp сделал , получив имя схемы.
Узнав имя схемы, я искал файл дампа и узнал, где его найти.

Места, где имя схемы было видно в файле .dmp:

  • <OWNER_NAME>SOURCE_SCHEMA</OWNER_NAME> Это было видно перед каждым именем таблицы / определением.

  • SCHEMA_LIST 'SOURCE_SCHEMA' Это было видно в конце .dmp.

Интересно, что в разделе SCHEMA_LIST 'SOURCE_SCHEMA' также была командная строка, используемая для создания дампа, используемых каталогов, файлов par, используемой версии Windows и экспорта настроек сеанса (язык, форматы даты).

Итак, проблема решена:)

6 голосов
/ 19 сентября 2008

Предполагая, что у вас нет файла журнала из задания expdp, которое сначала сгенерировало файл, возможно, проще всего будет использовать параметр SQLFILE , чтобы impdp сгенерировал файл DDL (на основе полного импорта). Затем вы можете получить имена схем из этого файла. Конечно, это не идеал, так как impdp должен прочитать весь файл дампа для извлечения DDL, а затем снова, чтобы добраться до интересующей вас схемы, и вам придется немного по текстовому файлу искать различные операторы CREATE USER. , но это должно быть выполнимо.

4 голосов
/ 26 апреля 2013

Шаг 1: Вот один простой пример. Вы должны создать файл SQL из файла дампа, используя параметр SQLFILE.

Шаг 2: Grep для CREATE USER в сгенерированном файле SQL (здесь tables.sql)

Пример здесь:

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

Импорт: выпуск 11.2.0.3.0 - производство в пт, 26 апреля 08:29:06 2013

Copyright (c) 1982, 2011, Oracle и / или ее филиалы. Все права защищены.

Имя пользователя: / as sysdba

Обработка типа объекта SCHEMA_EXPORT / PRE_SCHEMA / PROCACT_SCHEMA Задание "SYS". "SYS_SQL_FILE_FULL_01" успешно завершено в 08: 29: 12

$ grep "CREATE USER" tables.sql

СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ «ПОЛЬЗОВАТЕЛЬ1», ОПРЕДЕЛЯЕМЫЙ ЗНАЧЕНИЯМИ S: 270D559F9B97C05EA50F78507CD6EAC6AD63969E5E; BBE7786A5F9103 '

Здесь описаны варианты набора данных http://www.acehints.com/p/site-map.html

4 голосов
/ 22 января 2013

Запустив команду impdp для создания файла sqlfile, вам нужно будет запустить его как пользователя с ролью DATAPUMP_IMP_FULL_DATABASE.

Или ... запустите его как пользователь с низкими привилегиями и используйте опцию MASTER_ONLY = YES, затем просмотрите основную таблицу. например

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

2 голосов
/ 21 февраля 2017

Вам необходимо найти OWNER_NAME.

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

cat -v превратить файл дампа в видимый текст.

grep -o показывает только совпадение, поэтому мы не видим очень длинные строки

uniq -u удаляет повторяющиеся строки, поэтому вы видите меньше вывода.

Это работает довольно хорошо, даже для больших файлов дампа, и может быть настроено для использования в скрипте.

2 голосов
/ 24 апреля 2013

Мое решение (аналогично ответу KyleLanser) (в окне Unix):

strings dumpfile.dmp | grep SCHEMA_LIST
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...