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

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

  •  01-07-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

Другие советы

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

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

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

Согласно документации, на самом деле это не приводит к изменению базы данных:

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

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

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

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

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

  • SCHEMA_LIST 'SOURCE_SCHEMA' Это было замечено ближе к концу .dmp.

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

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

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

Выполнение команды 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

Шаг 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 и / или ее аффилированных лиц.Все права защищены.

Имя пользователя:/ как 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

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

strings dumpfile.dmp | grep SCHEMA_LIST

Вам нужно выполнить поиск по имени ВЛАДЕЛЬЦА.

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

cat -v преобразует файл дампа в видимый текст.

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top