我试图使用以下命令导入我的数据库
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
,但是必须有一种更简单的方法。
发布于 2016-09-02 18:32:12
您可以在导入之前禁用这些约束,然后再重新启用它们。您可以使用一些动态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脚本中使用一个本地文档,您可以运行impdp
命令一次导入所有表;然后运行相同的PL/SQL块,但使用ENABLE
而不是DISABLE
。
在开始之前,应该检查是否有任何禁用的约束。如果这样做,禁用脚本可以根据它们的状态跳过它们,但是启用脚本将无法判断它们是否应该重新启用;所以您可以创建一个静态启用脚本,或者硬编码您需要的任何异常。
https://stackoverflow.com/questions/39283715
复制相似问题