首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >content=data_only,如何指定要先导入哪些表

content=data_only,如何指定要先导入哪些表
EN

Stack Overflow用户
提问于 2016-09-02 03:06:17
回答 1查看 21.5K关注 0票数 0

我试图使用以下命令导入我的数据库

代码语言:javascript
运行
复制
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,但是必须有一种更简单的方法。

EN

Stack Overflow用户

回答已采纳

发布于 2016-09-02 18:32:12

您可以在导入之前禁用这些约束,然后再重新启用它们。您可以使用一些动态SQL来实现这一点:

代码语言:javascript
运行
复制
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脚本中使用一个本地文档,您可以运行impdp命令一次导入所有表;然后运行相同的PL/SQL块,但使用ENABLE而不是DISABLE

在开始之前,应该检查是否有任何禁用的约束。如果这样做,禁用脚本可以根据它们的状态跳过它们,但是启用脚本将无法判断它们是否应该重新启用;所以您可以创建一个静态启用脚本,或者硬编码您需要的任何异常。

票数 4
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39283715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档