impdp content=data_only, как указать, какие таблицы импортировать первыми

Я пытаюсь импортировать свою базу данных с помощью команды

impdp SYSTEM/password DIRECTORY=dmpdir DUMPFILE=database.dmp CONTENT=DATA_ONLY

Это работает при импорте некоторых частей данных, однако я получаю сообщение об ошибке:

ORA-02291: ограничение целостности (SYSTEM.user_role_user_fk) нарушено - родительский ключ не найден

В основном мне нужно импортировать данные из USER сначала, прежде чем я могу импортировать данные из USER_ROLE

Есть ли способ указать порядок операций или какие данные таблицы импортировать первыми при использовании IMPDP?

РЕДАКТИРОВАТЬ: плохое решение, которое я нашел, это просто использовать тот же impdp Заявление, как указано выше, дважды. Делая это дважды, я могу импортировать оба USER а также USER_ROLEОднако должен быть более легкий путь к этому.

1 ответ

Решение

Вы можете отключить ограничения перед импортом, а затем снова включить их. Вы можете сделать это с помощью некоторого динамического SQL:

begin
  for r in (
    select 'ALTER TABLE "'||c.table_name||
      '" DISABLE CONSTRAINT "'||c.constraint_name||'"' as cmd
    from user_constraints c
    where c.constraint_type = 'R'
  )
  loop
    execute immediate r.cmd;
  end loop;
end;
/

После того, как вы запустите это, например, через SQL*Plus, используя heredoc в сценарии оболочки, вы можете запустить impdp команда для импорта всех таблиц за один раз; а затем запустить тот же блок PL/SQL, но с ENABLE вместо DISABLE,

Стоит проверить, есть ли у вас отключенные ограничения перед началом работы. Если вы сделаете это, сценарий отключения может пропустить их в зависимости от их состояния, но сценарий включения не сможет определить, нужно ли им снова включить или нет; так что вы можете либо создать статический сценарий включения, либо жестко закодировать любые исключения, которые вам нужны.

Другие вопросы по тегам