Oracle impdp content=data_only,如何指定首先导入哪些表
我正在尝试使用命令导入我的数据库Oracle impdp content=data_only,如何指定首先导入哪些表,oracle,impdp,Oracle,Impdp,我正在尝试使用命令导入我的数据库 impdp SYSTEM/password DIRECTORY=dmpdir DUMPFILE=database.dmp CONTENT=DATA_ONLY 这在导入数据的某些部分时起作用,但是,我得到一个错误: ORA-02291:违反完整性约束(系统用户\角色\用户\ fk)- 找不到父项 基本上,我需要先从用户导入数据,然后才能从用户角色 使用IMPDP时,是否有方法指定操作顺序或首先导入哪个表数据 编辑:我发现一个糟糕的解决方案是简单地使用与上面相同的
impdp SYSTEM/password DIRECTORY=dmpdir DUMPFILE=database.dmp CONTENT=DATA_ONLY
这在导入数据的某些部分时起作用,但是,我得到一个错误:
ORA-02291:违反完整性约束(系统用户\角色\用户\ fk)-
找不到父项
基本上,我需要先从用户
导入数据,然后才能从用户角色
使用IMPDP时,是否有方法指定操作顺序或首先导入哪个表数据
编辑:我发现一个糟糕的解决方案是简单地使用与上面相同的
impdp
语句两次。通过执行两次,我可以导入用户
和用户角色
,但是必须有一种更简单的方法来实现这一点。您可以在导入之前禁用约束,然后重新启用它们。您可以使用一些动态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脚本中使用herdoc,然后可以运行impdp
命令一次性导入所有表;然后运行相同的PL/SQL块,但使用ENABLE
而不是DISABLE
在开始之前,您需要检查是否有任何禁用的约束。如果您这样做,禁用脚本可以根据它们的状态跳过它们,但启用脚本无法判断它们是否应该重新启用;因此,您可以创建一个静态启用脚本,或硬编码任何需要的异常。您可以在导入之前禁用约束,然后重新启用它们。您可以使用一些动态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脚本中使用herdoc,然后可以运行impdp
命令一次性导入所有表;然后运行相同的PL/SQL块,但使用ENABLE
而不是DISABLE
在开始之前,您需要检查是否有任何禁用的约束。如果您这样做,禁用脚本可以根据它们的状态跳过它们,但启用脚本无法判断它们是否应该重新启用;因此,您可以创建一个静态启用脚本,或者硬编码您需要的任何异常。显然,这是预期的行为;见MOS注释1062564.1。这是指,虽然不清楚它是否适用于这种情况。您是否能够在导入之前禁用约束?在过去,我运行了一个脚本来动态禁用所有约束,然后再重新启用它们。@AlexPoole-您可以使用您的脚本并对dmp文件运行它吗?不,您可以运行脚本来禁用;执行
impdp
(一次完成所有表格);然后运行脚本以重新启用。我想所有这些都可以在shell或批处理脚本包装器中完成。唯一的选择是您已经尝试过的,单独运行impdp
以按您期望的顺序导入它们。您不能告诉导入订单。显然,这是预期的行为;见MOS注释1062564.1。这是指,虽然不清楚它是否适用于这种情况。您是否能够在导入之前禁用约束?在过去,我运行了一个脚本来动态禁用所有约束,然后再重新启用它们。@AlexPoole-您可以使用您的脚本并对dmp文件运行它吗?不,您可以运行脚本来禁用;执行impdp
(一次完成所有表格);然后运行脚本以重新启用。我想所有这些都可以在shell或批处理脚本包装器中完成。唯一的选择是您已经尝试过的,单独运行impdp
以按您期望的顺序导入它们。你不能告诉我你的订单。