2012-02-29 48 views
0

我有一个数据转储,然后我想将它导入到另一个数据库(Oracle 10g)。目标数据库已经有表(无数据)和一些外键约束。我将通过表导入数据以避免约束错误。如果有人知道更简单的方法,请教我? (Oracle的导入工具不具备自动识别表之间关系的功能,是不是?)ORACLE 10g:如何导入没有外键约束错误?

+0

如果(由于某种原因)您不想使用@JustinCave解决方案,则可以在user_constraints表上循环并禁用首先外键约束在导入数据后,再次启用它们。但是如果我是你,我不会这样做...... – 2012-02-29 16:41:04

回答

1

假设您有模式级导出,源模式具有相同的外键约束,并且所有外键约束都是在同一模式的表之间,导入实用程序应自动处理外键约束。您不需要为此做任何事情(当然,当您执行导入时,您将不得不忽略错误,因为它会尝试创建表并获取它们已存在的错误)。

+0

在类似于11g XE的提问者的情况下,我将'imp ignore = Y touser = foo'用于预先存在的模式,并且它扼杀了FK限制。它按字母顺序处理表格,我没有看到它会自动照顾FKs?它似乎要做的就是最终启用它们,但如果它们已经存在,那不会有帮助。 – 2015-02-03 13:10:57

4

您可以禁用的外键第一:

begin 
    for cnst in (SELECT constraint_name, table_name FROM user_constraints WHERE constraint_type ='R') loop 
    execute immediate 'alter table '|| cnst.table_name||' disable constraint ' || cnst.constraint_name ; 
    end loop; 
end; 

加载数据做同样的,让他们回来后(只需更改alter table命令enable而不是disable

但这是有风险,因为如果数据不符合您的约束 - 您将遇到问题...