Подтвердить что ты не робот

Как определить схемы внутри файла экспорта данных Oracle Data Pump

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

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


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

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

impdp user/[email protected] 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/[email protected] directory=DPUMP_DIR dumpfile=EXPORT.DMP 
      SCHEMAS=SOURCE_SCHEMA REMAP_SCHEMA=SOURCE_SCHEMA:MY_SCHEMA

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

В соответствии с документацией это фактически не изменяет базу данных:

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

Ответ 3

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

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

Помещает имя схемы в файл .dmp:

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

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

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

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

Ответ 4

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

Ответ 5

Запустив команду impdp для создания sql файла, вам нужно будет запустить ее как пользователь, у которого есть роль 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

Ответ 6

Шаг 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

Авторское право (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

СОЗДАТЬ ПОЛЬЗОВАТЕЛЬ "USER1", ИДЕНТИФИЦИРОВАННЫЙ ЗНАЧЕНИЯМИ: 270D559F9B97C05EA50F78507CD6EAC6AD63969E5E; BBE7786A5F9103 '

Здесь перечислены многие параметры datapump http://www.acehints.com/p/site-map.html

Ответ 7

Мое решение (похожее на ответ KyleLanser) (в блоке Unix):

strings dumpfile.dmp | grep SCHEMA_LIST

Ответ 8

Вам нужно найти OWNER_NAME.

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

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

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

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

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