impdp content = data_only,如何指定首先导入哪些表

时间:2016-09-02 03:06:17

标签: oracle impdp

我正在尝试使用命令

导入我的数据库
impdp SYSTEM/password DIRECTORY=dmpdir DUMPFILE=database.dmp CONTENT=DATA_ONLY

这适用于导入数据的某些部分,但是,我收到错误:

  

ORA-02291:违反了完整性约束(SYSTEM.user_role_user_fk) -   未找到父键

基本上我需要先从USER导入数据,然后才能从USER_ROLE导入数据

使用IMPDP时,有没有办法指定操作顺序或首先导入的表数据?

编辑:我发现一个糟糕的解决方案是简单地使用与上面相同的impdp语句两次。通过两次执行,我可以同时导入USERUSER_ROLE,但必须有一种更简单的方法。

1 个答案:

答案 0 :(得分:2)

您可以在导入前禁用约束,然后重新启用它们。你可以用一些动态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在shell脚本中使用heredoc,然后可以运行impdp命令一次导入所有表;然后使用ENABLE而不是DISABLE运行相同的PL / SQL块。

在开始之前,如果您有任何禁用限制,则值得检查。如果你这样做,禁用脚本可以根据它们的状态跳过它们,但启用脚本将无法判断它们是否应该重新启用;因此,您可以创建静态启用脚本,也可以对所需的任何异常进行硬编码。