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