impdp content=data_only,如何指定先导入哪些表
impdp content=data_only, how to specify which tables to import first
我正在尝试使用命令
导入我的数据库
impdp SYSTEM/password DIRECTORY=dmpdir DUMPFILE=database.dmp CONTENT=DATA_ONLY
这适用于导入部分数据,但是,我收到一个错误:
ORA-02291: integrity constraint (SYSTEM.user_role_user_fk) violated -
parent key not found
基本上我需要先从USER
导入数据,然后才能从USER_ROLE
导入数据
有没有办法指定操作顺序或使用 IMPDP 时首先导入哪些 table 数据?
编辑:我发现一个糟糕的解决方案是简单地使用与上面相同的 impdp
语句两次。通过两次,我可以导入 USER
和 USER_ROLE
,但是必须有更简单的方法。
您可以在导入前禁用约束,然后再重新启用它们。你可以用一些动态的 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
命令一次性导入所有表;然后 运行 相同的 PL/SQL 块,但使用 ENABLE
而不是 DISABLE
.
在开始之前检查您是否有任何禁用的约束是值得的。如果您这样做,禁用脚本可以根据它们的状态跳过它们,但是启用脚本将无法判断是否应该重新启用它们;因此您可以创建一个静态启用脚本,或者对您需要的任何异常进行硬编码。
我正在尝试使用命令
导入我的数据库impdp SYSTEM/password DIRECTORY=dmpdir DUMPFILE=database.dmp CONTENT=DATA_ONLY
这适用于导入部分数据,但是,我收到一个错误:
ORA-02291: integrity constraint (SYSTEM.user_role_user_fk) violated - parent key not found
基本上我需要先从USER
导入数据,然后才能从USER_ROLE
导入数据
有没有办法指定操作顺序或使用 IMPDP 时首先导入哪些 table 数据?
编辑:我发现一个糟糕的解决方案是简单地使用与上面相同的 impdp
语句两次。通过两次,我可以导入 USER
和 USER_ROLE
,但是必须有更简单的方法。
您可以在导入前禁用约束,然后再重新启用它们。你可以用一些动态的 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
命令一次性导入所有表;然后 运行 相同的 PL/SQL 块,但使用 ENABLE
而不是 DISABLE
.
在开始之前检查您是否有任何禁用的约束是值得的。如果您这样做,禁用脚本可以根据它们的状态跳过它们,但是启用脚本将无法判断是否应该重新启用它们;因此您可以创建一个静态启用脚本,或者对您需要的任何异常进行硬编码。